diff --git a/source/addons/boxconstructor/boxconstructor.gd b/source/addons/boxconstructor/boxconstructor.gd
new file mode 100644
index 0000000..11b2439
--- /dev/null
+++ b/source/addons/boxconstructor/boxconstructor.gd
@@ -0,0 +1,1156 @@
+@tool
+extends EditorPlugin
+
+# === Constants ===
+enum BuildMode {
+ DISABLE,
+ SELECT,
+ ADD
+}
+
+
+const GRID_SCALE_1 = 0.01
+const GRID_SCALE_2 = 0.1
+const GRID_SCALE_3 = 0.25
+const GRID_SCALE_4 = 0.5
+const GRID_SCALE_5 = 0.75
+const GRID_SCALE_6 = 1
+const GRID_SCALE_7 = 2
+const GRID_SCALE_8 = 5
+const GRID_SCALE_9 = 10
+const BASE_PREVIEW_THICKNESS = 0.05
+
+# === Editor properties ===
+var current_mode: BuildMode = BuildMode.SELECT
+var toolbar: PanelContainer
+var editor_viewport = EditorInterface.get_editor_viewport_3d()
+var camera = editor_viewport.get_camera_3d()
+
+# === Grid and CSG properties ===
+var csg_root: CSGCombiner3D
+var selected_grid: CubeGrid3D
+var csg_mesh: MeshInstance3D = null
+
+# === Rectangle drawing properties ===
+var is_drawing: bool = false
+var draw_normal: Vector3 = Vector3.UP
+var draw_start: Vector3 = Vector3()
+var draw_end: Vector3 = Vector3()
+var draw_preview: MeshInstance3D = null
+var draw_plane: Plane
+var base_rect_points: Array = []
+
+# === Extrusion properties ===
+var is_extruding: bool = false
+var has_started_extrusion: bool = false
+var extrude_distance: float = 0.0
+var initial_extrude_point: Vector3
+var extrude_line_normal: Vector3
+
+# === Highlight properties ===
+var hover_preview: MeshInstance3D = null
+var hover_point: Vector3 = Vector3.ZERO
+
+# === Edge Movement properties ===
+var edge_preview: MeshInstance3D = null
+var current_edge: Array = []
+var is_dragging_edge: bool = false
+var dragged_mesh: CSGMesh3D = null
+var drag_start_position: Vector3
+var drag_plane: Plane
+var drag_start_offset: Vector3
+var is_mouse_in_viewport: bool = false
+
+var undo_redo
+var drag_start_vertices: PackedVector3Array
+var drag_start_indices: PackedInt32Array
+
+func _update_mesh_arrays(mesh_node: CSGMesh3D, vertices: PackedVector3Array, indices: PackedInt32Array) -> void:
+ var arr_mesh = mesh_node.mesh as ArrayMesh
+ if arr_mesh:
+ var arrays = []
+ arrays.resize(Mesh.ARRAY_MAX)
+ arrays[Mesh.ARRAY_VERTEX] = vertices
+ arrays[Mesh.ARRAY_INDEX] = indices
+ arr_mesh.clear_surfaces()
+ arr_mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, arrays)
+
+# === Lifecycle Methods ===
+func _enter_tree() -> void:
+ EditorInterface.get_selection().selection_changed.connect(_on_selection_changed)
+ editor_viewport = EditorInterface.get_editor_viewport_3d()
+ undo_redo = get_undo_redo()
+ toolbar = preload("res://addons/boxconstructor/scripts/toolbar.gd").new(self) # Create the toolbar
+ var viewport_base = editor_viewport.get_parent().get_parent()
+ viewport_base.add_child(toolbar)
+ toolbar.set_anchors_and_offsets_preset(Control.PRESET_CENTER_TOP, 0, 10)
+
+ toolbar.hide() # Hide toolbar by default
+ _connect_toolbar_signals() # Connect signals
+
+
+func _exit_tree() -> void:
+ if toolbar:
+ toolbar.queue_free() # Remove the toolbar
+
+ if EditorInterface.get_selection().selection_changed.is_connected(_on_selection_changed):
+ EditorInterface.get_selection().selection_changed.disconnect(_on_selection_changed) # Disconnect signals
+
+
+# This section handles all of the inputs
+func _input(event: InputEvent) -> void:
+ if not selected_grid or not selected_grid.is_inside_tree():
+ return
+
+ # Pressing the X key will move the grid to mouse position
+ if event is InputEventKey and event.pressed and event.keycode == KEY_X:
+ if not camera or not selected_grid:
+ return
+ # Cast a ray and get the hit position
+ var from = camera.project_ray_origin(editor_viewport.get_mouse_position())
+ var to = from + camera.project_ray_normal(editor_viewport.get_mouse_position()) * 5000
+ var ray_query = PhysicsRayQueryParameters3D.new()
+ ray_query.from = from
+ ray_query.to = to
+ var hit = EditorInterface.get_edited_scene_root().get_world_3d().direct_space_state.intersect_ray(ray_query)
+ if hit:
+ var snapped_pos = _snap_to_grid(hit.position)
+ # Move the Grid to the hit position
+ _align_grid_to_surface(hit.normal, snapped_pos)
+
+ # Pressing Z resets the grid to the 0,0,0 position
+ if event is InputEventKey and event.pressed and event.keycode == KEY_Z:
+ _reset_grid_transform()
+
+ # Edge movement logic
+ if current_mode == BuildMode.SELECT:
+ if event is InputEventMouseButton:
+ if event.button_index == MOUSE_BUTTON_LEFT and event.pressed:
+ if not is_dragging_edge:
+ if edge_preview and edge_preview.visible:
+ for child in csg_root.get_children():
+ if child is CSGBox3D or child is CSGMesh3D:
+ # Get all of the edges of CSGBox3D or CSGMesh3D
+ var edges = _get_edges(child)
+ for edge in edges:
+
+ # Check if the currently hovered edge is the same as the one we are dragging
+ if edge[0].is_equal_approx(current_edge[0]) and edge[1].is_equal_approx(current_edge[1]):
+ var from = camera.project_ray_origin(event.position)
+ var dir = camera.project_ray_normal(event.position)
+
+ # Create a plane for the edge to drag along
+ var edge_dir = (edge[1] - edge[0]).normalized()
+ drag_plane = Plane(edge_dir, edge[0].dot(edge_dir))
+
+ # Get the intersection point of the ray and the plane
+ var intersection = drag_plane.intersects_ray(from, dir)
+ if intersection:
+ # We turn the CSGBox3D into a custom mesh that allows use to move the vertecies
+ if child is CSGBox3D:
+ dragged_mesh = _convert_box_to_CSGMesh(child)
+
+ else:
+ dragged_mesh = child
+
+ var arr_mesh = dragged_mesh.mesh as ArrayMesh
+ if arr_mesh:
+ var arrays = arr_mesh.surface_get_arrays(0)
+ drag_start_vertices = arrays[Mesh.ARRAY_VERTEX].duplicate()
+ drag_start_indices = arrays[Mesh.ARRAY_INDEX].duplicate()
+ is_dragging_edge = true # Set dragging to true
+ current_edge = edge # Set the current edge to the one we are dragging
+ drag_start_offset = _snap_to_grid(intersection) # Starting position of edge drag
+ break
+ else:
+ if is_dragging_edge and dragged_mesh:
+ var arr_mesh = dragged_mesh.mesh as ArrayMesh
+ if arr_mesh:
+ var final_arrays = arr_mesh.surface_get_arrays(0)
+ undo_redo.create_action("Move Edge")
+
+ # Store the current state
+ var current_mesh = arr_mesh.duplicate(true)
+
+ # Create original mesh
+ var original_mesh = ArrayMesh.new()
+ var arrays = []
+ arrays.resize(Mesh.ARRAY_MAX)
+ arrays[Mesh.ARRAY_VERTEX] = drag_start_vertices
+ arrays[Mesh.ARRAY_INDEX] = drag_start_indices
+ original_mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, arrays)
+
+ undo_redo.add_do_property(dragged_mesh, "mesh", current_mesh)
+ undo_redo.add_undo_property(dragged_mesh, "mesh", original_mesh)
+ undo_redo.commit_action()
+
+ is_dragging_edge = false
+ dragged_mesh = null
+ edge_preview.hide()
+
+ if event is InputEventMouseMotion:
+ if is_dragging_edge and dragged_mesh:
+ edge_preview.hide()
+ var from = camera.project_ray_origin(event.position)
+ var dir = camera.project_ray_normal(event.position)
+
+ # Project mouse position onto drag plane
+ var intersection = drag_plane.intersects_ray(from, dir)
+ if intersection:
+ # Snapped position on the grid
+ var snapped_pos = _snap_to_grid(intersection)
+ # Offset from the start position
+ var offset = snapped_pos - drag_start_offset
+
+ var arr_mesh = dragged_mesh.mesh as ArrayMesh
+ if arr_mesh:
+ var arrays = arr_mesh.surface_get_arrays(0)
+ var vertices = arrays[Mesh.ARRAY_VERTEX] as PackedVector3Array
+
+ # Get the edge points in local space
+ var local_edge = [
+ dragged_mesh.to_local(current_edge[0]),
+ dragged_mesh.to_local(current_edge[1])
+ ]
+ # Calculate the new offset
+ var local_offset = dragged_mesh.global_transform.basis.inverse() * offset
+ var new_vertices = PackedVector3Array()
+ new_vertices.resize(vertices.size())
+
+ # Move vertices that match the edge points
+ for i in range(vertices.size()):
+ var vertex = vertices[i]
+ if vertex.is_equal_approx(local_edge[0]) or vertex.is_equal_approx(local_edge[1]):
+ new_vertices[i] = vertex + local_offset
+ else:
+ new_vertices[i] = vertex
+
+ # Update the mesh
+ var new_arrays = []
+ new_arrays.resize(Mesh.ARRAY_MAX)
+ new_arrays[Mesh.ARRAY_VERTEX] = new_vertices
+ new_arrays[Mesh.ARRAY_INDEX] = arrays[Mesh.ARRAY_INDEX]
+
+ arr_mesh.clear_surfaces()
+ arr_mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, new_arrays)
+
+ current_edge = [
+ dragged_mesh.global_transform * (local_edge[0] + local_offset),
+ dragged_mesh.global_transform * (local_edge[1] + local_offset)
+ ]
+ drag_start_offset = snapped_pos
+
+ # Highlight the closest edge
+ elif not is_dragging_edge:
+ if not camera or not csg_root:
+ if edge_preview:
+ edge_preview.hide()
+ return
+
+ # Get the closest node
+ var mouse_pos = editor_viewport.get_mouse_position()
+ var closest_node = null
+ var closest_distance = INF
+
+ for child in csg_root.get_children():
+ if not (child is CSGBox3D or child is CSGMesh3D):
+ continue
+
+ var node_center = child.global_position
+ var screen_pos = camera.unproject_position(node_center) # Takes the position in 3D converts it to 2D
+ var distance = screen_pos.distance_to(mouse_pos)
+
+ if distance < closest_distance:
+ closest_node = child
+ closest_distance = distance
+
+ if closest_distance:
+ var closest_edge = _find_closest_edge(closest_node, mouse_pos)
+ current_edge = closest_edge
+ _create_edge_preview(closest_edge)
+ else:
+ current_edge = []
+ if edge_preview:
+ edge_preview.hide()
+
+ # Handle Rectangle Drawing and Extrusion Logic
+ if current_mode == BuildMode.ADD:
+ if event is InputEventMouseButton:
+
+ # If clicked inside toolbar ignore
+ if toolbar and toolbar.get_global_rect().has_point(event.position):
+ return
+
+ if event.button_index == MOUSE_BUTTON_LEFT:
+ if event.pressed:
+ if not camera: return
+
+ # Extruson end
+ if is_extruding and has_started_extrusion:
+ # Create the box when clicking during extrusion
+ _create_CSGBox3D()
+ is_drawing = false
+ is_extruding = false
+ has_started_extrusion = false
+ if draw_preview:
+ draw_preview.queue_free()
+ draw_preview = null
+ return
+
+ # Start dragging the base rectangle
+ var ray_query = PhysicsRayQueryParameters3D.new()
+ ray_query.from = camera.project_ray_origin(editor_viewport.get_mouse_position())
+ ray_query.to = ray_query.from + camera.project_ray_normal(editor_viewport.get_mouse_position()) * 1000
+
+ var hit = EditorInterface.get_editor_viewport_3d(0).find_world_3d().direct_space_state.intersect_ray(ray_query)
+ if hit:
+ is_drawing = true
+ draw_normal = hit.normal
+ draw_start = _snap_to_grid(hit.position)
+ draw_end = draw_start
+ draw_plane = Plane(draw_normal, hit.position.dot(draw_normal))
+ create_rectangle_preview()
+
+ else:
+ # End dragging and start extrusion if we were drawing
+ if is_drawing and not is_extruding:
+ is_extruding = true
+ has_started_extrusion = false
+ extrude_distance = 0.0
+
+ var from = camera.project_ray_origin(editor_viewport.get_mouse_position())
+ var dir = camera.project_ray_normal(editor_viewport.get_mouse_position())
+ var intersection = draw_plane.intersects_ray(from, dir)
+
+ if intersection:
+ initial_extrude_point = _snap_to_grid(intersection)
+ extrude_line_normal = draw_normal
+ _update_rectangle_preview()
+
+ elif event is InputEventKey and event.pressed and event.keycode == KEY_ESCAPE:
+ is_drawing = false
+ is_extruding = false
+ has_started_extrusion = false
+ if draw_preview:
+ draw_preview.queue_free()
+ draw_preview = null
+
+ get_viewport().set_input_as_handled()
+
+ # Update section
+ elif event is InputEventMouseMotion:
+ if current_mode == BuildMode.ADD:
+ if not is_drawing:
+ if not camera: return
+
+ var ray_query = PhysicsRayQueryParameters3D.new()
+ ray_query.from = camera.project_ray_origin(editor_viewport.get_mouse_position())
+ ray_query.to = ray_query.from + camera.project_ray_normal(editor_viewport.get_mouse_position()) * 1000
+ ray_query.collide_with_bodies = true
+
+ var hit = EditorInterface.get_editor_viewport_3d(0).find_world_3d().direct_space_state.intersect_ray(ray_query)
+ if hit:
+ hover_point = _snap_to_grid(hit.position)
+ if not hover_preview:
+ _create_hover_preview()
+ _update_hover_preview()
+ elif hover_preview:
+ hover_preview.queue_free()
+
+ if is_drawing and not is_extruding:
+ if not camera: return
+
+ var from = camera.project_ray_origin(editor_viewport.get_mouse_position())
+ var dir = camera.project_ray_normal(editor_viewport.get_mouse_position())
+
+ var intersection = draw_plane.intersects_ray(from, dir)
+ if intersection:
+ draw_end = _snap_to_grid(intersection)
+ _calculate_base_rect_points()
+ _update_rectangle_preview()
+
+ elif is_extruding:
+ if not camera: return
+
+ var from = camera.project_ray_origin(editor_viewport.get_mouse_position())
+ var dir = camera.project_ray_normal(editor_viewport.get_mouse_position())
+
+ if not has_started_extrusion:
+ if event.relative.length() > 0.01:
+ has_started_extrusion = true
+
+ if has_started_extrusion:
+ var grid_unit = selected_grid.grid_scale
+ var e_line1 = initial_extrude_point - extrude_line_normal * 5000
+ var e_line2 = initial_extrude_point + extrude_line_normal * 5000
+ var m_line1 = from
+ var m_line2 = from + dir * 5000
+ var closest_point = Geometry3D.get_closest_points_between_segments(e_line1, e_line2, m_line1, m_line2)
+ var mouse_on_exturde_line = closest_point[0]
+ var distance_vec = mouse_on_exturde_line - initial_extrude_point
+ var distance = distance_vec.length() * distance_vec.normalized().dot(extrude_line_normal)
+
+ var new_distance = round(distance / grid_unit) * grid_unit
+ #print(new_distance)
+ if not is_equal_approx(extrude_distance, new_distance):
+ extrude_distance = new_distance
+ _update_rectangle_preview()
+
+
+# === Grid Methods ===
+# Changes the grid size based on the input from the toolbar
+func _on_grid_size_changed(size: float) -> void:
+ if selected_grid and selected_grid.grid_material:
+ selected_grid.grid_scale = size
+ selected_grid.grid_material.set_shader_parameter("grid_scale", size)
+
+ # Destroy the hover preview so it gets updated
+ if hover_preview:
+ hover_preview.queue_free()
+ hover_preview = null
+
+
+# Snaps the position to the grid size
+func _snap_to_grid(pos: Vector3) -> Vector3:
+ if not selected_grid:
+ return pos
+
+ # Get the grid size of the selected grid
+ var grid_unit = selected_grid.grid_scale
+
+ # Divide the coordinates of the given position by the grid scale, to get how far it is from the origin
+ # and round it to the nearest integer
+ return Vector3(
+ round(pos.x / grid_unit) * grid_unit,
+ round(pos.y / grid_unit) * grid_unit,
+ round(pos.z / grid_unit) * grid_unit
+ )
+
+
+func _align_grid_to_surface(normal: Vector3, hit_position: Vector3) -> void:
+ if not selected_grid:
+ return
+
+ var mesh = selected_grid.get_node_or_null("CubeGridMesh3D")
+ var collision = selected_grid.get_node_or_null("CubeGridCollisionShape3D")
+
+ var mesh_size = mesh.scale
+ var collision_size = collision.scale
+
+ if not mesh or not collision:
+ return
+
+ # Normalize the normal vector
+ normal = normal.normalized()
+
+ var up = normal
+ var right = up.cross(Vector3.FORWARD).normalized()
+ if right.length() < 0.1:
+ right = up.cross(Vector3.RIGHT).normalized()
+ var forward = right.cross(up)
+
+ # Create the Basis and Transform3D
+ var basis = Basis(right, up, forward)
+ var transform = Transform3D(basis, hit_position + up * 0.01)
+
+ # Apply the transform
+ mesh.transform = transform
+ collision.transform = transform
+
+ # Restore correct scale
+ mesh.scale = mesh_size
+ collision.scale = collision_size
+
+ # Update the material
+ selected_grid._update_material()
+
+
+func _reset_grid_transform() -> void:
+ if not selected_grid:
+ return
+
+ var mesh = selected_grid.get_node_or_null("CubeGridMesh3D")
+ var collision = selected_grid.get_node_or_null("CubeGridCollisionShape3D")
+
+ if not mesh or not collision:
+ return
+
+ # Get the current mesh and collision scale
+ var mesh_scale = mesh.scale
+ var collision_scale = collision.scale
+
+ # Reset the transform
+ mesh.transform = Transform3D()
+ collision.transform = Transform3D()
+
+ # Restore the scale
+ mesh.scale = mesh_scale
+ collision.scale = collision_scale
+
+ # Update the shader
+ selected_grid._update_material()
+
+
+# === Drawing Methods ===
+# Creates a MeshInstance3D shpere at the current hovered location when in ADD mode
+func _create_hover_preview() -> void:
+ # Clear the existing preview
+ if hover_preview:
+ hover_preview.queue_free()
+
+ # Create new hover preview
+ hover_preview = MeshInstance3D.new()
+ var sphere = SphereMesh.new()
+ var scale = selected_grid.grid_scale * BASE_PREVIEW_THICKNESS
+ sphere.radius = scale
+ sphere.height = scale * 2
+ hover_preview.mesh = sphere
+
+ # Create the material for the hover preview
+ var material = StandardMaterial3D.new()
+ material.albedo_color = Color.RED
+ material.no_depth_test = true # Always visible Renders ontop of other objects
+ hover_preview.material_override = material
+
+ # Add it to the scene
+ if csg_root:
+ csg_root.add_child(hover_preview)
+ hover_preview.position = hover_point
+ # Do not add owner
+
+
+# Changes the position of the hover preview
+func _update_hover_preview() -> void:
+ if not hover_preview:
+ return
+ hover_preview.global_position = hover_point
+
+
+func _calculate_base_rect_points() -> void:
+ if not selected_grid:
+ return
+
+ var grid_unit = selected_grid.grid_scale
+
+ # Calculate the base rectangle points
+ var min_x = floor(min(draw_start.x, draw_end.x) / grid_unit) * grid_unit
+ var max_x = ceil(max(draw_start.x, draw_end.x) / grid_unit) * grid_unit
+ var min_y = floor(min(draw_start.y, draw_end.y) / grid_unit) * grid_unit
+ var max_y = ceil(max(draw_start.y, draw_end.y) / grid_unit) * grid_unit
+ var min_z = floor(min(draw_start.z, draw_end.z) / grid_unit) * grid_unit
+ var max_z = ceil(max(draw_start.z, draw_end.z) / grid_unit) * grid_unit
+
+ if draw_normal.abs().is_equal_approx(Vector3.UP) or draw_normal.abs().is_equal_approx(Vector3.DOWN):
+ base_rect_points = [
+ Vector3(min_x, draw_start.y, min_z),
+ Vector3(max_x, draw_start.y, min_z),
+ Vector3(max_x, draw_start.y, max_z),
+ Vector3(min_x, draw_start.y, max_z)
+ ]
+ elif draw_normal.abs().is_equal_approx(Vector3.RIGHT) or draw_normal.abs().is_equal_approx(Vector3.LEFT):
+ base_rect_points = [
+ Vector3(draw_start.x, min_y, min_z),
+ Vector3(draw_start.x, max_y, min_z),
+ Vector3(draw_start.x, max_y, max_z),
+ Vector3(draw_start.x, min_y, max_z)
+ ]
+ else:
+ base_rect_points = [
+ Vector3(min_x, min_y, draw_start.z),
+ Vector3(max_x, min_y, draw_start.z),
+ Vector3(max_x, max_y, draw_start.z),
+ Vector3(min_x, max_y, draw_start.z)
+ ]
+
+
+func create_rectangle_preview() -> void:
+ # Clear the previous preview
+ if draw_preview:
+ draw_preview.queue_free()
+
+ # Create a new preview
+ draw_preview = MeshInstance3D.new()
+ var immediate_mesh = ImmediateMesh.new()
+ draw_preview.mesh = immediate_mesh
+
+ var material = StandardMaterial3D.new()
+ material.albedo_color = Color.RED
+ material.cull_mode = BaseMaterial3D.CULL_DISABLED
+ material.no_depth_test = true
+ draw_preview.material_override = material
+
+ if csg_root:
+ csg_root.add_child(draw_preview)
+ draw_preview.owner = EditorInterface.get_edited_scene_root()
+
+
+func _update_rectangle_preview() -> void:
+ if not draw_preview: return
+ var immediate_mesh = draw_preview.mesh as ImmediateMesh
+ immediate_mesh.clear_surfaces()
+
+ var base_thickness = BASE_PREVIEW_THICKNESS * selected_grid.grid_scale
+ var thickness = base_thickness
+ var grid_unit = selected_grid.grid_scale
+ var material = draw_preview.material_override as StandardMaterial3D
+
+ if is_extruding:
+ material.albedo_color = Color.GREEN if extrude_distance >= 0 else Color.RED
+ var preview_offset = draw_normal * (grid_unit * 0.000001)
+ immediate_mesh.surface_begin(Mesh.PRIMITIVE_TRIANGLES)
+
+ var preview_points = []
+ for point in base_rect_points:
+ preview_points.append(point + preview_offset)
+
+ # Rectangle base lines
+ for i in range(preview_points.size()):
+ add_thick_line(
+ immediate_mesh,
+ preview_points[i],
+ preview_points[(i + 1) % preview_points.size()],
+ thickness
+ )
+ # Extrusion lines
+ if is_extruding:
+ add_thick_line(immediate_mesh,
+ initial_extrude_point + preview_offset,
+ initial_extrude_point + draw_normal * (extrude_distance + preview_offset.length()),
+ thickness * 0.5)
+
+ if has_started_extrusion:
+ var extrude_offset = draw_normal * extrude_distance
+
+ for i in range(preview_points.size()):
+ var extruded_point = preview_points[i] + extrude_offset
+ add_thick_line(immediate_mesh,
+ preview_points[i],
+ extruded_point,
+ thickness)
+ add_thick_line(
+ immediate_mesh,
+ extruded_point,
+ preview_points[(i + 1) % preview_points.size()] + extrude_offset,
+ thickness
+ )
+
+ immediate_mesh.surface_end()
+
+
+func add_thick_line(immediate_mesh: ImmediateMesh, start: Vector3, end: Vector3, thickness: float) -> void:
+ var direction = (end - start).normalized()
+
+ # Find a perpendicular vector to the line
+ var perpendicular = Vector3.UP.cross(direction).normalized()
+ if perpendicular.length() < 0.1:
+ perpendicular = Vector3.RIGHT.cross(direction).normalized()
+
+ # Calculate the four corners of the line
+ var offset = perpendicular * thickness
+ var v1 = start + offset
+ var v2 = start - offset
+ var v3 = end + offset
+ var v4 = end - offset
+
+ # Add the two faces to the line
+ create_rectangle(immediate_mesh, v1, v2, v3, v4)
+
+
+# Creates a rectangle using the given vertecies out of two triangles
+func create_rectangle(immediate_mesh: ImmediateMesh, v1: Vector3, v2: Vector3, v3: Vector3, v4: Vector3) -> void:
+ # Add two triangles to form a rectangle
+ immediate_mesh.surface_add_vertex(v1)
+ immediate_mesh.surface_add_vertex(v2)
+ immediate_mesh.surface_add_vertex(v3)
+
+ immediate_mesh.surface_add_vertex(v2)
+ immediate_mesh.surface_add_vertex(v4)
+ immediate_mesh.surface_add_vertex(v3)
+
+
+# === CSG Management Methods ===
+func _create_CSGBox3D() -> void:
+ var new_box = CSGBox3D.new()
+ new_box.use_collision = true
+ new_box.set_meta("_edit_lock_", true)
+ new_box.set_meta("_edit_group_", true)
+
+
+ var min_point = base_rect_points[0]
+ var max_point = base_rect_points[0]
+
+ # Minimum and maximum points of the base rectangle
+ for point in base_rect_points:
+ min_point = Vector3(
+ min(min_point.x, point.x),
+ min(min_point.y, point.y),
+ min(min_point.z, point.z)
+ )
+ max_point = Vector3(
+ max(max_point.x, point.x),
+ max(max_point.y, point.y),
+ max(max_point.z, point.z)
+ )
+
+ # Initial size and center of the box
+ var size = (max_point - min_point)
+ var center = (max_point + min_point) * 0.5
+
+ # Adjust size and center based on the extrusion
+ if draw_normal.abs().is_equal_approx(Vector3.UP) or draw_normal.abs().is_equal_approx(Vector3.DOWN):
+ size.y = abs(extrude_distance)
+ center += draw_normal * (extrude_distance * 0.5)
+ elif draw_normal.abs().is_equal_approx(Vector3.RIGHT) or draw_normal.abs().is_equal_approx(Vector3.LEFT):
+ size.x = abs(extrude_distance)
+ center += draw_normal * (extrude_distance * 0.5)
+ else:
+ size.z = abs(extrude_distance)
+ center += draw_normal * (extrude_distance * 0.5)
+
+ if size.x < 0.0001 or size.y < 0.0001 or size.z < 0.0001:
+ return
+
+ new_box.size = size
+ new_box.position = center
+
+ # Depending on the extrusion distance set the operation
+ if extrude_distance < 0:
+ new_box.operation = CSGShape3D.OPERATION_SUBTRACTION
+
+ undo_redo.create_action("Create CSGBox3D")
+ undo_redo.add_do_method(csg_root, "add_child", new_box)
+ undo_redo.add_do_method(new_box, "set_owner", EditorInterface.get_edited_scene_root())
+ undo_redo.add_undo_method(csg_root, "remove_child", new_box)
+ undo_redo.commit_action()
+ _update_toolbar_states()
+
+
+func _on_merge_mesh() -> void:
+ if not csg_root or csg_root.get_child_count() == 0:
+ return
+ # Dont allow to merge an already merged mesh
+ if csg_root.has_node("CSGMesh"):
+ push_warning("Already merged!")
+ return
+
+ if edge_preview:
+ edge_preview.queue_free()
+ edge_preview = null
+
+ current_edge = []
+ is_dragging_edge = false
+
+ var nodes_to_keep = []
+ # Go over all of the children of the csg root and check if they are CSGBox3D or CSGMesh3D
+ for node in csg_root.get_children():
+ if node is MeshInstance3D:
+ continue
+
+ # For subtraction operations, check if it actually cuts something
+ if node.operation == CSGShape3D.OPERATION_SUBTRACTION:
+ var cuts_something = false
+ for other_node in csg_root.get_children():
+ if other_node.operation == CSGShape3D.OPERATION_UNION:
+ if node is CSGBox3D and other_node is CSGBox3D:
+ var node_bounds = AABB(
+ node.position - (node.size * 0.5),
+ node.size
+ )
+ var other_bounds = AABB(
+ other_node.position - (other_node.size * 0.5),
+ other_node.size
+ )
+ # Check if the bounding boxes intersect if does keep it
+ if node_bounds.intersects(other_bounds):
+ cuts_something = true
+ break
+ else:
+ cuts_something = false
+ break
+ # Only keep if it actually cuts something
+ if cuts_something:
+ nodes_to_keep.append(node)
+ else:
+ nodes_to_keep.append(node)
+
+ var nodes_data = []
+ for node in nodes_to_keep:
+ nodes_data.append(_store_mesh_data(node))
+
+ var meshes = csg_root.get_meshes()
+ if meshes.size() > 1:
+ if not csg_mesh:
+ csg_mesh = MeshInstance3D.new()
+ csg_mesh.name = "CSGMesh"
+ csg_root.add_child(csg_mesh)
+ csg_mesh.owner = EditorInterface.get_edited_scene_root()
+
+ csg_mesh.mesh = meshes[1]
+ csg_mesh.set_meta("csg_data", {
+ "nodes": nodes_data
+ })
+
+ for child in csg_root.get_children():
+ if child != csg_mesh:
+ child.queue_free()
+
+ _update_toolbar_states()
+ _change_mode(BuildMode.DISABLE)
+
+
+func _on_edit_mesh() -> void:
+ if not csg_root:
+ push_warning("No Mesh root found!")
+ return
+
+ if not csg_root.has_node("CSGMesh"):
+ push_warning("No CSGMesh to edit!")
+ return
+
+ csg_mesh = csg_root.get_node("CSGMesh")
+ var data = csg_mesh.get_meta("csg_data")
+ if not data:
+ push_warning("No CSG data found in mesh!")
+ return
+ # Deconstruct the mesh into CSGBox3D or CSGMesh3D
+ _convert_to_boxes()
+
+# Stores the information about the CSGBox3D or CSGMesh3D
+func _store_mesh_data(node: Node) -> Dictionary:
+ # Create a dictionary to store information
+ var data = {
+ "position": node.position,
+ "operation": node.operation,
+ "use_collision": node.use_collision,
+ "type": "box" if node is CSGBox3D else "mesh"
+ }
+ # Store the size of the CSGBox3D or the vertices and indices of the CSGMesh3D
+ if node is CSGBox3D:
+ data["size"] = node.size
+ # Store vertices and indices of the CSGMesh3D
+ elif node is CSGMesh3D:
+ var mesh = node.mesh as ArrayMesh
+ if mesh:
+ data["vertices"] = mesh.surface_get_arrays(0)[Mesh.ARRAY_VERTEX]
+ data["indices"] = mesh.surface_get_arrays(0)[Mesh.ARRAY_INDEX]
+
+ return data
+
+
+# Recreates the CSGBox3D or CSGMesh3D from the stored metadata
+func _convert_to_boxes() -> void:
+
+ csg_mesh = csg_root.get_node("CSGMesh")
+ if not csg_mesh:
+ push_warning("No CSGMesh node found!")
+ return
+ var data = csg_mesh.get_meta("csg_data")
+ if not data:
+ push_warning("No CSG data found in mesh!")
+ return
+
+ # Go through all of the nodes and recreate them
+ for node_info in data["nodes"]:
+ var new_node
+
+ # Based on the type, recreate CSGBox3D or CSGMesh3D
+ if node_info["type"] == "box":
+ new_node = CSGBox3D.new() # Create a new CSGBox3D
+ new_node.size = node_info["size"] # Set the size of the box by getting the size from the metadata
+ else:
+ new_node = CSGMesh3D.new() # Create a new CSGMesh3D
+ var arr_mesh = ArrayMesh.new() # Create a new ArrayMesh
+ var arrays = []
+ arrays.resize(Mesh.ARRAY_MAX)
+
+ arrays[Mesh.ARRAY_VERTEX] = node_info["vertices"]
+ arrays[Mesh.ARRAY_INDEX] = node_info["indices"]
+ arr_mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, arrays) # Add the surface to the ArrayMesh
+ new_node.mesh = arr_mesh
+
+ new_node.position = node_info["position"] # Set the position
+ new_node.operation = node_info["operation"]
+ new_node.use_collision = node_info["use_collision"]
+
+ new_node.set_meta("_edit_lock_", true)
+ new_node.set_meta("_edit_group_", true)
+
+ csg_root.add_child(new_node)
+ new_node.owner = EditorInterface.get_edited_scene_root()
+
+ # Remove the CSGMesh
+ csg_mesh.queue_free()
+ csg_mesh = null
+
+ toolbar.update_button_states(false)
+ _change_mode(BuildMode.DISABLE)
+
+
+# === UI Management Methods ===
+func _connect_toolbar_signals() -> void:
+ toolbar.select_button_pressed.connect(func(): _change_mode(BuildMode.SELECT))
+ toolbar.add_button_pressed.connect(func(): _change_mode(BuildMode.ADD))
+ toolbar.disable_button_pressed.connect(func(): _change_mode(BuildMode.DISABLE))
+ toolbar.grid_size_changed.connect(_on_grid_size_changed)
+ toolbar.reset_grid_pressed.connect(_reset_grid_transform)
+ toolbar.merge_mesh.connect(_on_merge_mesh)
+ toolbar.edit_mesh.connect(_on_edit_mesh)
+
+
+func _update_toolbar_states() -> void:
+ if not csg_root:
+ return
+
+ var has_csg_mesh = csg_root.has_node("CSGMesh")
+ var has_csg_boxes = false
+
+ for child in csg_root.get_children():
+ if child is CSGBox3D or child is CSGMesh3D:
+ has_csg_boxes = true
+ break
+
+ if has_csg_mesh:
+ toolbar.update_button_states(true)
+ else:
+ toolbar.update_button_states(false)
+
+ toolbar.set_merge_button_enabled(has_csg_boxes)
+ toolbar.set_select_button_enabled(has_csg_boxes)
+ toolbar.set_edit_button_enabled(has_csg_mesh)
+
+
+func _on_selection_changed() -> void:
+ var selected = EditorInterface.get_selection().get_selected_nodes()
+ if selected.size() == 1 and selected[0] is CubeGrid3D:
+ selected_grid = selected[0]
+ csg_root = selected_grid.get_node("CSGCombiner3D")
+ toolbar.show()
+ toolbar.connect_to_grid(selected_grid)
+ _update_toolbar_states()
+
+ var root := EditorInterface.get_base_control()
+ var toolbar = root.find_children("", "Node3DEditor", true, false)[0].get_child(0).find_children("", "HBoxContainer", true, false)[0]
+ var btn = toolbar.get_child(2)
+ btn.pressed.emit()
+ if hover_preview:
+ hover_preview.queue_free()
+ hover_preview = null
+ else:
+ _change_mode(BuildMode.DISABLE)
+ if hover_preview:
+ hover_preview.queue_free()
+ hover_preview = null
+ selected_grid = null
+ csg_root = null
+ toolbar.hide()
+
+
+func _change_mode(new_mode: BuildMode) -> void:
+ if new_mode == BuildMode.ADD and csg_root and csg_root.has_node("CSGMesh"):
+ push_warning("Can't switch to ADD mode while CSGMesh exists. Use Edit to modify.")
+ toolbar.set_active_mode(current_mode)
+ return
+
+ current_mode = new_mode
+ toolbar.set_active_mode(current_mode)
+
+ if edge_preview:
+ edge_preview.queue_free()
+ edge_preview = null
+ current_edge = []
+ is_dragging_edge = false
+
+ if csg_root:
+ csg_root.set_meta("_edit_lock_", current_mode != BuildMode.SELECT)
+
+
+# === Edge Movement Methods ===
+func _get_edges(node: Node) -> Array:
+ var edges = []
+
+ if node is CSGBox3D:
+ var aabb = AABB(
+ node.global_position - (node.size * 0.5),
+ node.size
+ )
+ # Corners of the CSGBox3D
+ var corners = [
+ Vector3(aabb.position.x, aabb.position.y, aabb.position.z),
+ Vector3(aabb.end.x, aabb.position.y, aabb.position.z),
+ Vector3(aabb.end.x, aabb.end.y, aabb.position.z),
+ Vector3(aabb.position.x, aabb.end.y, aabb.position.z),
+ Vector3(aabb.position.x, aabb.position.y, aabb.end.z),
+ Vector3(aabb.end.x, aabb.position.y, aabb.end.z),
+ Vector3(aabb.end.x, aabb.end.y, aabb.end.z),
+ Vector3(aabb.position.x, aabb.end.y, aabb.end.z)
+ ]
+ # Edges of the CSGBox3D
+ var edge_indices = [
+ [0, 1], [1, 2], [2, 3], [3, 0],
+ [4, 5], [5, 6], [6, 7], [7, 4],
+ [0, 4], [1, 5], [2, 6], [3, 7]
+ ]
+ # Create edges by taking pairs of corners
+ for pair in edge_indices:
+ edges.append([corners[pair[0]], corners[pair[1]]])
+ # CSGMesh3D get edges by getting the verticies and indicies
+ elif node is CSGMesh3D:
+ var arr_mesh = node.mesh as ArrayMesh
+ if not arr_mesh:
+ return edges
+
+ # Arraymesh
+ var arrays = arr_mesh.surface_get_arrays(0)
+ # Get the vertices and indices
+ var vertices = arrays[Mesh.ARRAY_VERTEX] as PackedVector3Array
+ var indices = arrays[Mesh.ARRAY_INDEX] as PackedInt32Array
+ # Create a set to store edges
+ var edge_set = {}
+
+ # Go through the indicies and create an edgemap
+ for i in range(0, indices.size(), 3):
+ var tri_indices = [
+ indices[i],
+ indices[i + 1],
+ indices[i + 2]
+ ]
+
+ for j in range(3):
+ var idx1 = tri_indices[j]
+ var idx2 = tri_indices[(j + 1) % 3] # Get the next 2 indicies
+
+ var edge_key = str(min(idx1, idx2)) + "_" + str(max(idx1, idx2))
+ if not edge_set.has(edge_key):
+ edge_set[edge_key] = true
+ var vert1 = node.global_transform * vertices[idx1]
+ var vert2 = node.global_transform * vertices[idx2]
+ edges.append([vert1, vert2])
+
+ return edges
+
+
+# Finds the closest edge to the mouse
+func _find_closest_edge(node: Node, mouse_pos: Vector2) -> Array:
+ if not camera:
+ return []
+
+ # Get all of the edges
+ var edges = _get_edges(node)
+ # Intialize closest edge
+ var closest_edge = []
+ # Set the distance to infinity
+ var min_distance = INF
+
+ # Cast ray from the camera to the mouse position
+ var from = camera.project_ray_origin(mouse_pos)
+ var dir = camera.project_ray_normal(mouse_pos)
+ var m_line1 = from
+ var m_line2 = from + dir * 5000
+
+ # Go over all of the edges
+ for edge in edges:
+ # Take the two first endpoints of the edge
+ var e_line1 = edge[0]
+ var e_line2 = edge[1]
+
+ # Get the closest points between the edge and the ray
+ var closest_points = Geometry3D.get_closest_points_between_segments(e_line1, e_line2, m_line1, m_line2)
+ # Return the closest edge
+ var point_on_edge = closest_points[0]
+ var point_on_ray = closest_points[1]
+
+ # Calculate the distance between the two points
+ var distance_vec = point_on_ray - point_on_edge
+ var distance = distance_vec.length()
+
+ # If the distance is smaller than the current minimum, update the closest edge
+ if distance < min_distance:
+ min_distance = distance
+ closest_edge = edge
+
+ return closest_edge
+
+
+# Method that draws a line on the currently hovered edge
+func _create_edge_preview(edge: Array) -> void:
+
+ if edge.is_empty():
+ if edge_preview:
+ edge_preview.hide()
+ return
+
+ # Create the edge preview material
+ if not edge_preview:
+ edge_preview = MeshInstance3D.new()
+ var immediate_mesh = ImmediateMesh.new()
+ edge_preview.mesh = immediate_mesh
+
+ var material = StandardMaterial3D.new()
+ material.albedo_color = Color.RED
+ material.cull_mode = BaseMaterial3D.CULL_DISABLED
+ material.no_depth_test = true
+ edge_preview.material_override = material
+
+ if csg_root:
+ csg_root.add_child(edge_preview)
+
+ edge_preview.show()
+ var immediate_mesh = edge_preview.mesh as ImmediateMesh
+ immediate_mesh.clear_surfaces()
+
+ immediate_mesh.surface_begin(Mesh.PRIMITIVE_TRIANGLES)
+ var thickness = selected_grid.grid_scale * BASE_PREVIEW_THICKNESS # Scale the thickness based on grid size
+ add_thick_line(immediate_mesh, edge[0], edge[1], thickness) # Use the add_thick_line methdod to create the line
+ immediate_mesh.surface_end()
+
+
+func _convert_box_to_CSGMesh(box: CSGBox3D) -> CSGMesh3D:
+ var csg_mesh = CSGMesh3D.new()
+ var arr_mesh = ArrayMesh.new()
+ var vertices = PackedVector3Array()
+ var indices = PackedInt32Array()
+ var half_size = box.size * 0.5
+
+ var local_verts = [
+ Vector3(-half_size.x, -half_size.y, -half_size.z), # 0
+ Vector3(half_size.x, -half_size.y, -half_size.z), # 1
+ Vector3(half_size.x, half_size.y, -half_size.z), # 2
+ Vector3(-half_size.x, half_size.y, -half_size.z), # 3
+ Vector3(-half_size.x, -half_size.y, half_size.z), # 4
+ Vector3(half_size.x, -half_size.y, half_size.z), # 5
+ Vector3(half_size.x, half_size.y, half_size.z), # 6
+ Vector3(-half_size.x, half_size.y, half_size.z) # 7
+ ]
+
+ vertices.append_array(local_verts)
+
+ var faces = [
+ [0, 1, 2, 2, 3, 0], # Front
+ [1, 5, 6, 6, 2, 1], # Right
+ [5, 4, 7, 7, 6, 5], # Back
+ [4, 0, 3, 3, 7, 4], # Left
+ [3, 2, 6, 6, 7, 3], # Top
+ [4, 5, 1, 1, 0, 4] # Bottom
+ ]
+
+ for face in faces:
+ indices.append_array(face)
+
+ var arrays = []
+ arrays.resize(Mesh.ARRAY_MAX)
+ arrays[Mesh.ARRAY_VERTEX] = vertices
+ arrays[Mesh.ARRAY_INDEX] = indices
+
+ arr_mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, arrays)
+
+ csg_mesh.mesh = arr_mesh
+ csg_mesh.transform = box.transform
+ csg_mesh.operation = box.operation
+ csg_mesh.use_collision = box.use_collision
+
+ csg_root.add_child(csg_mesh)
+ csg_mesh.owner = EditorInterface.get_edited_scene_root()
+
+ box.queue_free()
+
+ return csg_mesh
diff --git a/source/addons/boxconstructor/boxconstructor.gd.uid b/source/addons/boxconstructor/boxconstructor.gd.uid
new file mode 100644
index 0000000..4b990d3
--- /dev/null
+++ b/source/addons/boxconstructor/boxconstructor.gd.uid
@@ -0,0 +1 @@
+uid://qnfnr8wrpdsl
diff --git a/source/addons/boxconstructor/plugin.cfg b/source/addons/boxconstructor/plugin.cfg
new file mode 100644
index 0000000..3b60acf
--- /dev/null
+++ b/source/addons/boxconstructor/plugin.cfg
@@ -0,0 +1,7 @@
+[plugin]
+
+name="BoxConstructor"
+description="Easy-to-use grayboxing tool designed for rapid prototyping in Godot"
+author="Hannogert Otti"
+version="1.0.0"
+script="boxconstructor.gd"
diff --git a/source/addons/boxconstructor/scripts/cube_grid.gd b/source/addons/boxconstructor/scripts/cube_grid.gd
new file mode 100644
index 0000000..bf32181
--- /dev/null
+++ b/source/addons/boxconstructor/scripts/cube_grid.gd
@@ -0,0 +1,73 @@
+@tool
+extends StaticBody3D
+class_name CubeGrid3D
+var grid_scale: float = 1:
+ set(value):
+ grid_scale = value
+ _update_material()
+ emit_signal("grid_created", grid_scale)
+
+
+var mesh_instance: MeshInstance3D
+var grid_material: ShaderMaterial
+var csg_root: CSGCombiner3D
+signal grid_created(scale: float)
+
+func _enter_tree() -> void:
+ if Engine.is_editor_hint():
+ set_meta("_edit_lock_", true)
+
+ # Check if the CubeGridMesh3D already exists
+ mesh_instance = get_node_or_null("CubeGridMesh3D")
+ if not mesh_instance:
+ mesh_instance = MeshInstance3D.new()
+ mesh_instance.name = "CubeGridMesh3D"
+ mesh_instance.set_meta("_edit_lock_", true)
+ var plane_mesh = PlaneMesh.new()
+ plane_mesh.size = Vector2(1, 1)
+ mesh_instance.mesh = plane_mesh
+ mesh_instance.scale = Vector3(4000, 0.001, 4000)
+ add_child(mesh_instance)
+ if Engine.is_editor_hint():
+ mesh_instance.owner = null
+
+ # Check if the CSGCombiner3D already exists
+ csg_root = self.get_node_or_null("CSGCombiner3D")
+ if not csg_root:
+ csg_root = CSGCombiner3D.new()
+ csg_root.name = "CSGCombiner3D"
+ csg_root.use_collision = true
+ add_child(csg_root)
+ if Engine.is_editor_hint():
+ csg_root.owner = get_tree().edited_scene_root
+
+ # Check if the CubeGridCollisionShape3D already exists
+ var collision_shape = get_node_or_null("CubeGridCollisionShape3D")
+ if not collision_shape:
+ collision_shape = CollisionShape3D.new()
+ var box_shape = BoxShape3D.new()
+ box_shape.size = Vector3(4000, 0.001, 4000)
+ collision_shape.shape = box_shape
+ collision_shape.name = "CubeGridCollisionShape3D"
+ add_child(collision_shape)
+ if Engine.is_editor_hint():
+ collision_shape.owner = null
+
+ _setup_shader()
+ emit_signal("grid_created", grid_scale)
+
+func _setup_shader() -> void:
+ if not mesh_instance:
+ mesh_instance = get_node_or_null("CubeGridMesh3D")
+ if not mesh_instance:
+ push_error("Grid mesh instance not found!")
+ return
+
+ if not grid_material:
+ var base_material = preload("res://addons/boxconstructor/textures/cube_grid.tres")
+ grid_material = base_material.duplicate()
+ mesh_instance.material_override = grid_material
+ grid_material.set_shader_parameter("grid_scale", grid_scale)
+
+func _update_material() -> void:
+ grid_material.set_shader_parameter("grid_scale", grid_scale)
diff --git a/source/addons/boxconstructor/scripts/cube_grid.gd.uid b/source/addons/boxconstructor/scripts/cube_grid.gd.uid
new file mode 100644
index 0000000..7dcc211
--- /dev/null
+++ b/source/addons/boxconstructor/scripts/cube_grid.gd.uid
@@ -0,0 +1 @@
+uid://bgxvcscuumfyq
diff --git a/source/addons/boxconstructor/scripts/toolbar.gd b/source/addons/boxconstructor/scripts/toolbar.gd
new file mode 100644
index 0000000..7be8d3b
--- /dev/null
+++ b/source/addons/boxconstructor/scripts/toolbar.gd
@@ -0,0 +1,275 @@
+@tool
+extends PanelContainer
+
+signal disable_button_pressed
+signal select_button_pressed
+signal add_button_pressed
+signal remove_button_pressed
+signal edit_mesh
+signal grid_size_changed(size: float)
+signal reset_grid_pressed
+signal merge_mesh
+
+var disable_button: Button
+var merge_button: Button
+var edit_button: Button
+var tooltip_button: Button
+var plugin: EditorPlugin
+var toolbar_buttons: HBoxContainer
+var select_button: Button
+var add_button: Button
+var active_button_stylebox: StyleBoxFlat
+var grid_sizes = [0.01, 0.1, 0.25, 0.5, 0.75, 1, 2, 5, 10]
+
+func _init(p_plugin: EditorPlugin) -> void:
+ plugin = p_plugin
+
+func _ready() -> void:
+ _configure_style()
+ _create_containers()
+ _create_active_button_style()
+ _create_all_buttons()
+
+func _create_all_buttons() -> void:
+ disable_button = _create_mode_button("Disable", "GuiClose", "_on_disable_pressed")
+ select_button = _create_mode_button("Select Edge", "ToolSelect", "_on_select_button_pressed")
+ add_button = _create_mode_button("Add Primitive", "Add", "_on_add_button_pressed")
+ _create_button("Reset Grid", "Reload", "_on_reset_button_pressed")
+ _create_grid_size_selector()
+ merge_button = _create_button("Merge Mesh", "BoxMesh", "_on_merge_mesh_pressed")
+ edit_button = _create_button("Edit Mesh", "Edit", "_on_edit_pressed")
+ tooltip_button = _create_button("", "Help", "pass")
+
+func _configure_style() -> void:
+ var stylebox = StyleBoxFlat.new()
+ stylebox.bg_color = Color(0.211, 0.239, 0.290)
+ stylebox.set_corner_radius_all(20)
+ add_theme_stylebox_override("panel", stylebox)
+
+ add_theme_constant_override("margin_left", 20)
+ add_theme_constant_override("margin_right", 20)
+ add_theme_constant_override("margin_top", 10)
+ add_theme_constant_override("margin_bottom", 10)
+
+func _create_containers() -> void:
+ var margin_container = MarginContainer.new()
+ margin_container.add_theme_constant_override("margin_left", 6)
+ margin_container.add_theme_constant_override("margin_right", 6)
+ margin_container.add_theme_constant_override("margin_top", 6)
+ margin_container.add_theme_constant_override("margin_bottom", 6)
+ add_child(margin_container)
+
+ toolbar_buttons = HBoxContainer.new()
+ toolbar_buttons.alignment = BoxContainer.ALIGNMENT_CENTER
+ toolbar_buttons.add_theme_constant_override("separation", 8)
+ margin_container.add_child(toolbar_buttons)
+
+func _create_active_button_style() -> void:
+ active_button_stylebox = _create_button_stylebox()
+ active_button_stylebox.bg_color = Color(0.3, 0.5, 0.7)
+ active_button_stylebox.border_color = Color.WHITE
+
+func _create_buttons() -> void:
+ disable_button = _create_mode_button("Disable", "GuiVisibilityHidden", "_on_disable_pressed")
+ select_button = _create_mode_button("Select Edge", "ToolSelect", "_on_select_button_pressed")
+ add_button = _create_mode_button("Add Primitive", "Add", "_on_add_button_pressed")
+ _create_button("Reset Grid", "Reload", "_on_reset_button_pressed")
+
+func set_edit_button_enabled(enabled: bool) -> void:
+ if edit_button:
+ edit_button.disabled = not enabled
+
+func set_merge_button_enabled(enabled: bool) -> void:
+ if merge_button:
+ merge_button.disabled = not enabled
+
+func set_select_button_enabled(enabled: bool) -> void:
+ if select_button:
+ select_button.disabled = not enabled
+
+func update_button_states(is_merged: bool) -> void:
+
+ if select_button:
+ select_button.visible = !is_merged
+ if add_button:
+ add_button.visible = !is_merged
+ if merge_button:
+ merge_button.visible = !is_merged
+ if edit_button:
+ edit_button.visible = is_merged
+
+ if add_button:
+ add_button.queue_redraw()
+ if merge_button:
+ merge_button.queue_redraw()
+ if edit_button:
+ edit_button.queue_redraw()
+
+ toolbar_buttons.custom_minimum_size = Vector2.ZERO
+ toolbar_buttons.reset_size()
+ custom_minimum_size = Vector2.ZERO
+ reset_size()
+
+ var viewport_base = get_parent()
+ if viewport_base:
+ position.x = (viewport_base.size.x - size.x) * 0.5
+
+func _create_mode_button(text: String, icon_name: String, callback: String) -> Button:
+ var button = Button.new()
+ button.text = text
+ button.toggle_mode = true
+ button.icon = plugin.get_editor_interface().get_base_control().get_theme_icon(icon_name, "EditorIcons")
+ button.connect("pressed", Callable(self, callback))
+
+ var normal_style = _create_button_stylebox()
+ var hover_style = _create_button_stylebox(true)
+
+ button.tooltip_text = _get_tooltip_text(button.text)
+ button.add_theme_stylebox_override("normal", normal_style)
+ button.add_theme_stylebox_override("hover", hover_style)
+ button.add_theme_stylebox_override("pressed", active_button_stylebox)
+ button.add_theme_stylebox_override("disabled", normal_style)
+ button.add_theme_stylebox_override("focus", normal_style)
+
+ toolbar_buttons.add_child(button)
+ return button
+
+func _create_button(text: String, icon_name: String, callback: String) -> Button:
+ var button = Button.new()
+ button.text = text
+ button.icon = plugin.get_editor_interface().get_base_control().get_theme_icon(icon_name, "EditorIcons")
+ button.connect("pressed", Callable(self, callback))
+
+ var normal_style = _create_button_stylebox()
+ var hover_style = _create_button_stylebox(true)
+
+ button.tooltip_text = _get_tooltip_text(button.text)
+ button.add_theme_stylebox_override("normal", normal_style)
+ button.add_theme_stylebox_override("hover", hover_style)
+ button.add_theme_stylebox_override("pressed", hover_style)
+ button.add_theme_stylebox_override("disabled", normal_style)
+ button.add_theme_stylebox_override("focus", normal_style)
+
+ toolbar_buttons.add_child(button)
+ return button
+
+func _create_button_stylebox(is_hover: bool = false) -> StyleBoxFlat:
+ var stylebox = StyleBoxFlat.new()
+ stylebox.bg_color = Color(0.15, 0.17, 0.20) if not is_hover else Color(0.25, 0.27, 0.30)
+ stylebox.set_corner_radius_all(20)
+
+ stylebox.content_margin_left = 8
+ stylebox.content_margin_right = 8
+ stylebox.content_margin_top = 4
+ stylebox.content_margin_bottom = 4
+
+ stylebox.border_width_bottom = 0
+ stylebox.border_width_left = 0
+ stylebox.border_width_right = 0
+ stylebox.border_width_top = 0
+
+ return stylebox
+
+func _create_grid_size_selector() -> void:
+ var grid_size_button = OptionButton.new()
+ grid_size_button.name = "Grid Size"
+
+ grid_size_button.add_item("0.01", 0)
+ grid_size_button.add_item("0.1", 1)
+ grid_size_button.add_item("0.25", 2)
+ grid_size_button.add_item("0.5", 3)
+ grid_size_button.add_item("0.75", 4)
+ grid_size_button.add_item("1", 5)
+ grid_size_button.add_item("2", 6)
+ grid_size_button.add_item("5", 7)
+ grid_size_button.add_item("10", 8)
+
+ grid_size_button.select(5)
+
+ grid_size_button.connect("item_selected", Callable(self, "_on_grid_size_selected"))
+ grid_size_button.add_theme_stylebox_override("normal", _create_button_stylebox())
+ grid_size_button.add_theme_stylebox_override("hover", _create_button_stylebox(true))
+
+ toolbar_buttons.add_child(grid_size_button)
+
+func set_active_mode(mode: int) -> void:
+ disable_button.button_pressed = (mode == 0) # DISABLE mode
+ select_button.button_pressed = (mode == 1) # SELECT mode
+ add_button.button_pressed = (mode == 2) # ADD mode
+
+func connect_to_grid(grid: CubeGrid3D) -> void:
+ var grid_size_button = toolbar_buttons.get_node("Grid Size") as OptionButton
+ if not grid_size_button:
+ return
+
+ var grid_sizes = [0.01, 0.1, 0.25, 0.5, 0.75, 1, 2, 5, 10]
+ var index = grid_sizes.find(grid.grid_scale)
+ if index != -1:
+ grid_size_button.select(index)
+
+func _on_grid_created(initial_scale: float) -> void:
+ var grid_size_button = toolbar_buttons.get_node("Grid Size") as OptionButton
+ if not grid_size_button:
+ return
+
+ var index = grid_sizes.find(initial_scale)
+ if index != -1:
+ grid_size_button.select(index)
+
+func _on_disable_pressed() -> void:
+ emit_signal("disable_button_pressed")
+
+func _on_select_button_pressed() -> void:
+ emit_signal("select_button_pressed")
+
+func _on_add_button_pressed() -> void:
+ emit_signal("add_button_pressed")
+
+func _on_remove_button_pressed() -> void:
+ emit_signal("remove_button_pressed")
+
+func _on_grid_size_selected(index: int) -> void:
+ var selected_size = grid_sizes[index]
+ emit_signal("grid_size_changed", selected_size)
+
+func _on_reset_button_pressed() -> void:
+ emit_signal("reset_grid_pressed")
+
+func _on_merge_mesh_pressed() -> void:
+ emit_signal("merge_mesh")
+
+func _on_edit_pressed() -> void:
+ update_button_states(false)
+ emit_signal("edit_mesh")
+
+func _get_tooltip_text(button_name: String) -> String:
+ match button_name:
+ "Disable":
+ return "Disable\n Disables mouse input for Constructor."
+ "Select Edge":
+ return "Select Edge\n Allows you to select an edge to move it."
+ "Add Primitive":
+ return "Add Primitive\n Allows you to add or remove a box by drawing a rectangle and extruding it."
+ "Reset Grid":
+ return "Reset\n Resets the grid to its original state."
+ "Grid Size":
+ return "Grid Size\n Sets the size of the grid."
+ "Merge Mesh":
+ return "Merge Mesh\n Merges all the cubes into a single MeshInstance3D."
+ "Edit Mesh":
+ return "Edit Mesh\n Breaks the mesh into its original cubes."
+ "":
+ return """Box Constructor Help:
+
+ Keyboard Shortcuts:
+ - Press X to move the drawing plane.
+ - Press Z key to reset the drawing plane.
+ - Middle mouse will cancel the current operation for extrudsion and drawing.
+
+ Tips:
+ - You can use the edge select to move edges, but only use them to create ramps
+ (Creating other shapes may result in CSG operations not working correctly).
+ - The drawing does not work on slanted surfaces, only flat surfaces.
+ """
+ _:
+ return ""
diff --git a/source/addons/boxconstructor/scripts/toolbar.gd.uid b/source/addons/boxconstructor/scripts/toolbar.gd.uid
new file mode 100644
index 0000000..016ba37
--- /dev/null
+++ b/source/addons/boxconstructor/scripts/toolbar.gd.uid
@@ -0,0 +1 @@
+uid://coo1do7f6lmce
diff --git a/source/addons/boxconstructor/textures/cube_grid.tres b/source/addons/boxconstructor/textures/cube_grid.tres
new file mode 100644
index 0000000..3b87ddc
--- /dev/null
+++ b/source/addons/boxconstructor/textures/cube_grid.tres
@@ -0,0 +1,9 @@
+[gd_resource type="ShaderMaterial" load_steps=2 format=3 uid="uid://iwvr14kdcfog"]
+
+[ext_resource type="Shader" uid="uid://qnh11q0505w1" path="res://addons/qb2/textures/grid_shader.gdshader" id="1_uxs6n"]
+
+[resource]
+render_priority = 0
+shader = ExtResource("1_uxs6n")
+shader_parameter/grid_scale = 5.0
+shader_parameter/camera_distance = 0.0
diff --git a/source/addons/boxconstructor/textures/grid_shader.gdshader b/source/addons/boxconstructor/textures/grid_shader.gdshader
new file mode 100644
index 0000000..d625618
--- /dev/null
+++ b/source/addons/boxconstructor/textures/grid_shader.gdshader
@@ -0,0 +1,23 @@
+shader_type spatial;
+render_mode blend_mix, depth_draw_opaque, cull_disabled, diffuse_burley;
+
+uniform float grid_scale = 0.1;
+
+void fragment() {
+ vec2 world_uv = UV * 4000.0;
+
+ vec2 scaled_uv = world_uv / grid_scale;
+
+ vec2 grid = abs(fract(scaled_uv - 0.5) - 0.5);
+ vec2 grid_width = fwidth(scaled_uv) * 1.0;
+ vec2 grid_lines = smoothstep(vec2(0.0), grid_width, grid);
+ float line = min(grid_lines.x, grid_lines.y);
+
+ if (line < 0.5) {
+ ALBEDO = vec3(0.4);
+ ALPHA = 0.8;
+ } else {
+ ALBEDO = vec3(0.15);
+ ALPHA = 0.1;
+ }
+}
\ No newline at end of file
diff --git a/source/addons/boxconstructor/textures/grid_shader.gdshader.uid b/source/addons/boxconstructor/textures/grid_shader.gdshader.uid
new file mode 100644
index 0000000..e9182bd
--- /dev/null
+++ b/source/addons/boxconstructor/textures/grid_shader.gdshader.uid
@@ -0,0 +1 @@
+uid://qnh11q0505w1
diff --git a/source/addons/controller_icons/ControllerIcons.gd b/source/addons/controller_icons/ControllerIcons.gd
new file mode 100644
index 0000000..aac44a5
--- /dev/null
+++ b/source/addons/controller_icons/ControllerIcons.gd
@@ -0,0 +1,697 @@
+@tool
+extends Node
+
+signal input_type_changed(input_type: InputType, controller: int)
+
+enum InputType {
+ KEYBOARD_MOUSE, ## The input is from the keyboard and/or mouse.
+ CONTROLLER ## The input is from a controller.
+}
+
+enum PathType {
+ INPUT_ACTION, ## The path is an input action.
+ JOYPAD_PATH, ## The path is a generic joypad path.
+ SPECIFIC_PATH ## The path is a specific path.
+}
+
+var _cached_icons := {}
+var _custom_input_actions := {}
+
+var _cached_callables_lock := Mutex.new()
+var _cached_callables : Array[Callable] = []
+
+var _last_input_type : InputType
+var _last_controller : int
+var _settings : ControllerSettings
+var _base_extension := "png"
+
+# Custom mouse velocity calculation, because Godot
+# doesn't implement it on some OSes apparently
+const _MOUSE_VELOCITY_DELTA := 0.1
+var _t : float
+var _mouse_velocity : int
+
+var Mapper = preload("res://addons/controller_icons/Mapper.gd").new()
+
+# Default actions will be the builtin editor actions when
+# the script is at editor ("tool") level. To pickup more
+# actions available, these have to be queried manually
+var _builtin_keys := [
+ "input/ui_accept", "input/ui_cancel", "input/ui_copy",
+ "input/ui_cut", "input/ui_down", "input/ui_end",
+ "input/ui_filedialog_refresh", "input/ui_filedialog_show_hidden",
+ "input/ui_filedialog_up_one_level", "input/ui_focus_next",
+ "input/ui_focus_prev", "input/ui_graph_delete",
+ "input/ui_graph_duplicate", "input/ui_home",
+ "input/ui_left", "input/ui_menu", "input/ui_page_down",
+ "input/ui_page_up", "input/ui_paste", "input/ui_redo",
+ "input/ui_right", "input/ui_select", "input/ui_swap_input_direction",
+ "input/ui_text_add_selection_for_next_occurrence",
+ "input/ui_text_backspace", "input/ui_text_backspace_all_to_left",
+ "input/ui_text_backspace_all_to_left.macos",
+ "input/ui_text_backspace_word", "input/ui_text_backspace_word.macos",
+ "input/ui_text_caret_add_above", "input/ui_text_caret_add_above.macos",
+ "input/ui_text_caret_add_below", "input/ui_text_caret_add_below.macos",
+ "input/ui_text_caret_document_end", "input/ui_text_caret_document_end.macos",
+ "input/ui_text_caret_document_start", "input/ui_text_caret_document_start.macos",
+ "input/ui_text_caret_down", "input/ui_text_caret_left",
+ "input/ui_text_caret_line_end", "input/ui_text_caret_line_end.macos",
+ "input/ui_text_caret_line_start", "input/ui_text_caret_line_start.macos",
+ "input/ui_text_caret_page_down", "input/ui_text_caret_page_up",
+ "input/ui_text_caret_right", "input/ui_text_caret_up",
+ "input/ui_text_caret_word_left", "input/ui_text_caret_word_left.macos",
+ "input/ui_text_caret_word_right", "input/ui_text_caret_word_right.macos",
+ "input/ui_text_clear_carets_and_selection", "input/ui_text_completion_accept",
+ "input/ui_text_completion_query", "input/ui_text_completion_replace",
+ "input/ui_text_dedent", "input/ui_text_delete",
+ "input/ui_text_delete_all_to_right", "input/ui_text_delete_all_to_right.macos",
+ "input/ui_text_delete_word", "input/ui_text_delete_word.macos",
+ "input/ui_text_indent", "input/ui_text_newline", "input/ui_text_newline_above",
+ "input/ui_text_newline_blank", "input/ui_text_scroll_down",
+ "input/ui_text_scroll_down.macos", "input/ui_text_scroll_up",
+ "input/ui_text_scroll_up.macos", "input/ui_text_select_all",
+ "input/ui_text_select_word_under_caret", "input/ui_text_select_word_under_caret.macos",
+ "input/ui_text_submit", "input/ui_text_toggle_insert_mode", "input/ui_undo",
+ "input/ui_up",
+]
+
+func _set_last_input_type(__last_input_type, __last_controller):
+ _last_input_type = __last_input_type
+ _last_controller = __last_controller
+ emit_signal("input_type_changed", _last_input_type, _last_controller)
+
+func _enter_tree():
+ process_mode = Node.PROCESS_MODE_ALWAYS
+ if Engine.is_editor_hint():
+ _parse_input_actions()
+
+func _exit_tree():
+ Mapper.queue_free()
+
+func _parse_input_actions():
+ _custom_input_actions.clear()
+
+ for key in _builtin_keys:
+ var data : Dictionary = ProjectSettings.get_setting(key)
+ if not data.is_empty() and data.has("events") and data["events"] is Array:
+ _add_custom_input_action((key as String).trim_prefix("input/"), data)
+
+ # A script running at editor ("tool") level only has
+ # the default mappings. The way to get around this is
+ # manually parsing the project file and adding the
+ # new input actions to lookup.
+ var proj_file := ConfigFile.new()
+ if proj_file.load("res://project.godot"):
+ printerr("Failed to open \"project.godot\"! Custom input actions will not work on editor view!")
+ return
+ if proj_file.has_section("input"):
+ for input_action in proj_file.get_section_keys("input"):
+ var data : Dictionary = proj_file.get_value("input", input_action)
+ _add_custom_input_action(input_action, data)
+
+func _ready():
+ Input.joy_connection_changed.connect(_on_joy_connection_changed)
+ _settings = load("res://addons/controller_icons/settings.tres")
+ if not _settings:
+ _settings = ControllerSettings.new()
+ if _settings.custom_mapper:
+ Mapper = _settings.custom_mapper.new()
+ if _settings.custom_file_extension and not _settings.custom_file_extension.is_empty():
+ _base_extension = _settings.custom_file_extension
+ # Wait a frame to give a chance for the app to initialize
+ await get_tree().process_frame
+ # Set input type to what's likely being used currently
+ if Input.get_connected_joypads().is_empty():
+ _set_last_input_type(InputType.KEYBOARD_MOUSE, -1)
+ else:
+ _set_last_input_type(InputType.CONTROLLER, Input.get_connected_joypads().front())
+
+func _on_joy_connection_changed(device, connected):
+ if connected:
+ _set_last_input_type(InputType.CONTROLLER, device)
+ else:
+ if Input.get_connected_joypads().is_empty():
+ _set_last_input_type(InputType.KEYBOARD_MOUSE, -1)
+ else:
+ _set_last_input_type(InputType.CONTROLLER, Input.get_connected_joypads().front())
+
+func _input(event: InputEvent):
+ var input_type = _last_input_type
+ var controller = _last_controller
+ match event.get_class():
+ "InputEventKey", "InputEventMouseButton":
+ input_type = InputType.KEYBOARD_MOUSE
+ "InputEventMouseMotion":
+ if _settings.allow_mouse_remap and _test_mouse_velocity(event.relative):
+ input_type = InputType.KEYBOARD_MOUSE
+ "InputEventJoypadButton":
+ input_type = InputType.CONTROLLER
+ controller = event.device
+ "InputEventJoypadMotion":
+ if abs(event.axis_value) > _settings.joypad_deadzone:
+ input_type = InputType.CONTROLLER
+ controller = event.device
+ if input_type != _last_input_type or controller != _last_controller:
+ _set_last_input_type(input_type, controller)
+
+func _test_mouse_velocity(relative_vec: Vector2):
+ if _t > _MOUSE_VELOCITY_DELTA:
+ _t = 0
+ _mouse_velocity = 0
+
+ # We do a component sum instead of a length, to save on a
+ # sqrt operation, and because length_squared is negatively
+ # affected by low value vectors (<10).
+ # It is also good enough for this system, so reliability
+ # is sacrificed in favor of speed.
+ _mouse_velocity += abs(relative_vec.x) + abs(relative_vec.y)
+ return _mouse_velocity / _MOUSE_VELOCITY_DELTA > _settings.mouse_min_movement
+
+func _process(delta: float) -> void:
+ _t += delta
+
+ if not _cached_callables.is_empty() and _cached_callables_lock.try_lock():
+ # UPGRADE: In Godot 4.2, for-loop variables can be
+ # statically typed:
+ # for f: Callable in _cached_callables:
+ for f in _cached_callables:
+ if f.is_valid(): f.call()
+ _cached_callables.clear()
+ _cached_callables_lock.unlock()
+
+func _add_custom_input_action(input_action: String, data: Dictionary):
+ _custom_input_actions[input_action] = data["events"]
+
+func refresh():
+ # All it takes is to signal icons to refresh paths
+ emit_signal("input_type_changed", _last_input_type, _last_controller)
+
+func get_joypad_type(controller: int = _last_controller) -> ControllerSettings.Devices:
+ return Mapper._get_joypad_type(controller, _settings.joypad_fallback)
+
+func parse_path(path: String, input_type = _last_input_type, last_controller = _last_controller) -> Texture:
+ if typeof(input_type) == TYPE_NIL:
+ return null
+ var root_paths := _expand_path(path, input_type, last_controller)
+ for root_path in root_paths:
+ if _load_icon(root_path):
+ continue
+ return _cached_icons[root_path]
+ return null
+
+func parse_event_modifiers(event: InputEvent) -> Array[Texture]:
+ if not event or not event is InputEventWithModifiers:
+ return []
+
+ var icons : Array[Texture] = []
+ var modifiers : Array[String] = []
+ if event.command_or_control_autoremap:
+ match OS.get_name():
+ "macOS":
+ modifiers.push_back("key/command")
+ _:
+ modifiers.push_back("key/ctrl")
+ if event.ctrl_pressed and not event.command_or_control_autoremap:
+ modifiers.push_back("key/ctrl")
+ if event.shift_pressed:
+ modifiers.push_back("key/shift")
+ if event.alt_pressed:
+ modifiers.push_back("key/alt")
+ if event.meta_pressed and not event.command_or_control_autoremap:
+ match OS.get_name():
+ "macOS":
+ modifiers.push_back("key/command")
+ _:
+ modifiers.push_back("key/win")
+
+ for modifier in modifiers:
+ for icon_path in _expand_path(modifier, InputType.KEYBOARD_MOUSE, -1):
+ if _load_icon(icon_path) == OK:
+ icons.push_back(_cached_icons[icon_path])
+
+ return icons
+
+func parse_path_to_tts(path: String, input_type: int = _last_input_type, controller: int = _last_controller) -> String:
+ if input_type == null:
+ return ""
+ var tts = _convert_path_to_asset_file(path, input_type, controller)
+ return _convert_asset_file_to_tts(tts.get_basename().get_file())
+
+func parse_event(event: InputEvent) -> Texture:
+ var path = _convert_event_to_path(event)
+ if path.is_empty():
+ return null
+
+ var base_paths := [
+ _settings.custom_asset_dir + "/",
+ "res://addons/controller_icons/assets/"
+ ]
+ for base_path in base_paths:
+ if base_path.is_empty():
+ continue
+ base_path += path + "." + _base_extension
+ if _load_icon(base_path):
+ continue
+ return _cached_icons[base_path]
+ return null
+
+func get_path_type(path: String) -> PathType:
+ if _custom_input_actions.has(path) or InputMap.has_action(path):
+ return PathType.INPUT_ACTION
+ elif path.get_slice("/", 0) == "joypad":
+ return PathType.JOYPAD_PATH
+ else:
+ return PathType.SPECIFIC_PATH
+
+func get_matching_event(path: String, input_type: InputType = _last_input_type, controller: int = _last_controller) -> InputEvent:
+ var events : Array
+ if _custom_input_actions.has(path):
+ events = _custom_input_actions[path]
+ else:
+ events = InputMap.action_get_events(path)
+
+ var fallback = null
+ for event in events:
+ if not is_instance_valid(event): continue
+
+ match event.get_class():
+ "InputEventKey", "InputEventMouse", "InputEventMouseMotion", "InputEventMouseButton":
+ if input_type == InputType.KEYBOARD_MOUSE:
+ return event
+ "InputEventJoypadButton", "InputEventJoypadMotion":
+ if input_type == InputType.CONTROLLER:
+ # Use the first device specific mapping if there is one.
+ if event.device == controller:
+ return event
+ # Otherwise use the first "all devices" mapping.
+ elif fallback == null and event.device < 0:
+ fallback = event
+
+ return fallback
+
+func _expand_path(path: String, input_type: int, controller: int) -> Array:
+ var paths := []
+ var base_paths := [
+ _settings.custom_asset_dir + "/",
+ "res://addons/controller_icons/assets/"
+ ]
+ for base_path in base_paths:
+ if base_path.is_empty():
+ continue
+ base_path += _convert_path_to_asset_file(path, input_type, controller)
+
+ paths.push_back(base_path + "." + _base_extension)
+ return paths
+
+func _convert_path_to_asset_file(path: String, input_type: int, controller: int) -> String:
+ match get_path_type(path):
+ PathType.INPUT_ACTION:
+ var event := get_matching_event(path, input_type, controller)
+ if event:
+ return _convert_event_to_path(event)
+ return path
+ PathType.JOYPAD_PATH:
+ return Mapper._convert_joypad_path(path, controller, _settings.joypad_fallback)
+ PathType.SPECIFIC_PATH, _:
+ return path
+
+func _convert_asset_file_to_tts(path: String) -> String:
+ match path:
+ "shift_alt":
+ return "shift"
+ "esc":
+ return "escape"
+ "backspace_alt":
+ return "backspace"
+ "enter_alt":
+ return "enter"
+ "enter_tall":
+ return "keypad enter"
+ "arrow_left":
+ return "left arrow"
+ "arrow_right":
+ return "right arrow"
+ "del":
+ return "delete"
+ "arrow_up":
+ return "up arrow"
+ "arrow_down":
+ return "down arrow"
+ "shift_alt":
+ return "shift"
+ "ctrl":
+ return "control"
+ "kp_add":
+ return "keypad plus"
+ "mark_left":
+ return "left mark"
+ "mark_right":
+ return "right mark"
+ "bracket_left":
+ return "left bracket"
+ "bracket_right":
+ return "right bracket"
+ "tilda":
+ return "tilde"
+ "lb":
+ return "left bumper"
+ "rb":
+ return "right bumper"
+ "lt":
+ return "left trigger"
+ "rt":
+ return "right trigger"
+ "l_stick_click":
+ return "left stick click"
+ "r_stick_click":
+ return "right stick click"
+ "l_stick":
+ return "left stick"
+ "r_stick":
+ return "right stick"
+ _:
+ return path
+
+func _convert_event_to_path(event: InputEvent):
+ if event is InputEventKey:
+ # If this is a physical key, convert to localized scancode
+ if event.keycode == 0:
+ return _convert_key_to_path(DisplayServer.keyboard_get_keycode_from_physical(event.physical_keycode))
+ return _convert_key_to_path(event.keycode)
+ elif event is InputEventMouseButton:
+ return _convert_mouse_button_to_path(event.button_index)
+ elif event is InputEventJoypadButton:
+ return _convert_joypad_button_to_path(event.button_index, event.device)
+ elif event is InputEventJoypadMotion:
+ return _convert_joypad_motion_to_path(event.axis, event.device)
+
+func _convert_key_to_path(scancode: int):
+ match scancode:
+ KEY_ESCAPE:
+ return "key/esc"
+ KEY_TAB:
+ return "key/tab"
+ KEY_BACKSPACE:
+ return "key/backspace_alt"
+ KEY_ENTER:
+ return "key/enter_alt"
+ KEY_KP_ENTER:
+ return "key/enter_tall"
+ KEY_INSERT:
+ return "key/insert"
+ KEY_DELETE:
+ return "key/del"
+ KEY_PRINT:
+ return "key/print_screen"
+ KEY_HOME:
+ return "key/home"
+ KEY_END:
+ return "key/end"
+ KEY_LEFT:
+ return "key/arrow_left"
+ KEY_UP:
+ return "key/arrow_up"
+ KEY_RIGHT:
+ return "key/arrow_right"
+ KEY_DOWN:
+ return "key/arrow_down"
+ KEY_PAGEUP:
+ return "key/page_up"
+ KEY_PAGEDOWN:
+ return "key/page_down"
+ KEY_SHIFT:
+ return "key/shift_alt"
+ KEY_CTRL:
+ return "key/ctrl"
+ KEY_META:
+ match OS.get_name():
+ "macOS":
+ return "key/command"
+ _:
+ return "key/meta"
+ KEY_ALT:
+ return "key/alt"
+ KEY_CAPSLOCK:
+ return "key/caps_lock"
+ KEY_NUMLOCK:
+ return "key/num_lock"
+ KEY_F1:
+ return "key/f1"
+ KEY_F2:
+ return "key/f2"
+ KEY_F3:
+ return "key/f3"
+ KEY_F4:
+ return "key/f4"
+ KEY_F5:
+ return "key/f5"
+ KEY_F6:
+ return "key/f6"
+ KEY_F7:
+ return "key/f7"
+ KEY_F8:
+ return "key/f8"
+ KEY_F9:
+ return "key/f9"
+ KEY_F10:
+ return "key/f10"
+ KEY_F11:
+ return "key/f11"
+ KEY_F12:
+ return "key/f12"
+ KEY_KP_MULTIPLY, KEY_ASTERISK:
+ return "key/asterisk"
+ KEY_KP_SUBTRACT, KEY_MINUS:
+ return "key/minus"
+ KEY_KP_ADD:
+ return "key/plus_tall"
+ KEY_KP_0:
+ return "key/0"
+ KEY_KP_1:
+ return "key/1"
+ KEY_KP_2:
+ return "key/2"
+ KEY_KP_3:
+ return "key/3"
+ KEY_KP_4:
+ return "key/4"
+ KEY_KP_5:
+ return "key/5"
+ KEY_KP_6:
+ return "key/6"
+ KEY_KP_7:
+ return "key/7"
+ KEY_KP_8:
+ return "key/8"
+ KEY_KP_9:
+ return "key/9"
+ KEY_UNKNOWN:
+ return ""
+ KEY_SPACE:
+ return "key/space"
+ KEY_QUOTEDBL:
+ return "key/quote"
+ KEY_PLUS:
+ return "key/plus"
+ KEY_0:
+ return "key/0"
+ KEY_1:
+ return "key/1"
+ KEY_2:
+ return "key/2"
+ KEY_3:
+ return "key/3"
+ KEY_4:
+ return "key/4"
+ KEY_5:
+ return "key/5"
+ KEY_6:
+ return "key/6"
+ KEY_7:
+ return "key/7"
+ KEY_8:
+ return "key/8"
+ KEY_9:
+ return "key/9"
+ KEY_SEMICOLON:
+ return "key/semicolon"
+ KEY_LESS:
+ return "key/mark_left"
+ KEY_GREATER:
+ return "key/mark_right"
+ KEY_QUESTION:
+ return "key/question"
+ KEY_A:
+ return "key/a"
+ KEY_B:
+ return "key/b"
+ KEY_C:
+ return "key/c"
+ KEY_D:
+ return "key/d"
+ KEY_E:
+ return "key/e"
+ KEY_F:
+ return "key/f"
+ KEY_G:
+ return "key/g"
+ KEY_H:
+ return "key/h"
+ KEY_I:
+ return "key/i"
+ KEY_J:
+ return "key/j"
+ KEY_K:
+ return "key/k"
+ KEY_L:
+ return "key/l"
+ KEY_M:
+ return "key/m"
+ KEY_N:
+ return "key/n"
+ KEY_O:
+ return "key/o"
+ KEY_P:
+ return "key/p"
+ KEY_Q:
+ return "key/q"
+ KEY_R:
+ return "key/r"
+ KEY_S:
+ return "key/s"
+ KEY_T:
+ return "key/t"
+ KEY_U:
+ return "key/u"
+ KEY_V:
+ return "key/v"
+ KEY_W:
+ return "key/w"
+ KEY_X:
+ return "key/x"
+ KEY_Y:
+ return "key/y"
+ KEY_Z:
+ return "key/z"
+ KEY_BRACKETLEFT:
+ return "key/bracket_left"
+ KEY_BACKSLASH:
+ return "key/slash"
+ KEY_SLASH:
+ return "key/forward_slash"
+ KEY_BRACKETRIGHT:
+ return "key/bracket_right"
+ KEY_ASCIITILDE:
+ return "key/tilda"
+ KEY_QUOTELEFT:
+ return "key/backtick"
+ KEY_APOSTROPHE:
+ return "key/apostrophe"
+ KEY_COMMA:
+ return "key/comma"
+ KEY_EQUAL:
+ return "key/equals"
+ KEY_PERIOD, KEY_KP_PERIOD:
+ return "key/period"
+ _:
+ return ""
+
+func _convert_mouse_button_to_path(button_index: int):
+ match button_index:
+ MOUSE_BUTTON_LEFT:
+ return "mouse/left"
+ MOUSE_BUTTON_RIGHT:
+ return "mouse/right"
+ MOUSE_BUTTON_MIDDLE:
+ return "mouse/middle"
+ MOUSE_BUTTON_WHEEL_UP:
+ return "mouse/wheel_up"
+ MOUSE_BUTTON_WHEEL_DOWN:
+ return "mouse/wheel_down"
+ MOUSE_BUTTON_XBUTTON1:
+ return "mouse/side_down"
+ MOUSE_BUTTON_XBUTTON2:
+ return "mouse/side_up"
+ _:
+ return "mouse/sample"
+
+func _convert_joypad_button_to_path(button_index: int, controller: int):
+ var path
+ match button_index:
+ JOY_BUTTON_A:
+ path = "joypad/a"
+ JOY_BUTTON_B:
+ path = "joypad/b"
+ JOY_BUTTON_X:
+ path = "joypad/x"
+ JOY_BUTTON_Y:
+ path = "joypad/y"
+ JOY_BUTTON_LEFT_SHOULDER:
+ path = "joypad/lb"
+ JOY_BUTTON_RIGHT_SHOULDER:
+ path = "joypad/rb"
+ JOY_BUTTON_LEFT_STICK:
+ path = "joypad/l_stick_click"
+ JOY_BUTTON_RIGHT_STICK:
+ path = "joypad/r_stick_click"
+ JOY_BUTTON_BACK:
+ path = "joypad/select"
+ JOY_BUTTON_START:
+ path = "joypad/start"
+ JOY_BUTTON_DPAD_UP:
+ path = "joypad/dpad_up"
+ JOY_BUTTON_DPAD_DOWN:
+ path = "joypad/dpad_down"
+ JOY_BUTTON_DPAD_LEFT:
+ path = "joypad/dpad_left"
+ JOY_BUTTON_DPAD_RIGHT:
+ path = "joypad/dpad_right"
+ JOY_BUTTON_GUIDE:
+ path = "joypad/home"
+ JOY_BUTTON_MISC1:
+ path = "joypad/share"
+ _:
+ return ""
+ return Mapper._convert_joypad_path(path, controller, _settings.joypad_fallback)
+
+func _convert_joypad_motion_to_path(axis: int, controller: int):
+ var path : String
+ match axis:
+ JOY_AXIS_LEFT_X, JOY_AXIS_LEFT_Y:
+ path = "joypad/l_stick"
+ JOY_AXIS_RIGHT_X, JOY_AXIS_RIGHT_Y:
+ path = "joypad/r_stick"
+ JOY_AXIS_TRIGGER_LEFT:
+ path = "joypad/lt"
+ JOY_AXIS_TRIGGER_RIGHT:
+ path = "joypad/rt"
+ _:
+ return ""
+ return Mapper._convert_joypad_path(path, controller, _settings.joypad_fallback)
+
+func _load_icon(path: String) -> int:
+ if _cached_icons.has(path): return OK
+ var tex = null
+ if path.begins_with("res://"):
+ if ResourceLoader.exists(path):
+ tex = load(path)
+ if not tex:
+ return ERR_FILE_CORRUPT
+ else:
+ return ERR_FILE_NOT_FOUND
+ else:
+ if not FileAccess.file_exists(path):
+ return ERR_FILE_NOT_FOUND
+ var img := Image.new()
+ var err = img.load(path)
+ if err != OK:
+ return err
+ tex = ImageTexture.new()
+ tex.create_from_image(img)
+ _cached_icons[path] = tex
+ return OK
+
+func _defer_texture_load(f: Callable) -> void:
+ _cached_callables_lock.lock()
+ _cached_callables.push_back(f)
+ _cached_callables_lock.unlock()
diff --git a/source/addons/controller_icons/ControllerIcons.gd.uid b/source/addons/controller_icons/ControllerIcons.gd.uid
new file mode 100644
index 0000000..a66494e
--- /dev/null
+++ b/source/addons/controller_icons/ControllerIcons.gd.uid
@@ -0,0 +1 @@
+uid://ddcwjvcc65eg0
diff --git a/source/addons/controller_icons/Mapper.gd b/source/addons/controller_icons/Mapper.gd
new file mode 100644
index 0000000..25d597a
--- /dev/null
+++ b/source/addons/controller_icons/Mapper.gd
@@ -0,0 +1,299 @@
+extends Node
+class_name ControllerMapper
+
+func _convert_joypad_path(path: String, device: int, fallback: ControllerSettings.Devices) -> String:
+ match _get_joypad_type(device, fallback):
+ ControllerSettings.Devices.LUNA:
+ return _convert_joypad_to_luna(path)
+ ControllerSettings.Devices.PS3:
+ return _convert_joypad_to_ps3(path)
+ ControllerSettings.Devices.PS4:
+ return _convert_joypad_to_ps4(path)
+ ControllerSettings.Devices.PS5:
+ return _convert_joypad_to_ps5(path)
+ ControllerSettings.Devices.STADIA:
+ return _convert_joypad_to_stadia(path)
+ ControllerSettings.Devices.STEAM:
+ return _convert_joypad_to_steam(path)
+ ControllerSettings.Devices.SWITCH:
+ return _convert_joypad_to_switch(path)
+ ControllerSettings.Devices.JOYCON:
+ return _convert_joypad_to_joycon(path)
+ ControllerSettings.Devices.XBOX360:
+ return _convert_joypad_to_xbox360(path)
+ ControllerSettings.Devices.XBOXONE:
+ return _convert_joypad_to_xboxone(path)
+ ControllerSettings.Devices.XBOXSERIES:
+ return _convert_joypad_to_xboxseries(path)
+ ControllerSettings.Devices.STEAM_DECK:
+ return _convert_joypad_to_steamdeck(path)
+ ControllerSettings.Devices.OUYA:
+ return _convert_joypad_to_ouya(path)
+ _:
+ return ""
+
+func _get_joypad_type(device, fallback):
+ var available = Input.get_connected_joypads()
+ if available.is_empty():
+ return fallback
+ # If the requested joypad is not on the connected joypad list, try using the last known connected joypad
+ if not device in available:
+ device = ControllerIcons._last_controller
+ # If that fails too, then use whatever joypad we have connected right now
+ if not device in available:
+ device = available.front()
+
+ var controller_name = Input.get_joy_name(device)
+ if "Luna Controller" in controller_name:
+ return ControllerSettings.Devices.LUNA
+ elif "PS3 Controller" in controller_name:
+ return ControllerSettings.Devices.PS3
+ elif "PS4 Controller" in controller_name or \
+ "DUALSHOCK 4" in controller_name:
+ return ControllerSettings.Devices.PS4
+ elif "PS5 Controller" in controller_name or \
+ "DualSense" in controller_name:
+ return ControllerSettings.Devices.PS5
+ elif "Stadia Controller" in controller_name:
+ return ControllerSettings.Devices.STADIA
+ elif "Steam Controller" in controller_name:
+ return ControllerSettings.Devices.STEAM
+ elif "Switch Controller" in controller_name or \
+ "Switch Pro Controller" in controller_name:
+ return ControllerSettings.Devices.SWITCH
+ elif "Joy-Con" in controller_name:
+ return ControllerSettings.Devices.JOYCON
+ elif "Xbox 360 Controller" in controller_name:
+ return ControllerSettings.Devices.XBOX360
+ elif "Xbox One" in controller_name or \
+ "X-Box One" in controller_name or \
+ "Xbox Wireless Controller" in controller_name:
+ return ControllerSettings.Devices.XBOXONE
+ elif "Xbox Series" in controller_name:
+ return ControllerSettings.Devices.XBOXSERIES
+ elif "Steam Deck" in controller_name or \
+ "Steam Virtual Gamepad" in controller_name:
+ return ControllerSettings.Devices.STEAM_DECK
+ elif "OUYA Controller" in controller_name:
+ return ControllerSettings.Devices.OUYA
+ else:
+ return fallback
+
+func _convert_joypad_to_luna(path: String):
+ path = path.replace("joypad", "luna")
+ match path.substr(path.find("/") + 1):
+ "select":
+ return path.replace("/select", "/circle")
+ "start":
+ return path.replace("/start", "/menu")
+ "share":
+ return path.replace("/share", "/microphone")
+ _:
+ return path
+
+func _convert_joypad_to_playstation(path: String):
+ match path.substr(path.find("/") + 1):
+ "a":
+ return path.replace("/a", "/cross")
+ "b":
+ return path.replace("/b", "/circle")
+ "x":
+ return path.replace("/x", "/square")
+ "y":
+ return path.replace("/y", "/triangle")
+ "lb":
+ return path.replace("/lb", "/l1")
+ "rb":
+ return path.replace("/rb", "/r1")
+ "lt":
+ return path.replace("/lt", "/l2")
+ "rt":
+ return path.replace("/rt", "/r2")
+ _:
+ return path
+
+func _convert_joypad_to_ps3(path: String):
+ return _convert_joypad_to_playstation(path.replace("joypad", "ps3"))
+
+func _convert_joypad_to_ps4(path: String):
+ path = _convert_joypad_to_playstation(path.replace("joypad", "ps4"))
+ match path.substr(path.find("/") + 1):
+ "select":
+ return path.replace("/select", "/share")
+ "start":
+ return path.replace("/start", "/options")
+ "share":
+ return path.replace("/share", "/")
+ _:
+ return path
+
+func _convert_joypad_to_ps5(path: String):
+ path = _convert_joypad_to_playstation(path.replace("joypad", "ps5"))
+ match path.substr(path.find("/") + 1):
+ "select":
+ return path.replace("/select", "/share")
+ "start":
+ return path.replace("/start", "/options")
+ "home":
+ return path.replace("/home", "/assistant")
+ "share":
+ return path.replace("/share", "/microphone")
+ _:
+ return path
+
+func _convert_joypad_to_stadia(path: String):
+ path = path.replace("joypad", "stadia")
+ match path.substr(path.find("/") + 1):
+ "lb":
+ return path.replace("/lb", "/l1")
+ "rb":
+ return path.replace("/rb", "/r1")
+ "lt":
+ return path.replace("/lt", "/l2")
+ "rt":
+ return path.replace("/rt", "/r2")
+ "select":
+ return path.replace("/select", "/dots")
+ "start":
+ return path.replace("/start", "/menu")
+ "share":
+ return path.replace("/share", "/select")
+ _:
+ return path
+
+func _convert_joypad_to_steam(path: String):
+ path = path.replace("joypad", "steam")
+ match path.substr(path.find("/") + 1):
+ "r_stick_click":
+ return path.replace("/r_stick_click", "/right_track_center")
+ "select":
+ return path.replace("/select", "/back")
+ "home":
+ return path.replace("/home", "/system")
+ "dpad":
+ return path.replace("/dpad", "/left_track")
+ "dpad_up":
+ return path.replace("/dpad_up", "/left_track_up")
+ "dpad_down":
+ return path.replace("/dpad_down", "/left_track_down")
+ "dpad_left":
+ return path.replace("/dpad_left", "/left_track_left")
+ "dpad_right":
+ return path.replace("/dpad_right", "/left_track_right")
+ "l_stick":
+ return path.replace("/l_stick", "/stick")
+ "r_stick":
+ return path.replace("/r_stick", "/right_track")
+ _:
+ return path
+
+func _convert_joypad_to_switch(path: String):
+ path = path.replace("joypad", "switch")
+ match path.substr(path.find("/") + 1):
+ "a":
+ return path.replace("/a", "/b")
+ "b":
+ return path.replace("/b", "/a")
+ "x":
+ return path.replace("/x", "/y")
+ "y":
+ return path.replace("/y", "/x")
+ "lb":
+ return path.replace("/lb", "/l")
+ "rb":
+ return path.replace("/rb", "/r")
+ "lt":
+ return path.replace("/lt", "/zl")
+ "rt":
+ return path.replace("/rt", "/zr")
+ "select":
+ return path.replace("/select", "/minus")
+ "start":
+ return path.replace("/start", "/plus")
+ "share":
+ return path.replace("/share", "/square")
+ _:
+ return path
+
+func _convert_joypad_to_joycon(path: String):
+ path = _convert_joypad_to_switch(path)
+ match path.substr(path.find("/") + 1):
+ "dpad_up":
+ return path.replace("/dpad_up", "/up")
+ "dpad_down":
+ return path.replace("/dpad_down", "/down")
+ "dpad_left":
+ return path.replace("/dpad_left", "/left")
+ "dpad_right":
+ return path.replace("/dpad_right", "/right")
+ _:
+ return path
+
+func _convert_joypad_to_xbox360(path: String):
+ path = path.replace("joypad", "xbox360")
+ match path.substr(path.find("/") + 1):
+ "select":
+ return path.replace("/select", "/back")
+ _:
+ return path
+
+func _convert_joypad_to_xbox_modern(path: String):
+ match path.substr(path.find("/") + 1):
+ "select":
+ return path.replace("/select", "/view")
+ "start":
+ return path.replace("/start", "/menu")
+ _:
+ return path
+
+func _convert_joypad_to_xboxone(path: String):
+ return _convert_joypad_to_xbox_modern(path.replace("joypad", "xboxone"))
+
+func _convert_joypad_to_xboxseries(path: String):
+ return _convert_joypad_to_xbox_modern(path.replace("joypad", "xboxseries"))
+
+func _convert_joypad_to_steamdeck(path: String):
+ path = path.replace("joypad", "steamdeck")
+ match path.substr(path.find("/") + 1):
+ "lb":
+ return path.replace("/lb", "/l1")
+ "rb":
+ return path.replace("/rb", "/r1")
+ "lt":
+ return path.replace("/lt", "/l2")
+ "rt":
+ return path.replace("/rt", "/r2")
+ "select":
+ return path.replace("/select", "/square")
+ "start":
+ return path.replace("/start", "/menu")
+ "home":
+ return path.replace("/home", "/steam")
+ "share":
+ return path.replace("/share", "/dots")
+ _:
+ return path
+
+func _convert_joypad_to_ouya(path: String):
+ path = path.replace("joypad", "ouya")
+ match path.substr(path.find("/") + 1):
+ "a":
+ return path.replace("/a", "/o")
+ "x":
+ return path.replace("/x", "/u")
+ "b":
+ return path.replace("/b", "/a")
+ "lb":
+ return path.replace("/lb", "/l1")
+ "rb":
+ return path.replace("/rb", "/r1")
+ "lt":
+ return path.replace("/lt", "/l2")
+ "rt":
+ return path.replace("/rt", "/r2")
+ "start":
+ return path.replace("/start", "/menu")
+ "share":
+ return path.replace("/share", "/microphone")
+ _:
+ return path
diff --git a/source/addons/controller_icons/Mapper.gd.uid b/source/addons/controller_icons/Mapper.gd.uid
new file mode 100644
index 0000000..00d965f
--- /dev/null
+++ b/source/addons/controller_icons/Mapper.gd.uid
@@ -0,0 +1 @@
+uid://do2cg52wwim1s
diff --git a/source/addons/controller_icons/Settings.gd b/source/addons/controller_icons/Settings.gd
new file mode 100644
index 0000000..7400e77
--- /dev/null
+++ b/source/addons/controller_icons/Settings.gd
@@ -0,0 +1,55 @@
+@tool
+extends Resource
+class_name ControllerSettings
+
+enum Devices {
+ LUNA,
+ OUYA,
+ PS3,
+ PS4,
+ PS5,
+ STADIA,
+ STEAM,
+ SWITCH,
+ JOYCON,
+ XBOX360,
+ XBOXONE,
+ XBOXSERIES,
+ STEAM_DECK
+}
+
+## General addon settings
+@export_subgroup("General")
+
+## Controller type to fallback to if automatic
+## controller detection fails
+@export var joypad_fallback : Devices = Devices.XBOX360
+
+## Controller deadzone for triggering an icon remap when input
+## is analogic (movement sticks or triggers)
+@export_range(0.0, 1.0) var joypad_deadzone : float = 0.5
+
+## Allow mouse movement to trigger an icon remap
+@export var allow_mouse_remap : bool = true
+
+## Minimum mouse "instantaneous" movement for
+## triggering an icon remap
+@export_range(0, 10000) var mouse_min_movement : int = 200
+
+## Settings related to advanced custom assets usage and remapping
+@export_subgroup("Custom assets")
+
+## Custom asset lookup folder for custom icons
+@export_dir var custom_asset_dir : String = ""
+
+## Custom generic joystick mapper script
+@export var custom_mapper : Script
+
+## Custom icon file extension
+@export var custom_file_extension : String = ""
+
+## Custom settings related to any text rendering required on prompts
+@export_subgroup("Text Rendering")
+
+## Custom LabelSettings. If unset, uses engine default settings.
+@export var custom_label_settings : LabelSettings
diff --git a/source/addons/controller_icons/Settings.gd.uid b/source/addons/controller_icons/Settings.gd.uid
new file mode 100644
index 0000000..2c1f23a
--- /dev/null
+++ b/source/addons/controller_icons/Settings.gd.uid
@@ -0,0 +1 @@
+uid://dhd3vo6f4h2r
diff --git a/source/addons/controller_icons/assets/disconnected.png b/source/addons/controller_icons/assets/disconnected.png
new file mode 100644
index 0000000..6c93def
Binary files /dev/null and b/source/addons/controller_icons/assets/disconnected.png differ
diff --git a/source/addons/controller_icons/assets/disconnected.png.import b/source/addons/controller_icons/assets/disconnected.png.import
new file mode 100644
index 0000000..e8880a4
--- /dev/null
+++ b/source/addons/controller_icons/assets/disconnected.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b5j0idk4yjkkj"
+path="res://.godot/imported/disconnected.png-459773ea7f2a3f5eca9fe5104acb9105.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/disconnected.png"
+dest_files=["res://.godot/imported/disconnected.png-459773ea7f2a3f5eca9fe5104acb9105.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/source/addons/controller_icons/assets/key/0.png b/source/addons/controller_icons/assets/key/0.png
new file mode 100644
index 0000000..ab5408e
Binary files /dev/null and b/source/addons/controller_icons/assets/key/0.png differ
diff --git a/source/addons/controller_icons/assets/key/0.png.import b/source/addons/controller_icons/assets/key/0.png.import
new file mode 100644
index 0000000..bd635e3
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/0.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dhwug5n7wvn8b"
+path="res://.godot/imported/0.png-5e4ef89ebfb88cf2281fb8519eae8326.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/0.png"
+dest_files=["res://.godot/imported/0.png-5e4ef89ebfb88cf2281fb8519eae8326.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/source/addons/controller_icons/assets/key/1.png b/source/addons/controller_icons/assets/key/1.png
new file mode 100644
index 0000000..d88cfd0
Binary files /dev/null and b/source/addons/controller_icons/assets/key/1.png differ
diff --git a/source/addons/controller_icons/assets/key/1.png.import b/source/addons/controller_icons/assets/key/1.png.import
new file mode 100644
index 0000000..5297d70
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/1.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cyvt6g1pkcqfo"
+path="res://.godot/imported/1.png-5e93042ff4733b49c5848a419f211dc0.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/1.png"
+dest_files=["res://.godot/imported/1.png-5e93042ff4733b49c5848a419f211dc0.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/source/addons/controller_icons/assets/key/2.png b/source/addons/controller_icons/assets/key/2.png
new file mode 100644
index 0000000..257a0a8
Binary files /dev/null and b/source/addons/controller_icons/assets/key/2.png differ
diff --git a/source/addons/controller_icons/assets/key/2.png.import b/source/addons/controller_icons/assets/key/2.png.import
new file mode 100644
index 0000000..d323f75
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/2.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cp0j8cw8o6wvu"
+path="res://.godot/imported/2.png-cc45af4ba1a14d5c701d7eaf772cb60e.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/2.png"
+dest_files=["res://.godot/imported/2.png-cc45af4ba1a14d5c701d7eaf772cb60e.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/source/addons/controller_icons/assets/key/3.png b/source/addons/controller_icons/assets/key/3.png
new file mode 100644
index 0000000..37f01a2
Binary files /dev/null and b/source/addons/controller_icons/assets/key/3.png differ
diff --git a/source/addons/controller_icons/assets/key/3.png.import b/source/addons/controller_icons/assets/key/3.png.import
new file mode 100644
index 0000000..3828583
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/3.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://tljp3e67878n"
+path="res://.godot/imported/3.png-a28e3d1bcdb601b911e3d5e9aaaece29.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/3.png"
+dest_files=["res://.godot/imported/3.png-a28e3d1bcdb601b911e3d5e9aaaece29.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/source/addons/controller_icons/assets/key/4.png b/source/addons/controller_icons/assets/key/4.png
new file mode 100644
index 0000000..f2ec50e
Binary files /dev/null and b/source/addons/controller_icons/assets/key/4.png differ
diff --git a/source/addons/controller_icons/assets/key/4.png.import b/source/addons/controller_icons/assets/key/4.png.import
new file mode 100644
index 0000000..6385ace
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/4.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dvv0nf2te2dy8"
+path="res://.godot/imported/4.png-d6e77f4e27328a413d34506751d7e7d8.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/4.png"
+dest_files=["res://.godot/imported/4.png-d6e77f4e27328a413d34506751d7e7d8.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/source/addons/controller_icons/assets/key/5.png b/source/addons/controller_icons/assets/key/5.png
new file mode 100644
index 0000000..4996f90
Binary files /dev/null and b/source/addons/controller_icons/assets/key/5.png differ
diff --git a/source/addons/controller_icons/assets/key/5.png.import b/source/addons/controller_icons/assets/key/5.png.import
new file mode 100644
index 0000000..8312b63
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/5.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://co1b5kuqpipbi"
+path="res://.godot/imported/5.png-e3a211f712f0ba23f0383e633d91b292.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/5.png"
+dest_files=["res://.godot/imported/5.png-e3a211f712f0ba23f0383e633d91b292.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/source/addons/controller_icons/assets/key/6.png b/source/addons/controller_icons/assets/key/6.png
new file mode 100644
index 0000000..7ebf62d
Binary files /dev/null and b/source/addons/controller_icons/assets/key/6.png differ
diff --git a/source/addons/controller_icons/assets/key/6.png.import b/source/addons/controller_icons/assets/key/6.png.import
new file mode 100644
index 0000000..2d735c4
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/6.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b2mcylnx72rnc"
+path="res://.godot/imported/6.png-c94a4fdfe4780a6cd266a954fce863aa.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/6.png"
+dest_files=["res://.godot/imported/6.png-c94a4fdfe4780a6cd266a954fce863aa.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/source/addons/controller_icons/assets/key/7.png b/source/addons/controller_icons/assets/key/7.png
new file mode 100644
index 0000000..bae81b4
Binary files /dev/null and b/source/addons/controller_icons/assets/key/7.png differ
diff --git a/source/addons/controller_icons/assets/key/7.png.import b/source/addons/controller_icons/assets/key/7.png.import
new file mode 100644
index 0000000..96a595c
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/7.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://346orodxqrwr"
+path="res://.godot/imported/7.png-2aed855c8db8718bbf613d3fe15e397f.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/7.png"
+dest_files=["res://.godot/imported/7.png-2aed855c8db8718bbf613d3fe15e397f.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/source/addons/controller_icons/assets/key/8.png b/source/addons/controller_icons/assets/key/8.png
new file mode 100644
index 0000000..4cbf159
Binary files /dev/null and b/source/addons/controller_icons/assets/key/8.png differ
diff --git a/source/addons/controller_icons/assets/key/8.png.import b/source/addons/controller_icons/assets/key/8.png.import
new file mode 100644
index 0000000..bd50585
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/8.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bb0namehypd0v"
+path="res://.godot/imported/8.png-7347a4f63d0d4bf8e342c042e8a47b6a.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/8.png"
+dest_files=["res://.godot/imported/8.png-7347a4f63d0d4bf8e342c042e8a47b6a.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/source/addons/controller_icons/assets/key/9.png b/source/addons/controller_icons/assets/key/9.png
new file mode 100644
index 0000000..8da9b01
Binary files /dev/null and b/source/addons/controller_icons/assets/key/9.png differ
diff --git a/source/addons/controller_icons/assets/key/9.png.import b/source/addons/controller_icons/assets/key/9.png.import
new file mode 100644
index 0000000..0067677
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/9.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b7hs1r61dhf8f"
+path="res://.godot/imported/9.png-92a5ba8724ec75cb0650a7e43ee7de1a.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/9.png"
+dest_files=["res://.godot/imported/9.png-92a5ba8724ec75cb0650a7e43ee7de1a.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/source/addons/controller_icons/assets/key/a.png b/source/addons/controller_icons/assets/key/a.png
new file mode 100644
index 0000000..ba2b1dd
Binary files /dev/null and b/source/addons/controller_icons/assets/key/a.png differ
diff --git a/source/addons/controller_icons/assets/key/a.png.import b/source/addons/controller_icons/assets/key/a.png.import
new file mode 100644
index 0000000..aeea511
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/a.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bptg6u6b4y5no"
+path.s3tc="res://.godot/imported/a.png-02614b596e2702a221a87d93abcfaa61.s3tc.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc"],
+"vram_texture": true
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/a.png"
+dest_files=["res://.godot/imported/a.png-02614b596e2702a221a87d93abcfaa61.s3tc.ctex"]
+
+[params]
+
+compress/mode=2
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=true
+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=0
diff --git a/source/addons/controller_icons/assets/key/alt.png b/source/addons/controller_icons/assets/key/alt.png
new file mode 100644
index 0000000..9c0ceb6
Binary files /dev/null and b/source/addons/controller_icons/assets/key/alt.png differ
diff --git a/source/addons/controller_icons/assets/key/alt.png.import b/source/addons/controller_icons/assets/key/alt.png.import
new file mode 100644
index 0000000..fab08fa
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/alt.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cpld7e28w4q1e"
+path="res://.godot/imported/alt.png-2955b920d549ecae6d20f5b9d8b28316.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/alt.png"
+dest_files=["res://.godot/imported/alt.png-2955b920d549ecae6d20f5b9d8b28316.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/source/addons/controller_icons/assets/key/apostrophe.png b/source/addons/controller_icons/assets/key/apostrophe.png
new file mode 100644
index 0000000..0dc0827
Binary files /dev/null and b/source/addons/controller_icons/assets/key/apostrophe.png differ
diff --git a/source/addons/controller_icons/assets/key/apostrophe.png.import b/source/addons/controller_icons/assets/key/apostrophe.png.import
new file mode 100644
index 0000000..15e9370
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/apostrophe.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://8hets451bgxx"
+path="res://.godot/imported/apostrophe.png-8f8272980f0f51de5195fea6a914a748.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/apostrophe.png"
+dest_files=["res://.godot/imported/apostrophe.png-8f8272980f0f51de5195fea6a914a748.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/source/addons/controller_icons/assets/key/arrow_down.png b/source/addons/controller_icons/assets/key/arrow_down.png
new file mode 100644
index 0000000..9edcf58
Binary files /dev/null and b/source/addons/controller_icons/assets/key/arrow_down.png differ
diff --git a/source/addons/controller_icons/assets/key/arrow_down.png.import b/source/addons/controller_icons/assets/key/arrow_down.png.import
new file mode 100644
index 0000000..510f40e
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/arrow_down.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cge2w6yy0r2cx"
+path="res://.godot/imported/arrow_down.png-5893b4e3a78dea022e4220c8b377b562.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/arrow_down.png"
+dest_files=["res://.godot/imported/arrow_down.png-5893b4e3a78dea022e4220c8b377b562.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/source/addons/controller_icons/assets/key/arrow_left.png b/source/addons/controller_icons/assets/key/arrow_left.png
new file mode 100644
index 0000000..3425005
Binary files /dev/null and b/source/addons/controller_icons/assets/key/arrow_left.png differ
diff --git a/source/addons/controller_icons/assets/key/arrow_left.png.import b/source/addons/controller_icons/assets/key/arrow_left.png.import
new file mode 100644
index 0000000..9d80871
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/arrow_left.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://puc614rf26im"
+path="res://.godot/imported/arrow_left.png-47644a17d01cec89c19b183ed0ee3e4f.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/arrow_left.png"
+dest_files=["res://.godot/imported/arrow_left.png-47644a17d01cec89c19b183ed0ee3e4f.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/source/addons/controller_icons/assets/key/arrow_right.png b/source/addons/controller_icons/assets/key/arrow_right.png
new file mode 100644
index 0000000..929cb35
Binary files /dev/null and b/source/addons/controller_icons/assets/key/arrow_right.png differ
diff --git a/source/addons/controller_icons/assets/key/arrow_right.png.import b/source/addons/controller_icons/assets/key/arrow_right.png.import
new file mode 100644
index 0000000..cf80ddb
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/arrow_right.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bbjc54bmpv3f8"
+path="res://.godot/imported/arrow_right.png-d9645066e53f8382133c3d6066489082.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/arrow_right.png"
+dest_files=["res://.godot/imported/arrow_right.png-d9645066e53f8382133c3d6066489082.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=0
diff --git a/source/addons/controller_icons/assets/key/arrow_up.png b/source/addons/controller_icons/assets/key/arrow_up.png
new file mode 100644
index 0000000..025a68d
Binary files /dev/null and b/source/addons/controller_icons/assets/key/arrow_up.png differ
diff --git a/source/addons/controller_icons/assets/key/arrow_up.png.import b/source/addons/controller_icons/assets/key/arrow_up.png.import
new file mode 100644
index 0000000..8c7608c
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/arrow_up.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://d04bqc5v3befo"
+path="res://.godot/imported/arrow_up.png-332906f7ec320f7aacf747e92daffc49.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/arrow_up.png"
+dest_files=["res://.godot/imported/arrow_up.png-332906f7ec320f7aacf747e92daffc49.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/source/addons/controller_icons/assets/key/asterisk.png b/source/addons/controller_icons/assets/key/asterisk.png
new file mode 100644
index 0000000..abcdd9f
Binary files /dev/null and b/source/addons/controller_icons/assets/key/asterisk.png differ
diff --git a/source/addons/controller_icons/assets/key/asterisk.png.import b/source/addons/controller_icons/assets/key/asterisk.png.import
new file mode 100644
index 0000000..e0df8c5
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/asterisk.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://crg486276l0ie"
+path="res://.godot/imported/asterisk.png-f83bdb0b06735716dc152cef5ad1a65a.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/asterisk.png"
+dest_files=["res://.godot/imported/asterisk.png-f83bdb0b06735716dc152cef5ad1a65a.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/source/addons/controller_icons/assets/key/b.png b/source/addons/controller_icons/assets/key/b.png
new file mode 100644
index 0000000..bb6b3bb
Binary files /dev/null and b/source/addons/controller_icons/assets/key/b.png differ
diff --git a/source/addons/controller_icons/assets/key/b.png.import b/source/addons/controller_icons/assets/key/b.png.import
new file mode 100644
index 0000000..b9c66ef
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/b.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://canr2drixxw4k"
+path="res://.godot/imported/b.png-85e60076ce4df311fd6ce062c3953570.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/b.png"
+dest_files=["res://.godot/imported/b.png-85e60076ce4df311fd6ce062c3953570.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/source/addons/controller_icons/assets/key/backspace.png b/source/addons/controller_icons/assets/key/backspace.png
new file mode 100644
index 0000000..bd2b56d
Binary files /dev/null and b/source/addons/controller_icons/assets/key/backspace.png differ
diff --git a/source/addons/controller_icons/assets/key/backspace.png.import b/source/addons/controller_icons/assets/key/backspace.png.import
new file mode 100644
index 0000000..c6e28ef
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/backspace.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://fm4t6x1nefje"
+path="res://.godot/imported/backspace.png-ca81128ca83f7830c8e33092a92b27bf.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/backspace.png"
+dest_files=["res://.godot/imported/backspace.png-ca81128ca83f7830c8e33092a92b27bf.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/source/addons/controller_icons/assets/key/backspace_alt.png b/source/addons/controller_icons/assets/key/backspace_alt.png
new file mode 100644
index 0000000..be1a758
Binary files /dev/null and b/source/addons/controller_icons/assets/key/backspace_alt.png differ
diff --git a/source/addons/controller_icons/assets/key/backspace_alt.png.import b/source/addons/controller_icons/assets/key/backspace_alt.png.import
new file mode 100644
index 0000000..a480a7f
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/backspace_alt.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://rhv2hov7acmp"
+path="res://.godot/imported/backspace_alt.png-bc1abf5cd15987380ececb7b4192e96e.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/backspace_alt.png"
+dest_files=["res://.godot/imported/backspace_alt.png-bc1abf5cd15987380ececb7b4192e96e.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/source/addons/controller_icons/assets/key/backtick.png b/source/addons/controller_icons/assets/key/backtick.png
new file mode 100644
index 0000000..f656b50
Binary files /dev/null and b/source/addons/controller_icons/assets/key/backtick.png differ
diff --git a/source/addons/controller_icons/assets/key/backtick.png.import b/source/addons/controller_icons/assets/key/backtick.png.import
new file mode 100644
index 0000000..21411a1
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/backtick.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dlknwm7g0tm3s"
+path="res://.godot/imported/backtick.png-7eaa9a9989e965a67c1aedce73c9bf10.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/backtick.png"
+dest_files=["res://.godot/imported/backtick.png-7eaa9a9989e965a67c1aedce73c9bf10.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/source/addons/controller_icons/assets/key/bracket_left.png b/source/addons/controller_icons/assets/key/bracket_left.png
new file mode 100644
index 0000000..8734b86
Binary files /dev/null and b/source/addons/controller_icons/assets/key/bracket_left.png differ
diff --git a/source/addons/controller_icons/assets/key/bracket_left.png.import b/source/addons/controller_icons/assets/key/bracket_left.png.import
new file mode 100644
index 0000000..ab69739
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/bracket_left.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cnk0mxv25m1bg"
+path="res://.godot/imported/bracket_left.png-578afec4dd6c472e6a94a57c46997f4d.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/bracket_left.png"
+dest_files=["res://.godot/imported/bracket_left.png-578afec4dd6c472e6a94a57c46997f4d.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/source/addons/controller_icons/assets/key/bracket_right.png b/source/addons/controller_icons/assets/key/bracket_right.png
new file mode 100644
index 0000000..c56aef4
Binary files /dev/null and b/source/addons/controller_icons/assets/key/bracket_right.png differ
diff --git a/source/addons/controller_icons/assets/key/bracket_right.png.import b/source/addons/controller_icons/assets/key/bracket_right.png.import
new file mode 100644
index 0000000..e0468d1
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/bracket_right.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cg2bqitp08keh"
+path="res://.godot/imported/bracket_right.png-ba5f88773753e95ae7dc9570a2aff676.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/bracket_right.png"
+dest_files=["res://.godot/imported/bracket_right.png-ba5f88773753e95ae7dc9570a2aff676.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/source/addons/controller_icons/assets/key/c.png b/source/addons/controller_icons/assets/key/c.png
new file mode 100644
index 0000000..005e4ca
Binary files /dev/null and b/source/addons/controller_icons/assets/key/c.png differ
diff --git a/source/addons/controller_icons/assets/key/c.png.import b/source/addons/controller_icons/assets/key/c.png.import
new file mode 100644
index 0000000..7bdd02b
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/c.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dvki5kbcq7qow"
+path="res://.godot/imported/c.png-60bc13862a491d6dad69b4db7006689e.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/c.png"
+dest_files=["res://.godot/imported/c.png-60bc13862a491d6dad69b4db7006689e.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/source/addons/controller_icons/assets/key/caps_lock.png b/source/addons/controller_icons/assets/key/caps_lock.png
new file mode 100644
index 0000000..de5adb8
Binary files /dev/null and b/source/addons/controller_icons/assets/key/caps_lock.png differ
diff --git a/source/addons/controller_icons/assets/key/caps_lock.png.import b/source/addons/controller_icons/assets/key/caps_lock.png.import
new file mode 100644
index 0000000..91cb28d
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/caps_lock.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bmu1dyma2ia1w"
+path="res://.godot/imported/caps_lock.png-68be22558ed98886d7f0c42175a4f042.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/caps_lock.png"
+dest_files=["res://.godot/imported/caps_lock.png-68be22558ed98886d7f0c42175a4f042.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/source/addons/controller_icons/assets/key/comma.png b/source/addons/controller_icons/assets/key/comma.png
new file mode 100644
index 0000000..18be905
Binary files /dev/null and b/source/addons/controller_icons/assets/key/comma.png differ
diff --git a/source/addons/controller_icons/assets/key/comma.png.import b/source/addons/controller_icons/assets/key/comma.png.import
new file mode 100644
index 0000000..dcd082e
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/comma.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cvdspc7muffjb"
+path="res://.godot/imported/comma.png-c6a5b4ddb60c3aa4cfc77e26999940ed.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/comma.png"
+dest_files=["res://.godot/imported/comma.png-c6a5b4ddb60c3aa4cfc77e26999940ed.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/source/addons/controller_icons/assets/key/command.png b/source/addons/controller_icons/assets/key/command.png
new file mode 100644
index 0000000..22dfd60
Binary files /dev/null and b/source/addons/controller_icons/assets/key/command.png differ
diff --git a/source/addons/controller_icons/assets/key/command.png.import b/source/addons/controller_icons/assets/key/command.png.import
new file mode 100644
index 0000000..9271825
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/command.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c75c1nu5vft30"
+path="res://.godot/imported/command.png-64157e5f681303ae47d5fdbb6501706d.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/command.png"
+dest_files=["res://.godot/imported/command.png-64157e5f681303ae47d5fdbb6501706d.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/source/addons/controller_icons/assets/key/ctrl.png b/source/addons/controller_icons/assets/key/ctrl.png
new file mode 100644
index 0000000..12456bd
Binary files /dev/null and b/source/addons/controller_icons/assets/key/ctrl.png differ
diff --git a/source/addons/controller_icons/assets/key/ctrl.png.import b/source/addons/controller_icons/assets/key/ctrl.png.import
new file mode 100644
index 0000000..b1e154b
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/ctrl.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dxcfr4bhfw4lq"
+path="res://.godot/imported/ctrl.png-482169e05fd7989d866aa04e18ed3455.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/ctrl.png"
+dest_files=["res://.godot/imported/ctrl.png-482169e05fd7989d866aa04e18ed3455.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/source/addons/controller_icons/assets/key/d.png b/source/addons/controller_icons/assets/key/d.png
new file mode 100644
index 0000000..cfd36f2
Binary files /dev/null and b/source/addons/controller_icons/assets/key/d.png differ
diff --git a/source/addons/controller_icons/assets/key/d.png.import b/source/addons/controller_icons/assets/key/d.png.import
new file mode 100644
index 0000000..701b533
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/d.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dlwamiuq1f5t6"
+path.s3tc="res://.godot/imported/d.png-b7721e67decc380fd57e07ee56e53953.s3tc.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc"],
+"vram_texture": true
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/d.png"
+dest_files=["res://.godot/imported/d.png-b7721e67decc380fd57e07ee56e53953.s3tc.ctex"]
+
+[params]
+
+compress/mode=2
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=true
+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=0
diff --git a/source/addons/controller_icons/assets/key/del.png b/source/addons/controller_icons/assets/key/del.png
new file mode 100644
index 0000000..87bd830
Binary files /dev/null and b/source/addons/controller_icons/assets/key/del.png differ
diff --git a/source/addons/controller_icons/assets/key/del.png.import b/source/addons/controller_icons/assets/key/del.png.import
new file mode 100644
index 0000000..76b052c
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/del.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dp71lwv4vjptf"
+path="res://.godot/imported/del.png-8ab1be2a4136e8f1ae7ec54f3a75f012.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/del.png"
+dest_files=["res://.godot/imported/del.png-8ab1be2a4136e8f1ae7ec54f3a75f012.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/source/addons/controller_icons/assets/key/e.png b/source/addons/controller_icons/assets/key/e.png
new file mode 100644
index 0000000..34b7be1
Binary files /dev/null and b/source/addons/controller_icons/assets/key/e.png differ
diff --git a/source/addons/controller_icons/assets/key/e.png.import b/source/addons/controller_icons/assets/key/e.png.import
new file mode 100644
index 0000000..1dea985
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/e.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://xe4n818le3p8"
+path="res://.godot/imported/e.png-7ec0ba2ffb631b8cc6de42153f818779.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/e.png"
+dest_files=["res://.godot/imported/e.png-7ec0ba2ffb631b8cc6de42153f818779.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/source/addons/controller_icons/assets/key/end.png b/source/addons/controller_icons/assets/key/end.png
new file mode 100644
index 0000000..2d6211c
Binary files /dev/null and b/source/addons/controller_icons/assets/key/end.png differ
diff --git a/source/addons/controller_icons/assets/key/end.png.import b/source/addons/controller_icons/assets/key/end.png.import
new file mode 100644
index 0000000..4fd32bf
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/end.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dd57lxd8nftr4"
+path="res://.godot/imported/end.png-19998f1c73319c0913db009ea41299f1.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/end.png"
+dest_files=["res://.godot/imported/end.png-19998f1c73319c0913db009ea41299f1.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/source/addons/controller_icons/assets/key/enter.png b/source/addons/controller_icons/assets/key/enter.png
new file mode 100644
index 0000000..1f144f5
Binary files /dev/null and b/source/addons/controller_icons/assets/key/enter.png differ
diff --git a/source/addons/controller_icons/assets/key/enter.png.import b/source/addons/controller_icons/assets/key/enter.png.import
new file mode 100644
index 0000000..bceca38
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/enter.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dtgju2qbvxhqp"
+path="res://.godot/imported/enter.png-d374047b990a0250a56e873b383a8b15.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/enter.png"
+dest_files=["res://.godot/imported/enter.png-d374047b990a0250a56e873b383a8b15.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/source/addons/controller_icons/assets/key/enter_alt.png b/source/addons/controller_icons/assets/key/enter_alt.png
new file mode 100644
index 0000000..5493293
Binary files /dev/null and b/source/addons/controller_icons/assets/key/enter_alt.png differ
diff --git a/source/addons/controller_icons/assets/key/enter_alt.png.import b/source/addons/controller_icons/assets/key/enter_alt.png.import
new file mode 100644
index 0000000..1e0bf50
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/enter_alt.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bp58drjdgvxsi"
+path="res://.godot/imported/enter_alt.png-15ea435f9aa8699e8752649d5707d3f9.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/enter_alt.png"
+dest_files=["res://.godot/imported/enter_alt.png-15ea435f9aa8699e8752649d5707d3f9.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/source/addons/controller_icons/assets/key/enter_tall.png b/source/addons/controller_icons/assets/key/enter_tall.png
new file mode 100644
index 0000000..de3abde
Binary files /dev/null and b/source/addons/controller_icons/assets/key/enter_tall.png differ
diff --git a/source/addons/controller_icons/assets/key/enter_tall.png.import b/source/addons/controller_icons/assets/key/enter_tall.png.import
new file mode 100644
index 0000000..9f06782
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/enter_tall.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c5bw0xq3n6elx"
+path="res://.godot/imported/enter_tall.png-9ea4821e424a6eb74b209466a47a0362.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/enter_tall.png"
+dest_files=["res://.godot/imported/enter_tall.png-9ea4821e424a6eb74b209466a47a0362.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/source/addons/controller_icons/assets/key/equals.png b/source/addons/controller_icons/assets/key/equals.png
new file mode 100644
index 0000000..5e9ed38
Binary files /dev/null and b/source/addons/controller_icons/assets/key/equals.png differ
diff --git a/source/addons/controller_icons/assets/key/equals.png.import b/source/addons/controller_icons/assets/key/equals.png.import
new file mode 100644
index 0000000..529e476
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/equals.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://mkessp4iud6i"
+path="res://.godot/imported/equals.png-a0481e5eb9f7e8a2bd77af0d53ce5458.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/equals.png"
+dest_files=["res://.godot/imported/equals.png-a0481e5eb9f7e8a2bd77af0d53ce5458.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/source/addons/controller_icons/assets/key/esc.png b/source/addons/controller_icons/assets/key/esc.png
new file mode 100644
index 0000000..c363cdc
Binary files /dev/null and b/source/addons/controller_icons/assets/key/esc.png differ
diff --git a/source/addons/controller_icons/assets/key/esc.png.import b/source/addons/controller_icons/assets/key/esc.png.import
new file mode 100644
index 0000000..b107dfd
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/esc.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cnghdqiitl0fu"
+path="res://.godot/imported/esc.png-4b899d8648d525a54c45ed98a86ba3b4.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/esc.png"
+dest_files=["res://.godot/imported/esc.png-4b899d8648d525a54c45ed98a86ba3b4.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/source/addons/controller_icons/assets/key/f.png b/source/addons/controller_icons/assets/key/f.png
new file mode 100644
index 0000000..0781a72
Binary files /dev/null and b/source/addons/controller_icons/assets/key/f.png differ
diff --git a/source/addons/controller_icons/assets/key/f.png.import b/source/addons/controller_icons/assets/key/f.png.import
new file mode 100644
index 0000000..0201408
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/f.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://broeuieppu0ni"
+path="res://.godot/imported/f.png-4d9e36eeb537558291e4f3b623effc03.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/f.png"
+dest_files=["res://.godot/imported/f.png-4d9e36eeb537558291e4f3b623effc03.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/source/addons/controller_icons/assets/key/f1.png b/source/addons/controller_icons/assets/key/f1.png
new file mode 100644
index 0000000..fc5865a
Binary files /dev/null and b/source/addons/controller_icons/assets/key/f1.png differ
diff --git a/source/addons/controller_icons/assets/key/f1.png.import b/source/addons/controller_icons/assets/key/f1.png.import
new file mode 100644
index 0000000..277c118
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/f1.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b8no45t86rrn6"
+path="res://.godot/imported/f1.png-8f613f4af184fa81387a386622247ed5.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/f1.png"
+dest_files=["res://.godot/imported/f1.png-8f613f4af184fa81387a386622247ed5.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/source/addons/controller_icons/assets/key/f10.png b/source/addons/controller_icons/assets/key/f10.png
new file mode 100644
index 0000000..17339fe
Binary files /dev/null and b/source/addons/controller_icons/assets/key/f10.png differ
diff --git a/source/addons/controller_icons/assets/key/f10.png.import b/source/addons/controller_icons/assets/key/f10.png.import
new file mode 100644
index 0000000..4554707
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/f10.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b76mxxjlj888w"
+path="res://.godot/imported/f10.png-b1122098f3284856b04da935979c6ee0.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/f10.png"
+dest_files=["res://.godot/imported/f10.png-b1122098f3284856b04da935979c6ee0.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/source/addons/controller_icons/assets/key/f11.png b/source/addons/controller_icons/assets/key/f11.png
new file mode 100644
index 0000000..18001d0
Binary files /dev/null and b/source/addons/controller_icons/assets/key/f11.png differ
diff --git a/source/addons/controller_icons/assets/key/f11.png.import b/source/addons/controller_icons/assets/key/f11.png.import
new file mode 100644
index 0000000..3122c06
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/f11.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://ddrasm5hfo84n"
+path="res://.godot/imported/f11.png-4f8e9e1e7a5b11b030ecefea00294062.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/f11.png"
+dest_files=["res://.godot/imported/f11.png-4f8e9e1e7a5b11b030ecefea00294062.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/source/addons/controller_icons/assets/key/f12.png b/source/addons/controller_icons/assets/key/f12.png
new file mode 100644
index 0000000..a18bb74
Binary files /dev/null and b/source/addons/controller_icons/assets/key/f12.png differ
diff --git a/source/addons/controller_icons/assets/key/f12.png.import b/source/addons/controller_icons/assets/key/f12.png.import
new file mode 100644
index 0000000..803e211
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/f12.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://x4212bmj350w"
+path="res://.godot/imported/f12.png-bcb2c9ea989874bc6203645641457c2a.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/f12.png"
+dest_files=["res://.godot/imported/f12.png-bcb2c9ea989874bc6203645641457c2a.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/source/addons/controller_icons/assets/key/f2.png b/source/addons/controller_icons/assets/key/f2.png
new file mode 100644
index 0000000..ffceae5
Binary files /dev/null and b/source/addons/controller_icons/assets/key/f2.png differ
diff --git a/source/addons/controller_icons/assets/key/f2.png.import b/source/addons/controller_icons/assets/key/f2.png.import
new file mode 100644
index 0000000..cb062a7
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/f2.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cebpb6c42ooem"
+path="res://.godot/imported/f2.png-853f8d196971146dfe734d15d6a82681.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/f2.png"
+dest_files=["res://.godot/imported/f2.png-853f8d196971146dfe734d15d6a82681.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/source/addons/controller_icons/assets/key/f3.png b/source/addons/controller_icons/assets/key/f3.png
new file mode 100644
index 0000000..c49d840
Binary files /dev/null and b/source/addons/controller_icons/assets/key/f3.png differ
diff --git a/source/addons/controller_icons/assets/key/f3.png.import b/source/addons/controller_icons/assets/key/f3.png.import
new file mode 100644
index 0000000..3a55f33
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/f3.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://utdnqoybksrx"
+path="res://.godot/imported/f3.png-affa1c0616438ee1071023d1606aafe9.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/f3.png"
+dest_files=["res://.godot/imported/f3.png-affa1c0616438ee1071023d1606aafe9.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/source/addons/controller_icons/assets/key/f4.png b/source/addons/controller_icons/assets/key/f4.png
new file mode 100644
index 0000000..c09acb2
Binary files /dev/null and b/source/addons/controller_icons/assets/key/f4.png differ
diff --git a/source/addons/controller_icons/assets/key/f4.png.import b/source/addons/controller_icons/assets/key/f4.png.import
new file mode 100644
index 0000000..7437e58
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/f4.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://buv6pfavbw8ev"
+path="res://.godot/imported/f4.png-59ce134d8791cdbcd742e6d39d376ba1.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/f4.png"
+dest_files=["res://.godot/imported/f4.png-59ce134d8791cdbcd742e6d39d376ba1.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/source/addons/controller_icons/assets/key/f5.png b/source/addons/controller_icons/assets/key/f5.png
new file mode 100644
index 0000000..c304fd0
Binary files /dev/null and b/source/addons/controller_icons/assets/key/f5.png differ
diff --git a/source/addons/controller_icons/assets/key/f5.png.import b/source/addons/controller_icons/assets/key/f5.png.import
new file mode 100644
index 0000000..dbea031
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/f5.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c4sj5uyseavix"
+path="res://.godot/imported/f5.png-8883dd1dee9b3466e722aa195bfbde96.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/f5.png"
+dest_files=["res://.godot/imported/f5.png-8883dd1dee9b3466e722aa195bfbde96.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/source/addons/controller_icons/assets/key/f6.png b/source/addons/controller_icons/assets/key/f6.png
new file mode 100644
index 0000000..bc3f31c
Binary files /dev/null and b/source/addons/controller_icons/assets/key/f6.png differ
diff --git a/source/addons/controller_icons/assets/key/f6.png.import b/source/addons/controller_icons/assets/key/f6.png.import
new file mode 100644
index 0000000..a6a023f
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/f6.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://des6ow7uojf1t"
+path="res://.godot/imported/f6.png-8151a1ab4564149919426cd89b55aef6.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/f6.png"
+dest_files=["res://.godot/imported/f6.png-8151a1ab4564149919426cd89b55aef6.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/source/addons/controller_icons/assets/key/f7.png b/source/addons/controller_icons/assets/key/f7.png
new file mode 100644
index 0000000..2c28dc0
Binary files /dev/null and b/source/addons/controller_icons/assets/key/f7.png differ
diff --git a/source/addons/controller_icons/assets/key/f7.png.import b/source/addons/controller_icons/assets/key/f7.png.import
new file mode 100644
index 0000000..9599b2d
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/f7.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dvrmkpuh2nx0m"
+path="res://.godot/imported/f7.png-03adff059dfd886a088628e7d7209813.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/f7.png"
+dest_files=["res://.godot/imported/f7.png-03adff059dfd886a088628e7d7209813.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/source/addons/controller_icons/assets/key/f8.png b/source/addons/controller_icons/assets/key/f8.png
new file mode 100644
index 0000000..6c09529
Binary files /dev/null and b/source/addons/controller_icons/assets/key/f8.png differ
diff --git a/source/addons/controller_icons/assets/key/f8.png.import b/source/addons/controller_icons/assets/key/f8.png.import
new file mode 100644
index 0000000..b29682c
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/f8.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://32dhrb00iift"
+path="res://.godot/imported/f8.png-563ec719a0666065208473a70115781f.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/f8.png"
+dest_files=["res://.godot/imported/f8.png-563ec719a0666065208473a70115781f.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/source/addons/controller_icons/assets/key/f9.png b/source/addons/controller_icons/assets/key/f9.png
new file mode 100644
index 0000000..0b67e2b
Binary files /dev/null and b/source/addons/controller_icons/assets/key/f9.png differ
diff --git a/source/addons/controller_icons/assets/key/f9.png.import b/source/addons/controller_icons/assets/key/f9.png.import
new file mode 100644
index 0000000..c07e6ed
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/f9.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://csk17ja7f6bm0"
+path="res://.godot/imported/f9.png-943e76712f8473b1183d5a8d345f1913.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/f9.png"
+dest_files=["res://.godot/imported/f9.png-943e76712f8473b1183d5a8d345f1913.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/source/addons/controller_icons/assets/key/forward_slash.png b/source/addons/controller_icons/assets/key/forward_slash.png
new file mode 100644
index 0000000..3e7d6fb
Binary files /dev/null and b/source/addons/controller_icons/assets/key/forward_slash.png differ
diff --git a/source/addons/controller_icons/assets/key/forward_slash.png.import b/source/addons/controller_icons/assets/key/forward_slash.png.import
new file mode 100644
index 0000000..ce44128
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/forward_slash.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://d31fqst2pxdni"
+path="res://.godot/imported/forward_slash.png-bdc3946991216f01ca3e8ccb138c731b.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/forward_slash.png"
+dest_files=["res://.godot/imported/forward_slash.png-bdc3946991216f01ca3e8ccb138c731b.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/source/addons/controller_icons/assets/key/g.png b/source/addons/controller_icons/assets/key/g.png
new file mode 100644
index 0000000..79ffcd2
Binary files /dev/null and b/source/addons/controller_icons/assets/key/g.png differ
diff --git a/source/addons/controller_icons/assets/key/g.png.import b/source/addons/controller_icons/assets/key/g.png.import
new file mode 100644
index 0000000..8f56196
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/g.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://xlplkwxxoohb"
+path="res://.godot/imported/g.png-14572568f63a7b23681641a02c662d04.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/g.png"
+dest_files=["res://.godot/imported/g.png-14572568f63a7b23681641a02c662d04.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/source/addons/controller_icons/assets/key/h.png b/source/addons/controller_icons/assets/key/h.png
new file mode 100644
index 0000000..00a4fe4
Binary files /dev/null and b/source/addons/controller_icons/assets/key/h.png differ
diff --git a/source/addons/controller_icons/assets/key/h.png.import b/source/addons/controller_icons/assets/key/h.png.import
new file mode 100644
index 0000000..565434f
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/h.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://d3q6bvxmx7d2y"
+path="res://.godot/imported/h.png-cbfda01b136945b4d87b24e91d9912d6.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/h.png"
+dest_files=["res://.godot/imported/h.png-cbfda01b136945b4d87b24e91d9912d6.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/source/addons/controller_icons/assets/key/home.png b/source/addons/controller_icons/assets/key/home.png
new file mode 100644
index 0000000..10ba170
Binary files /dev/null and b/source/addons/controller_icons/assets/key/home.png differ
diff --git a/source/addons/controller_icons/assets/key/home.png.import b/source/addons/controller_icons/assets/key/home.png.import
new file mode 100644
index 0000000..5cd12e3
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/home.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bs3duwxywhkf4"
+path="res://.godot/imported/home.png-f1a63dcfd71b977a2003e8d0d2c3ba4d.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/home.png"
+dest_files=["res://.godot/imported/home.png-f1a63dcfd71b977a2003e8d0d2c3ba4d.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/source/addons/controller_icons/assets/key/i.png b/source/addons/controller_icons/assets/key/i.png
new file mode 100644
index 0000000..de8f252
Binary files /dev/null and b/source/addons/controller_icons/assets/key/i.png differ
diff --git a/source/addons/controller_icons/assets/key/i.png.import b/source/addons/controller_icons/assets/key/i.png.import
new file mode 100644
index 0000000..846d8ab
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/i.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cqd0jlt3rtk1"
+path="res://.godot/imported/i.png-7ea3745b1b8fbcbe2692879f2fe4be85.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/i.png"
+dest_files=["res://.godot/imported/i.png-7ea3745b1b8fbcbe2692879f2fe4be85.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/source/addons/controller_icons/assets/key/insert.png b/source/addons/controller_icons/assets/key/insert.png
new file mode 100644
index 0000000..d0ae4d5
Binary files /dev/null and b/source/addons/controller_icons/assets/key/insert.png differ
diff --git a/source/addons/controller_icons/assets/key/insert.png.import b/source/addons/controller_icons/assets/key/insert.png.import
new file mode 100644
index 0000000..d7435b3
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/insert.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://rsb32fggq73q"
+path="res://.godot/imported/insert.png-c636ec6f7ebb7021fe33df113831b3af.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/insert.png"
+dest_files=["res://.godot/imported/insert.png-c636ec6f7ebb7021fe33df113831b3af.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/source/addons/controller_icons/assets/key/j.png b/source/addons/controller_icons/assets/key/j.png
new file mode 100644
index 0000000..947b5eb
Binary files /dev/null and b/source/addons/controller_icons/assets/key/j.png differ
diff --git a/source/addons/controller_icons/assets/key/j.png.import b/source/addons/controller_icons/assets/key/j.png.import
new file mode 100644
index 0000000..b34d5cc
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/j.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://btxmq4pjv74u2"
+path="res://.godot/imported/j.png-78fde95f9bb9cd69a6d1e8138358ce33.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/j.png"
+dest_files=["res://.godot/imported/j.png-78fde95f9bb9cd69a6d1e8138358ce33.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/source/addons/controller_icons/assets/key/k.png b/source/addons/controller_icons/assets/key/k.png
new file mode 100644
index 0000000..2ca24bd
Binary files /dev/null and b/source/addons/controller_icons/assets/key/k.png differ
diff --git a/source/addons/controller_icons/assets/key/k.png.import b/source/addons/controller_icons/assets/key/k.png.import
new file mode 100644
index 0000000..2c92188
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/k.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bwrnqsbonca4k"
+path="res://.godot/imported/k.png-bfe3441a49bc1e9efad9a20088127d99.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/k.png"
+dest_files=["res://.godot/imported/k.png-bfe3441a49bc1e9efad9a20088127d99.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/source/addons/controller_icons/assets/key/l.png b/source/addons/controller_icons/assets/key/l.png
new file mode 100644
index 0000000..725c878
Binary files /dev/null and b/source/addons/controller_icons/assets/key/l.png differ
diff --git a/source/addons/controller_icons/assets/key/l.png.import b/source/addons/controller_icons/assets/key/l.png.import
new file mode 100644
index 0000000..2cff56d
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/l.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://br8kxbo504vtr"
+path="res://.godot/imported/l.png-e5c72a0134479c7f082bb92ed54e319c.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/l.png"
+dest_files=["res://.godot/imported/l.png-e5c72a0134479c7f082bb92ed54e319c.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/source/addons/controller_icons/assets/key/m.png b/source/addons/controller_icons/assets/key/m.png
new file mode 100644
index 0000000..4477153
Binary files /dev/null and b/source/addons/controller_icons/assets/key/m.png differ
diff --git a/source/addons/controller_icons/assets/key/m.png.import b/source/addons/controller_icons/assets/key/m.png.import
new file mode 100644
index 0000000..73d49b4
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/m.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://w0ybnkclhpu5"
+path="res://.godot/imported/m.png-87b633c83926fbc3c83ab6d55dda9b7c.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/m.png"
+dest_files=["res://.godot/imported/m.png-87b633c83926fbc3c83ab6d55dda9b7c.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/source/addons/controller_icons/assets/key/mark_left.png b/source/addons/controller_icons/assets/key/mark_left.png
new file mode 100644
index 0000000..a5e48ce
Binary files /dev/null and b/source/addons/controller_icons/assets/key/mark_left.png differ
diff --git a/source/addons/controller_icons/assets/key/mark_left.png.import b/source/addons/controller_icons/assets/key/mark_left.png.import
new file mode 100644
index 0000000..c6d8f89
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/mark_left.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://de3wkpkd80oiq"
+path="res://.godot/imported/mark_left.png-26150e1291ba06a3d79018bd042eae02.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/mark_left.png"
+dest_files=["res://.godot/imported/mark_left.png-26150e1291ba06a3d79018bd042eae02.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/source/addons/controller_icons/assets/key/mark_right.png b/source/addons/controller_icons/assets/key/mark_right.png
new file mode 100644
index 0000000..d418e77
Binary files /dev/null and b/source/addons/controller_icons/assets/key/mark_right.png differ
diff --git a/source/addons/controller_icons/assets/key/mark_right.png.import b/source/addons/controller_icons/assets/key/mark_right.png.import
new file mode 100644
index 0000000..54c6a26
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/mark_right.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cs8g8q67x4f6e"
+path="res://.godot/imported/mark_right.png-af2191a926d5a5d9ee64916803ae839e.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/mark_right.png"
+dest_files=["res://.godot/imported/mark_right.png-af2191a926d5a5d9ee64916803ae839e.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/source/addons/controller_icons/assets/key/minus.png b/source/addons/controller_icons/assets/key/minus.png
new file mode 100644
index 0000000..1e6dcf7
Binary files /dev/null and b/source/addons/controller_icons/assets/key/minus.png differ
diff --git a/source/addons/controller_icons/assets/key/minus.png.import b/source/addons/controller_icons/assets/key/minus.png.import
new file mode 100644
index 0000000..80872f0
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/minus.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c8m15mffx0x8y"
+path="res://.godot/imported/minus.png-e9b3cb97f54fc23d867874d64c5aebe3.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/minus.png"
+dest_files=["res://.godot/imported/minus.png-e9b3cb97f54fc23d867874d64c5aebe3.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/source/addons/controller_icons/assets/key/n.png b/source/addons/controller_icons/assets/key/n.png
new file mode 100644
index 0000000..689e2f6
Binary files /dev/null and b/source/addons/controller_icons/assets/key/n.png differ
diff --git a/source/addons/controller_icons/assets/key/n.png.import b/source/addons/controller_icons/assets/key/n.png.import
new file mode 100644
index 0000000..3964b91
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/n.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://qm08rt7v0jmi"
+path="res://.godot/imported/n.png-2b143bdd3bfea413b560d4f610f909c9.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/n.png"
+dest_files=["res://.godot/imported/n.png-2b143bdd3bfea413b560d4f610f909c9.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/source/addons/controller_icons/assets/key/num_lock.png b/source/addons/controller_icons/assets/key/num_lock.png
new file mode 100644
index 0000000..2808f91
Binary files /dev/null and b/source/addons/controller_icons/assets/key/num_lock.png differ
diff --git a/source/addons/controller_icons/assets/key/num_lock.png.import b/source/addons/controller_icons/assets/key/num_lock.png.import
new file mode 100644
index 0000000..f0186f0
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/num_lock.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bap23yu4qfl3y"
+path="res://.godot/imported/num_lock.png-e2af79f4edd04e9ecf785f370befb814.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/num_lock.png"
+dest_files=["res://.godot/imported/num_lock.png-e2af79f4edd04e9ecf785f370befb814.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/source/addons/controller_icons/assets/key/o.png b/source/addons/controller_icons/assets/key/o.png
new file mode 100644
index 0000000..b703ceb
Binary files /dev/null and b/source/addons/controller_icons/assets/key/o.png differ
diff --git a/source/addons/controller_icons/assets/key/o.png.import b/source/addons/controller_icons/assets/key/o.png.import
new file mode 100644
index 0000000..1a2aab5
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/o.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://ra467stypt61"
+path="res://.godot/imported/o.png-ebca633629770ba1e7a8ef37bcc47d6e.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/o.png"
+dest_files=["res://.godot/imported/o.png-ebca633629770ba1e7a8ef37bcc47d6e.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/source/addons/controller_icons/assets/key/p.png b/source/addons/controller_icons/assets/key/p.png
new file mode 100644
index 0000000..13e8393
Binary files /dev/null and b/source/addons/controller_icons/assets/key/p.png differ
diff --git a/source/addons/controller_icons/assets/key/p.png.import b/source/addons/controller_icons/assets/key/p.png.import
new file mode 100644
index 0000000..4ab91ac
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/p.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c8t6nj5nejist"
+path="res://.godot/imported/p.png-fe6d5088b82cf26ee9105323c97e8ec0.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/p.png"
+dest_files=["res://.godot/imported/p.png-fe6d5088b82cf26ee9105323c97e8ec0.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/source/addons/controller_icons/assets/key/page_down.png b/source/addons/controller_icons/assets/key/page_down.png
new file mode 100644
index 0000000..ace123f
Binary files /dev/null and b/source/addons/controller_icons/assets/key/page_down.png differ
diff --git a/source/addons/controller_icons/assets/key/page_down.png.import b/source/addons/controller_icons/assets/key/page_down.png.import
new file mode 100644
index 0000000..88e845d
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/page_down.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://botm3vxwit80t"
+path="res://.godot/imported/page_down.png-cf932ce22919c18cd1203d44da339505.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/page_down.png"
+dest_files=["res://.godot/imported/page_down.png-cf932ce22919c18cd1203d44da339505.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/source/addons/controller_icons/assets/key/page_up.png b/source/addons/controller_icons/assets/key/page_up.png
new file mode 100644
index 0000000..da15112
Binary files /dev/null and b/source/addons/controller_icons/assets/key/page_up.png differ
diff --git a/source/addons/controller_icons/assets/key/page_up.png.import b/source/addons/controller_icons/assets/key/page_up.png.import
new file mode 100644
index 0000000..b96c65d
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/page_up.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cj2ilh60ajvub"
+path="res://.godot/imported/page_up.png-24127511132eb2a47c0eda7f032beade.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/page_up.png"
+dest_files=["res://.godot/imported/page_up.png-24127511132eb2a47c0eda7f032beade.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/source/addons/controller_icons/assets/key/period.png b/source/addons/controller_icons/assets/key/period.png
new file mode 100644
index 0000000..d3e69fa
Binary files /dev/null and b/source/addons/controller_icons/assets/key/period.png differ
diff --git a/source/addons/controller_icons/assets/key/period.png.import b/source/addons/controller_icons/assets/key/period.png.import
new file mode 100644
index 0000000..69ea92d
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/period.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cf4h5grqhfkd8"
+path="res://.godot/imported/period.png-a4d8f2843696679bb3e87882c95b0d90.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/period.png"
+dest_files=["res://.godot/imported/period.png-a4d8f2843696679bb3e87882c95b0d90.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/source/addons/controller_icons/assets/key/plus.png b/source/addons/controller_icons/assets/key/plus.png
new file mode 100644
index 0000000..ebc1035
Binary files /dev/null and b/source/addons/controller_icons/assets/key/plus.png differ
diff --git a/source/addons/controller_icons/assets/key/plus.png.import b/source/addons/controller_icons/assets/key/plus.png.import
new file mode 100644
index 0000000..c8542dd
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/plus.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bxaaydvnqqa8f"
+path="res://.godot/imported/plus.png-af02dd6f0e49f31f9b9ba7915608f44c.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/plus.png"
+dest_files=["res://.godot/imported/plus.png-af02dd6f0e49f31f9b9ba7915608f44c.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/source/addons/controller_icons/assets/key/plus_tall.png b/source/addons/controller_icons/assets/key/plus_tall.png
new file mode 100644
index 0000000..3049116
Binary files /dev/null and b/source/addons/controller_icons/assets/key/plus_tall.png differ
diff --git a/source/addons/controller_icons/assets/key/plus_tall.png.import b/source/addons/controller_icons/assets/key/plus_tall.png.import
new file mode 100644
index 0000000..30e7d2f
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/plus_tall.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b26nqf60p0su0"
+path="res://.godot/imported/plus_tall.png-6963791cb2dd22492727106e4908d21c.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/plus_tall.png"
+dest_files=["res://.godot/imported/plus_tall.png-6963791cb2dd22492727106e4908d21c.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/source/addons/controller_icons/assets/key/print_screen.png b/source/addons/controller_icons/assets/key/print_screen.png
new file mode 100644
index 0000000..88ad617
Binary files /dev/null and b/source/addons/controller_icons/assets/key/print_screen.png differ
diff --git a/source/addons/controller_icons/assets/key/print_screen.png.import b/source/addons/controller_icons/assets/key/print_screen.png.import
new file mode 100644
index 0000000..520fdc9
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/print_screen.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://evou4c7efg2q"
+path="res://.godot/imported/print_screen.png-a5f3288be910635fd592c6f24c4f0a0f.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/print_screen.png"
+dest_files=["res://.godot/imported/print_screen.png-a5f3288be910635fd592c6f24c4f0a0f.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/source/addons/controller_icons/assets/key/q.png b/source/addons/controller_icons/assets/key/q.png
new file mode 100644
index 0000000..fe8add9
Binary files /dev/null and b/source/addons/controller_icons/assets/key/q.png differ
diff --git a/source/addons/controller_icons/assets/key/q.png.import b/source/addons/controller_icons/assets/key/q.png.import
new file mode 100644
index 0000000..ff9d0e9
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/q.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dim5mk7g4q043"
+path="res://.godot/imported/q.png-6ef53dece2e535e76ac4b6715c53b010.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/q.png"
+dest_files=["res://.godot/imported/q.png-6ef53dece2e535e76ac4b6715c53b010.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/source/addons/controller_icons/assets/key/question.png b/source/addons/controller_icons/assets/key/question.png
new file mode 100644
index 0000000..d32683c
Binary files /dev/null and b/source/addons/controller_icons/assets/key/question.png differ
diff --git a/source/addons/controller_icons/assets/key/question.png.import b/source/addons/controller_icons/assets/key/question.png.import
new file mode 100644
index 0000000..c37ee07
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/question.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cvltbdf4w1x4p"
+path="res://.godot/imported/question.png-047f35398fc0d584a0c0d57bc94857a9.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/question.png"
+dest_files=["res://.godot/imported/question.png-047f35398fc0d584a0c0d57bc94857a9.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/source/addons/controller_icons/assets/key/quote.png b/source/addons/controller_icons/assets/key/quote.png
new file mode 100644
index 0000000..108d665
Binary files /dev/null and b/source/addons/controller_icons/assets/key/quote.png differ
diff --git a/source/addons/controller_icons/assets/key/quote.png.import b/source/addons/controller_icons/assets/key/quote.png.import
new file mode 100644
index 0000000..e4e236a
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/quote.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b1e76upgh2mi"
+path="res://.godot/imported/quote.png-01e82721231020d3c3b0ef2f3b74577b.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/quote.png"
+dest_files=["res://.godot/imported/quote.png-01e82721231020d3c3b0ef2f3b74577b.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/source/addons/controller_icons/assets/key/r.png b/source/addons/controller_icons/assets/key/r.png
new file mode 100644
index 0000000..5ac2461
Binary files /dev/null and b/source/addons/controller_icons/assets/key/r.png differ
diff --git a/source/addons/controller_icons/assets/key/r.png.import b/source/addons/controller_icons/assets/key/r.png.import
new file mode 100644
index 0000000..e3f5a40
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/r.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://xrv28lvm1ix6"
+path="res://.godot/imported/r.png-c853d4227496df13556499c7e96ba025.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/r.png"
+dest_files=["res://.godot/imported/r.png-c853d4227496df13556499c7e96ba025.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/source/addons/controller_icons/assets/key/s.png b/source/addons/controller_icons/assets/key/s.png
new file mode 100644
index 0000000..1fb8919
Binary files /dev/null and b/source/addons/controller_icons/assets/key/s.png differ
diff --git a/source/addons/controller_icons/assets/key/s.png.import b/source/addons/controller_icons/assets/key/s.png.import
new file mode 100644
index 0000000..dc8f1ed
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/s.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://db6nbed6w2fis"
+path.s3tc="res://.godot/imported/s.png-8ba01e8981caec742feea41c5c9382ab.s3tc.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc"],
+"vram_texture": true
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/s.png"
+dest_files=["res://.godot/imported/s.png-8ba01e8981caec742feea41c5c9382ab.s3tc.ctex"]
+
+[params]
+
+compress/mode=2
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=true
+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=0
diff --git a/source/addons/controller_icons/assets/key/semicolon.png b/source/addons/controller_icons/assets/key/semicolon.png
new file mode 100644
index 0000000..800d299
Binary files /dev/null and b/source/addons/controller_icons/assets/key/semicolon.png differ
diff --git a/source/addons/controller_icons/assets/key/semicolon.png.import b/source/addons/controller_icons/assets/key/semicolon.png.import
new file mode 100644
index 0000000..4347d45
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/semicolon.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cq1nvhcewu5nc"
+path="res://.godot/imported/semicolon.png-c1c48dd478b2bf5ae5d9bae57cdf3d69.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/semicolon.png"
+dest_files=["res://.godot/imported/semicolon.png-c1c48dd478b2bf5ae5d9bae57cdf3d69.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/source/addons/controller_icons/assets/key/shift.png b/source/addons/controller_icons/assets/key/shift.png
new file mode 100644
index 0000000..05ba791
Binary files /dev/null and b/source/addons/controller_icons/assets/key/shift.png differ
diff --git a/source/addons/controller_icons/assets/key/shift.png.import b/source/addons/controller_icons/assets/key/shift.png.import
new file mode 100644
index 0000000..cb1fc38
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/shift.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bvan6ddb77ca3"
+path="res://.godot/imported/shift.png-a03a9bd92c17d4fc5b370f1755f396ce.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/shift.png"
+dest_files=["res://.godot/imported/shift.png-a03a9bd92c17d4fc5b370f1755f396ce.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/source/addons/controller_icons/assets/key/shift_alt.png b/source/addons/controller_icons/assets/key/shift_alt.png
new file mode 100644
index 0000000..e57fb5f
Binary files /dev/null and b/source/addons/controller_icons/assets/key/shift_alt.png differ
diff --git a/source/addons/controller_icons/assets/key/shift_alt.png.import b/source/addons/controller_icons/assets/key/shift_alt.png.import
new file mode 100644
index 0000000..37c0c1b
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/shift_alt.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dq0fide2iu37s"
+path.s3tc="res://.godot/imported/shift_alt.png-e1013b0ce4d0764e12cc0d349786ce1b.s3tc.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc"],
+"vram_texture": true
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/shift_alt.png"
+dest_files=["res://.godot/imported/shift_alt.png-e1013b0ce4d0764e12cc0d349786ce1b.s3tc.ctex"]
+
+[params]
+
+compress/mode=2
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=true
+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=0
diff --git a/source/addons/controller_icons/assets/key/slash.png b/source/addons/controller_icons/assets/key/slash.png
new file mode 100644
index 0000000..38b411b
Binary files /dev/null and b/source/addons/controller_icons/assets/key/slash.png differ
diff --git a/source/addons/controller_icons/assets/key/slash.png.import b/source/addons/controller_icons/assets/key/slash.png.import
new file mode 100644
index 0000000..3d1e1c9
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/slash.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dk6lqe2d0ej6e"
+path="res://.godot/imported/slash.png-25cb40c1517be132337b6087293cb938.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/slash.png"
+dest_files=["res://.godot/imported/slash.png-25cb40c1517be132337b6087293cb938.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/source/addons/controller_icons/assets/key/space.png b/source/addons/controller_icons/assets/key/space.png
new file mode 100644
index 0000000..2298b4f
Binary files /dev/null and b/source/addons/controller_icons/assets/key/space.png differ
diff --git a/source/addons/controller_icons/assets/key/space.png.import b/source/addons/controller_icons/assets/key/space.png.import
new file mode 100644
index 0000000..57fa5d8
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/space.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://coqj2fcsaxvcn"
+path.s3tc="res://.godot/imported/space.png-da09457f968fc22d338589204e66e20a.s3tc.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc"],
+"vram_texture": true
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/space.png"
+dest_files=["res://.godot/imported/space.png-da09457f968fc22d338589204e66e20a.s3tc.ctex"]
+
+[params]
+
+compress/mode=2
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=true
+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=0
diff --git a/source/addons/controller_icons/assets/key/t.png b/source/addons/controller_icons/assets/key/t.png
new file mode 100644
index 0000000..9ba1250
Binary files /dev/null and b/source/addons/controller_icons/assets/key/t.png differ
diff --git a/source/addons/controller_icons/assets/key/t.png.import b/source/addons/controller_icons/assets/key/t.png.import
new file mode 100644
index 0000000..ce80e5e
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/t.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dky25m6echo0u"
+path="res://.godot/imported/t.png-70d394cdcf8270daedd4789ad431faf2.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/t.png"
+dest_files=["res://.godot/imported/t.png-70d394cdcf8270daedd4789ad431faf2.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/source/addons/controller_icons/assets/key/tab.png b/source/addons/controller_icons/assets/key/tab.png
new file mode 100644
index 0000000..3fea857
Binary files /dev/null and b/source/addons/controller_icons/assets/key/tab.png differ
diff --git a/source/addons/controller_icons/assets/key/tab.png.import b/source/addons/controller_icons/assets/key/tab.png.import
new file mode 100644
index 0000000..615b862
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/tab.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://ebn2rv8q28py"
+path="res://.godot/imported/tab.png-22eec37122d05e9322480e85af4a45fc.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/tab.png"
+dest_files=["res://.godot/imported/tab.png-22eec37122d05e9322480e85af4a45fc.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/source/addons/controller_icons/assets/key/tilda.png b/source/addons/controller_icons/assets/key/tilda.png
new file mode 100644
index 0000000..2f8db91
Binary files /dev/null and b/source/addons/controller_icons/assets/key/tilda.png differ
diff --git a/source/addons/controller_icons/assets/key/tilda.png.import b/source/addons/controller_icons/assets/key/tilda.png.import
new file mode 100644
index 0000000..471266a
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/tilda.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dnvawqvdd4jb4"
+path="res://.godot/imported/tilda.png-54e1d4f4a3a498075fe0e8a403e57cbc.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/tilda.png"
+dest_files=["res://.godot/imported/tilda.png-54e1d4f4a3a498075fe0e8a403e57cbc.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/source/addons/controller_icons/assets/key/u.png b/source/addons/controller_icons/assets/key/u.png
new file mode 100644
index 0000000..79f9138
Binary files /dev/null and b/source/addons/controller_icons/assets/key/u.png differ
diff --git a/source/addons/controller_icons/assets/key/u.png.import b/source/addons/controller_icons/assets/key/u.png.import
new file mode 100644
index 0000000..f57c86d
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/u.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dnbttdim7vc"
+path="res://.godot/imported/u.png-3564c3693205b4e84d15f34f8fa09789.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/u.png"
+dest_files=["res://.godot/imported/u.png-3564c3693205b4e84d15f34f8fa09789.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/source/addons/controller_icons/assets/key/v.png b/source/addons/controller_icons/assets/key/v.png
new file mode 100644
index 0000000..c0f0599
Binary files /dev/null and b/source/addons/controller_icons/assets/key/v.png differ
diff --git a/source/addons/controller_icons/assets/key/v.png.import b/source/addons/controller_icons/assets/key/v.png.import
new file mode 100644
index 0000000..c2535d5
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/v.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dolof3o252oex"
+path="res://.godot/imported/v.png-a2d45ee9b83f5d8e486139cae4520f4a.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/v.png"
+dest_files=["res://.godot/imported/v.png-a2d45ee9b83f5d8e486139cae4520f4a.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/source/addons/controller_icons/assets/key/w.png b/source/addons/controller_icons/assets/key/w.png
new file mode 100644
index 0000000..06278ee
Binary files /dev/null and b/source/addons/controller_icons/assets/key/w.png differ
diff --git a/source/addons/controller_icons/assets/key/w.png.import b/source/addons/controller_icons/assets/key/w.png.import
new file mode 100644
index 0000000..29915de
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/w.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://casmdw1resubx"
+path.s3tc="res://.godot/imported/w.png-ed3cd4592010c75b8d884d9d08803a21.s3tc.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc"],
+"vram_texture": true
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/w.png"
+dest_files=["res://.godot/imported/w.png-ed3cd4592010c75b8d884d9d08803a21.s3tc.ctex"]
+
+[params]
+
+compress/mode=2
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=true
+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=0
diff --git a/source/addons/controller_icons/assets/key/win.png b/source/addons/controller_icons/assets/key/win.png
new file mode 100644
index 0000000..58576cb
Binary files /dev/null and b/source/addons/controller_icons/assets/key/win.png differ
diff --git a/source/addons/controller_icons/assets/key/win.png.import b/source/addons/controller_icons/assets/key/win.png.import
new file mode 100644
index 0000000..30de058
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/win.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://d2cj2f4jlkxwn"
+path="res://.godot/imported/win.png-7991b99458c774d8f357ef921343498f.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/win.png"
+dest_files=["res://.godot/imported/win.png-7991b99458c774d8f357ef921343498f.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/source/addons/controller_icons/assets/key/x.png b/source/addons/controller_icons/assets/key/x.png
new file mode 100644
index 0000000..95192f0
Binary files /dev/null and b/source/addons/controller_icons/assets/key/x.png differ
diff --git a/source/addons/controller_icons/assets/key/x.png.import b/source/addons/controller_icons/assets/key/x.png.import
new file mode 100644
index 0000000..9a1d9a8
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/x.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://nil8w83cyn1m"
+path="res://.godot/imported/x.png-f920649f251a4dcf50f6adb4b7dca48a.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/x.png"
+dest_files=["res://.godot/imported/x.png-f920649f251a4dcf50f6adb4b7dca48a.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/source/addons/controller_icons/assets/key/y.png b/source/addons/controller_icons/assets/key/y.png
new file mode 100644
index 0000000..b94e455
Binary files /dev/null and b/source/addons/controller_icons/assets/key/y.png differ
diff --git a/source/addons/controller_icons/assets/key/y.png.import b/source/addons/controller_icons/assets/key/y.png.import
new file mode 100644
index 0000000..06cba44
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/y.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://0547xmgu17np"
+path="res://.godot/imported/y.png-64308a7952fca02f2ced96ef86b055d8.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/y.png"
+dest_files=["res://.godot/imported/y.png-64308a7952fca02f2ced96ef86b055d8.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/source/addons/controller_icons/assets/key/z.png b/source/addons/controller_icons/assets/key/z.png
new file mode 100644
index 0000000..e9a1299
Binary files /dev/null and b/source/addons/controller_icons/assets/key/z.png differ
diff --git a/source/addons/controller_icons/assets/key/z.png.import b/source/addons/controller_icons/assets/key/z.png.import
new file mode 100644
index 0000000..5c22e9d
--- /dev/null
+++ b/source/addons/controller_icons/assets/key/z.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dvu4qvrwgslv3"
+path="res://.godot/imported/z.png-db05dce79d25a20ba57100ebae2f198b.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/key/z.png"
+dest_files=["res://.godot/imported/z.png-db05dce79d25a20ba57100ebae2f198b.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/source/addons/controller_icons/assets/luna/a.png b/source/addons/controller_icons/assets/luna/a.png
new file mode 100644
index 0000000..3ce778c
Binary files /dev/null and b/source/addons/controller_icons/assets/luna/a.png differ
diff --git a/source/addons/controller_icons/assets/luna/a.png.import b/source/addons/controller_icons/assets/luna/a.png.import
new file mode 100644
index 0000000..6d5d7b7
--- /dev/null
+++ b/source/addons/controller_icons/assets/luna/a.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://rn6k4m7fogon"
+path="res://.godot/imported/a.png-59a62f9f6a6a0a2af64c8d88e34a5401.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/luna/a.png"
+dest_files=["res://.godot/imported/a.png-59a62f9f6a6a0a2af64c8d88e34a5401.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/source/addons/controller_icons/assets/luna/b.png b/source/addons/controller_icons/assets/luna/b.png
new file mode 100644
index 0000000..e13fd62
Binary files /dev/null and b/source/addons/controller_icons/assets/luna/b.png differ
diff --git a/source/addons/controller_icons/assets/luna/b.png.import b/source/addons/controller_icons/assets/luna/b.png.import
new file mode 100644
index 0000000..48a89da
--- /dev/null
+++ b/source/addons/controller_icons/assets/luna/b.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://brx8jkm3n4sud"
+path="res://.godot/imported/b.png-1ae64f3087efcc70a69cd9d33882dce4.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/luna/b.png"
+dest_files=["res://.godot/imported/b.png-1ae64f3087efcc70a69cd9d33882dce4.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/source/addons/controller_icons/assets/luna/circle.png b/source/addons/controller_icons/assets/luna/circle.png
new file mode 100644
index 0000000..2d49de2
Binary files /dev/null and b/source/addons/controller_icons/assets/luna/circle.png differ
diff --git a/source/addons/controller_icons/assets/luna/circle.png.import b/source/addons/controller_icons/assets/luna/circle.png.import
new file mode 100644
index 0000000..a53a126
--- /dev/null
+++ b/source/addons/controller_icons/assets/luna/circle.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b0kbg1368mrbb"
+path="res://.godot/imported/circle.png-c33dba2bdcfb9b825b3c51fddde35778.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/luna/circle.png"
+dest_files=["res://.godot/imported/circle.png-c33dba2bdcfb9b825b3c51fddde35778.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/source/addons/controller_icons/assets/luna/diagram.png b/source/addons/controller_icons/assets/luna/diagram.png
new file mode 100644
index 0000000..ec8d42c
Binary files /dev/null and b/source/addons/controller_icons/assets/luna/diagram.png differ
diff --git a/source/addons/controller_icons/assets/luna/diagram.png.import b/source/addons/controller_icons/assets/luna/diagram.png.import
new file mode 100644
index 0000000..dee70d4
--- /dev/null
+++ b/source/addons/controller_icons/assets/luna/diagram.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://46o74d1r5fhf"
+path="res://.godot/imported/diagram.png-0e19e89b9a714f35a947bce58d788325.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/luna/diagram.png"
+dest_files=["res://.godot/imported/diagram.png-0e19e89b9a714f35a947bce58d788325.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/source/addons/controller_icons/assets/luna/diagram_simple.png b/source/addons/controller_icons/assets/luna/diagram_simple.png
new file mode 100644
index 0000000..5bf82ad
Binary files /dev/null and b/source/addons/controller_icons/assets/luna/diagram_simple.png differ
diff --git a/source/addons/controller_icons/assets/luna/diagram_simple.png.import b/source/addons/controller_icons/assets/luna/diagram_simple.png.import
new file mode 100644
index 0000000..c6adb8e
--- /dev/null
+++ b/source/addons/controller_icons/assets/luna/diagram_simple.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b0rrslb07wjrf"
+path="res://.godot/imported/diagram_simple.png-28acd78142da16060c36b59ae19d78b7.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/luna/diagram_simple.png"
+dest_files=["res://.godot/imported/diagram_simple.png-28acd78142da16060c36b59ae19d78b7.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/source/addons/controller_icons/assets/luna/dpad.png b/source/addons/controller_icons/assets/luna/dpad.png
new file mode 100644
index 0000000..2d0f990
Binary files /dev/null and b/source/addons/controller_icons/assets/luna/dpad.png differ
diff --git a/source/addons/controller_icons/assets/luna/dpad.png.import b/source/addons/controller_icons/assets/luna/dpad.png.import
new file mode 100644
index 0000000..2c3fbea
--- /dev/null
+++ b/source/addons/controller_icons/assets/luna/dpad.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://douyjf06vdy2t"
+path="res://.godot/imported/dpad.png-df663e7793bdd6d418baae05c51fec49.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/luna/dpad.png"
+dest_files=["res://.godot/imported/dpad.png-df663e7793bdd6d418baae05c51fec49.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/source/addons/controller_icons/assets/luna/dpad_down.png b/source/addons/controller_icons/assets/luna/dpad_down.png
new file mode 100644
index 0000000..900d17b
Binary files /dev/null and b/source/addons/controller_icons/assets/luna/dpad_down.png differ
diff --git a/source/addons/controller_icons/assets/luna/dpad_down.png.import b/source/addons/controller_icons/assets/luna/dpad_down.png.import
new file mode 100644
index 0000000..7988d70
--- /dev/null
+++ b/source/addons/controller_icons/assets/luna/dpad_down.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c4tfv24rxbu8i"
+path="res://.godot/imported/dpad_down.png-bca02bdbaf756f49c333f91ba05b8203.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/luna/dpad_down.png"
+dest_files=["res://.godot/imported/dpad_down.png-bca02bdbaf756f49c333f91ba05b8203.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/source/addons/controller_icons/assets/luna/dpad_left.png b/source/addons/controller_icons/assets/luna/dpad_left.png
new file mode 100644
index 0000000..e5cd082
Binary files /dev/null and b/source/addons/controller_icons/assets/luna/dpad_left.png differ
diff --git a/source/addons/controller_icons/assets/luna/dpad_left.png.import b/source/addons/controller_icons/assets/luna/dpad_left.png.import
new file mode 100644
index 0000000..b8510f0
--- /dev/null
+++ b/source/addons/controller_icons/assets/luna/dpad_left.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://yapt6fyi0fpt"
+path="res://.godot/imported/dpad_left.png-ef7fb1018db88ffdeb70ff1032f2d674.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/luna/dpad_left.png"
+dest_files=["res://.godot/imported/dpad_left.png-ef7fb1018db88ffdeb70ff1032f2d674.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/source/addons/controller_icons/assets/luna/dpad_right.png b/source/addons/controller_icons/assets/luna/dpad_right.png
new file mode 100644
index 0000000..2d9b2fe
Binary files /dev/null and b/source/addons/controller_icons/assets/luna/dpad_right.png differ
diff --git a/source/addons/controller_icons/assets/luna/dpad_right.png.import b/source/addons/controller_icons/assets/luna/dpad_right.png.import
new file mode 100644
index 0000000..5561a1c
--- /dev/null
+++ b/source/addons/controller_icons/assets/luna/dpad_right.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dt0av1cfibdbv"
+path="res://.godot/imported/dpad_right.png-5d9e7fd5de979dd6e72fc6c6e218ff23.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/luna/dpad_right.png"
+dest_files=["res://.godot/imported/dpad_right.png-5d9e7fd5de979dd6e72fc6c6e218ff23.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/source/addons/controller_icons/assets/luna/dpad_up.png b/source/addons/controller_icons/assets/luna/dpad_up.png
new file mode 100644
index 0000000..595314f
Binary files /dev/null and b/source/addons/controller_icons/assets/luna/dpad_up.png differ
diff --git a/source/addons/controller_icons/assets/luna/dpad_up.png.import b/source/addons/controller_icons/assets/luna/dpad_up.png.import
new file mode 100644
index 0000000..69f8b78
--- /dev/null
+++ b/source/addons/controller_icons/assets/luna/dpad_up.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cqcmbtn5d8pn2"
+path="res://.godot/imported/dpad_up.png-ef55bb167760eab1071a8262962d899b.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/luna/dpad_up.png"
+dest_files=["res://.godot/imported/dpad_up.png-ef55bb167760eab1071a8262962d899b.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/source/addons/controller_icons/assets/luna/l_stick.png b/source/addons/controller_icons/assets/luna/l_stick.png
new file mode 100644
index 0000000..de49dc6
Binary files /dev/null and b/source/addons/controller_icons/assets/luna/l_stick.png differ
diff --git a/source/addons/controller_icons/assets/luna/l_stick.png.import b/source/addons/controller_icons/assets/luna/l_stick.png.import
new file mode 100644
index 0000000..a3b0b78
--- /dev/null
+++ b/source/addons/controller_icons/assets/luna/l_stick.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b6l2bryk8cqfx"
+path="res://.godot/imported/l_stick.png-ef7c5449283b14a6866a7fe5533de180.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/luna/l_stick.png"
+dest_files=["res://.godot/imported/l_stick.png-ef7c5449283b14a6866a7fe5533de180.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/source/addons/controller_icons/assets/luna/l_stick_click.png b/source/addons/controller_icons/assets/luna/l_stick_click.png
new file mode 100644
index 0000000..ad0428f
Binary files /dev/null and b/source/addons/controller_icons/assets/luna/l_stick_click.png differ
diff --git a/source/addons/controller_icons/assets/luna/l_stick_click.png.import b/source/addons/controller_icons/assets/luna/l_stick_click.png.import
new file mode 100644
index 0000000..90a7651
--- /dev/null
+++ b/source/addons/controller_icons/assets/luna/l_stick_click.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cj7sy2o7eq8xs"
+path="res://.godot/imported/l_stick_click.png-1e75c4b6afaefad25cb373de42d4831b.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/luna/l_stick_click.png"
+dest_files=["res://.godot/imported/l_stick_click.png-1e75c4b6afaefad25cb373de42d4831b.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/source/addons/controller_icons/assets/luna/lb.png b/source/addons/controller_icons/assets/luna/lb.png
new file mode 100644
index 0000000..f6c414b
Binary files /dev/null and b/source/addons/controller_icons/assets/luna/lb.png differ
diff --git a/source/addons/controller_icons/assets/luna/lb.png.import b/source/addons/controller_icons/assets/luna/lb.png.import
new file mode 100644
index 0000000..928d0ec
--- /dev/null
+++ b/source/addons/controller_icons/assets/luna/lb.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bupy3dxhyn86p"
+path="res://.godot/imported/lb.png-3c96db6e020bba08a50a0ebd9fe8e731.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/luna/lb.png"
+dest_files=["res://.godot/imported/lb.png-3c96db6e020bba08a50a0ebd9fe8e731.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/source/addons/controller_icons/assets/luna/lt.png b/source/addons/controller_icons/assets/luna/lt.png
new file mode 100644
index 0000000..e9681c9
Binary files /dev/null and b/source/addons/controller_icons/assets/luna/lt.png differ
diff --git a/source/addons/controller_icons/assets/luna/lt.png.import b/source/addons/controller_icons/assets/luna/lt.png.import
new file mode 100644
index 0000000..5f9404e
--- /dev/null
+++ b/source/addons/controller_icons/assets/luna/lt.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://nxnpwylabu3e"
+path="res://.godot/imported/lt.png-2cdb294c39e41ed6afc2addf04863726.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/luna/lt.png"
+dest_files=["res://.godot/imported/lt.png-2cdb294c39e41ed6afc2addf04863726.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/source/addons/controller_icons/assets/luna/menu.png b/source/addons/controller_icons/assets/luna/menu.png
new file mode 100644
index 0000000..4a96c7e
Binary files /dev/null and b/source/addons/controller_icons/assets/luna/menu.png differ
diff --git a/source/addons/controller_icons/assets/luna/menu.png.import b/source/addons/controller_icons/assets/luna/menu.png.import
new file mode 100644
index 0000000..7140436
--- /dev/null
+++ b/source/addons/controller_icons/assets/luna/menu.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://7udxwl7mxb8d"
+path="res://.godot/imported/menu.png-f8eed2754c94df5e0b92317c9d3eaf7f.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/luna/menu.png"
+dest_files=["res://.godot/imported/menu.png-f8eed2754c94df5e0b92317c9d3eaf7f.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/source/addons/controller_icons/assets/luna/microphone.png b/source/addons/controller_icons/assets/luna/microphone.png
new file mode 100644
index 0000000..862ed7a
Binary files /dev/null and b/source/addons/controller_icons/assets/luna/microphone.png differ
diff --git a/source/addons/controller_icons/assets/luna/microphone.png.import b/source/addons/controller_icons/assets/luna/microphone.png.import
new file mode 100644
index 0000000..194c05d
--- /dev/null
+++ b/source/addons/controller_icons/assets/luna/microphone.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://wwhe5v7m720e"
+path="res://.godot/imported/microphone.png-7c6c78023d41c0eecbcde19029281402.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/luna/microphone.png"
+dest_files=["res://.godot/imported/microphone.png-7c6c78023d41c0eecbcde19029281402.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/source/addons/controller_icons/assets/luna/r_stick.png b/source/addons/controller_icons/assets/luna/r_stick.png
new file mode 100644
index 0000000..866be1c
Binary files /dev/null and b/source/addons/controller_icons/assets/luna/r_stick.png differ
diff --git a/source/addons/controller_icons/assets/luna/r_stick.png.import b/source/addons/controller_icons/assets/luna/r_stick.png.import
new file mode 100644
index 0000000..45b3e26
--- /dev/null
+++ b/source/addons/controller_icons/assets/luna/r_stick.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cuhjgyoq808np"
+path="res://.godot/imported/r_stick.png-7f23b2a2644811f3d84785a06ee547d4.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/luna/r_stick.png"
+dest_files=["res://.godot/imported/r_stick.png-7f23b2a2644811f3d84785a06ee547d4.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/source/addons/controller_icons/assets/luna/r_stick_click.png b/source/addons/controller_icons/assets/luna/r_stick_click.png
new file mode 100644
index 0000000..de08508
Binary files /dev/null and b/source/addons/controller_icons/assets/luna/r_stick_click.png differ
diff --git a/source/addons/controller_icons/assets/luna/r_stick_click.png.import b/source/addons/controller_icons/assets/luna/r_stick_click.png.import
new file mode 100644
index 0000000..25e6488
--- /dev/null
+++ b/source/addons/controller_icons/assets/luna/r_stick_click.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dppg3hs5a8wcy"
+path="res://.godot/imported/r_stick_click.png-25280c4007322abd67a417283b7ee38f.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/luna/r_stick_click.png"
+dest_files=["res://.godot/imported/r_stick_click.png-25280c4007322abd67a417283b7ee38f.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/source/addons/controller_icons/assets/luna/rb.png b/source/addons/controller_icons/assets/luna/rb.png
new file mode 100644
index 0000000..5dcfc6d
Binary files /dev/null and b/source/addons/controller_icons/assets/luna/rb.png differ
diff --git a/source/addons/controller_icons/assets/luna/rb.png.import b/source/addons/controller_icons/assets/luna/rb.png.import
new file mode 100644
index 0000000..ce6e44b
--- /dev/null
+++ b/source/addons/controller_icons/assets/luna/rb.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cidn3sefbrnnf"
+path="res://.godot/imported/rb.png-c7ea937fbeb3328ee9e0f2779a5f7450.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/luna/rb.png"
+dest_files=["res://.godot/imported/rb.png-c7ea937fbeb3328ee9e0f2779a5f7450.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/source/addons/controller_icons/assets/luna/rt.png b/source/addons/controller_icons/assets/luna/rt.png
new file mode 100644
index 0000000..7bf27f4
Binary files /dev/null and b/source/addons/controller_icons/assets/luna/rt.png differ
diff --git a/source/addons/controller_icons/assets/luna/rt.png.import b/source/addons/controller_icons/assets/luna/rt.png.import
new file mode 100644
index 0000000..cd2aa02
--- /dev/null
+++ b/source/addons/controller_icons/assets/luna/rt.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cagq7na0dq2hc"
+path="res://.godot/imported/rt.png-317167a9c4de6aeaf4313c55cae3cb71.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/luna/rt.png"
+dest_files=["res://.godot/imported/rt.png-317167a9c4de6aeaf4313c55cae3cb71.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/source/addons/controller_icons/assets/luna/x.png b/source/addons/controller_icons/assets/luna/x.png
new file mode 100644
index 0000000..0a98483
Binary files /dev/null and b/source/addons/controller_icons/assets/luna/x.png differ
diff --git a/source/addons/controller_icons/assets/luna/x.png.import b/source/addons/controller_icons/assets/luna/x.png.import
new file mode 100644
index 0000000..4ea58c6
--- /dev/null
+++ b/source/addons/controller_icons/assets/luna/x.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bdaab4yfsklp5"
+path="res://.godot/imported/x.png-f47dc752ce8b528de61a09789677ef87.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/luna/x.png"
+dest_files=["res://.godot/imported/x.png-f47dc752ce8b528de61a09789677ef87.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/source/addons/controller_icons/assets/luna/y.png b/source/addons/controller_icons/assets/luna/y.png
new file mode 100644
index 0000000..1d4a18c
Binary files /dev/null and b/source/addons/controller_icons/assets/luna/y.png differ
diff --git a/source/addons/controller_icons/assets/luna/y.png.import b/source/addons/controller_icons/assets/luna/y.png.import
new file mode 100644
index 0000000..d7532df
--- /dev/null
+++ b/source/addons/controller_icons/assets/luna/y.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c1i21xnegic87"
+path="res://.godot/imported/y.png-b4f0d57293966dde5b58789c67559fd2.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/luna/y.png"
+dest_files=["res://.godot/imported/y.png-b4f0d57293966dde5b58789c67559fd2.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/source/addons/controller_icons/assets/mouse/left.png b/source/addons/controller_icons/assets/mouse/left.png
new file mode 100644
index 0000000..1b1eb86
Binary files /dev/null and b/source/addons/controller_icons/assets/mouse/left.png differ
diff --git a/source/addons/controller_icons/assets/mouse/left.png.import b/source/addons/controller_icons/assets/mouse/left.png.import
new file mode 100644
index 0000000..b9a878c
--- /dev/null
+++ b/source/addons/controller_icons/assets/mouse/left.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b8vuy7l8npt6w"
+path="res://.godot/imported/left.png-13d9369d03c3b5ebc7aad51d61ba4b7c.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/mouse/left.png"
+dest_files=["res://.godot/imported/left.png-13d9369d03c3b5ebc7aad51d61ba4b7c.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/source/addons/controller_icons/assets/mouse/middle.png b/source/addons/controller_icons/assets/mouse/middle.png
new file mode 100644
index 0000000..0fd0a2e
Binary files /dev/null and b/source/addons/controller_icons/assets/mouse/middle.png differ
diff --git a/source/addons/controller_icons/assets/mouse/middle.png.import b/source/addons/controller_icons/assets/mouse/middle.png.import
new file mode 100644
index 0000000..7decd8f
--- /dev/null
+++ b/source/addons/controller_icons/assets/mouse/middle.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://e146nr3hsy0p"
+path="res://.godot/imported/middle.png-01f248dbdab856ae6ed2ee6cdb5ed595.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/mouse/middle.png"
+dest_files=["res://.godot/imported/middle.png-01f248dbdab856ae6ed2ee6cdb5ed595.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/source/addons/controller_icons/assets/mouse/right.png b/source/addons/controller_icons/assets/mouse/right.png
new file mode 100644
index 0000000..cc24f92
Binary files /dev/null and b/source/addons/controller_icons/assets/mouse/right.png differ
diff --git a/source/addons/controller_icons/assets/mouse/right.png.import b/source/addons/controller_icons/assets/mouse/right.png.import
new file mode 100644
index 0000000..28191cd
--- /dev/null
+++ b/source/addons/controller_icons/assets/mouse/right.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cy7e67qj2flir"
+path="res://.godot/imported/right.png-360abc8e1cd731233672b90162b87e4d.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/mouse/right.png"
+dest_files=["res://.godot/imported/right.png-360abc8e1cd731233672b90162b87e4d.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/source/addons/controller_icons/assets/mouse/side_down.png b/source/addons/controller_icons/assets/mouse/side_down.png
new file mode 100644
index 0000000..0978cb4
Binary files /dev/null and b/source/addons/controller_icons/assets/mouse/side_down.png differ
diff --git a/source/addons/controller_icons/assets/mouse/side_down.png.import b/source/addons/controller_icons/assets/mouse/side_down.png.import
new file mode 100644
index 0000000..a6db0da
--- /dev/null
+++ b/source/addons/controller_icons/assets/mouse/side_down.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cwfrvijjk8day"
+path="res://.godot/imported/side_down.png-d0f917f031f1fa83082f5a03dd4d47e1.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/mouse/side_down.png"
+dest_files=["res://.godot/imported/side_down.png-d0f917f031f1fa83082f5a03dd4d47e1.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/source/addons/controller_icons/assets/mouse/side_up.png b/source/addons/controller_icons/assets/mouse/side_up.png
new file mode 100644
index 0000000..28c1b58
Binary files /dev/null and b/source/addons/controller_icons/assets/mouse/side_up.png differ
diff --git a/source/addons/controller_icons/assets/mouse/side_up.png.import b/source/addons/controller_icons/assets/mouse/side_up.png.import
new file mode 100644
index 0000000..f679315
--- /dev/null
+++ b/source/addons/controller_icons/assets/mouse/side_up.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bgaiucyxx3egf"
+path="res://.godot/imported/side_up.png-5968fb429ff2d3f3520b5fee858a6bf8.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/mouse/side_up.png"
+dest_files=["res://.godot/imported/side_up.png-5968fb429ff2d3f3520b5fee858a6bf8.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/source/addons/controller_icons/assets/mouse/simple.png b/source/addons/controller_icons/assets/mouse/simple.png
new file mode 100644
index 0000000..774bc62
Binary files /dev/null and b/source/addons/controller_icons/assets/mouse/simple.png differ
diff --git a/source/addons/controller_icons/assets/mouse/simple.png.import b/source/addons/controller_icons/assets/mouse/simple.png.import
new file mode 100644
index 0000000..c499a0f
--- /dev/null
+++ b/source/addons/controller_icons/assets/mouse/simple.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://u3k75sn1tb83"
+path="res://.godot/imported/simple.png-25602dc17ea731070ac19eb5e687d6b0.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/mouse/simple.png"
+dest_files=["res://.godot/imported/simple.png-25602dc17ea731070ac19eb5e687d6b0.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/source/addons/controller_icons/assets/mouse/wheel_down.png b/source/addons/controller_icons/assets/mouse/wheel_down.png
new file mode 100644
index 0000000..e0b3529
Binary files /dev/null and b/source/addons/controller_icons/assets/mouse/wheel_down.png differ
diff --git a/source/addons/controller_icons/assets/mouse/wheel_down.png.import b/source/addons/controller_icons/assets/mouse/wheel_down.png.import
new file mode 100644
index 0000000..0600715
--- /dev/null
+++ b/source/addons/controller_icons/assets/mouse/wheel_down.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cquw4xas0kw4b"
+path="res://.godot/imported/wheel_down.png-41403fb0624313a3521aa5396d2e7472.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/mouse/wheel_down.png"
+dest_files=["res://.godot/imported/wheel_down.png-41403fb0624313a3521aa5396d2e7472.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/source/addons/controller_icons/assets/mouse/wheel_up.png b/source/addons/controller_icons/assets/mouse/wheel_up.png
new file mode 100644
index 0000000..274c1b5
Binary files /dev/null and b/source/addons/controller_icons/assets/mouse/wheel_up.png differ
diff --git a/source/addons/controller_icons/assets/mouse/wheel_up.png.import b/source/addons/controller_icons/assets/mouse/wheel_up.png.import
new file mode 100644
index 0000000..8fa5134
--- /dev/null
+++ b/source/addons/controller_icons/assets/mouse/wheel_up.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dwqk1mmy6tyay"
+path="res://.godot/imported/wheel_up.png-90da1a0b587bd0dc8cda13989793b735.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/mouse/wheel_up.png"
+dest_files=["res://.godot/imported/wheel_up.png-90da1a0b587bd0dc8cda13989793b735.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/source/addons/controller_icons/assets/ouya/a.png b/source/addons/controller_icons/assets/ouya/a.png
new file mode 100644
index 0000000..5fcbb44
Binary files /dev/null and b/source/addons/controller_icons/assets/ouya/a.png differ
diff --git a/source/addons/controller_icons/assets/ouya/a.png.import b/source/addons/controller_icons/assets/ouya/a.png.import
new file mode 100644
index 0000000..cb1fa1e
--- /dev/null
+++ b/source/addons/controller_icons/assets/ouya/a.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cvbc2l1ygkits"
+path="res://.godot/imported/a.png-29eecb9631be3f2d922f22d192491112.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ouya/a.png"
+dest_files=["res://.godot/imported/a.png-29eecb9631be3f2d922f22d192491112.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/source/addons/controller_icons/assets/ouya/dpad.png b/source/addons/controller_icons/assets/ouya/dpad.png
new file mode 100644
index 0000000..0ced97a
Binary files /dev/null and b/source/addons/controller_icons/assets/ouya/dpad.png differ
diff --git a/source/addons/controller_icons/assets/ouya/dpad.png.import b/source/addons/controller_icons/assets/ouya/dpad.png.import
new file mode 100644
index 0000000..236292f
--- /dev/null
+++ b/source/addons/controller_icons/assets/ouya/dpad.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c87mvk8pxwqx0"
+path="res://.godot/imported/dpad.png-9426474647bb17cbcfecf0960a2689ca.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ouya/dpad.png"
+dest_files=["res://.godot/imported/dpad.png-9426474647bb17cbcfecf0960a2689ca.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/source/addons/controller_icons/assets/ouya/dpad_down.png b/source/addons/controller_icons/assets/ouya/dpad_down.png
new file mode 100644
index 0000000..6b295ac
Binary files /dev/null and b/source/addons/controller_icons/assets/ouya/dpad_down.png differ
diff --git a/source/addons/controller_icons/assets/ouya/dpad_down.png.import b/source/addons/controller_icons/assets/ouya/dpad_down.png.import
new file mode 100644
index 0000000..c84bd46
--- /dev/null
+++ b/source/addons/controller_icons/assets/ouya/dpad_down.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bpvuswm1t7mgh"
+path="res://.godot/imported/dpad_down.png-13b277973726f4697773238d58a2206f.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ouya/dpad_down.png"
+dest_files=["res://.godot/imported/dpad_down.png-13b277973726f4697773238d58a2206f.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/source/addons/controller_icons/assets/ouya/dpad_left.png b/source/addons/controller_icons/assets/ouya/dpad_left.png
new file mode 100644
index 0000000..533e42a
Binary files /dev/null and b/source/addons/controller_icons/assets/ouya/dpad_left.png differ
diff --git a/source/addons/controller_icons/assets/ouya/dpad_left.png.import b/source/addons/controller_icons/assets/ouya/dpad_left.png.import
new file mode 100644
index 0000000..a2d534e
--- /dev/null
+++ b/source/addons/controller_icons/assets/ouya/dpad_left.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b3w86u8upcybs"
+path="res://.godot/imported/dpad_left.png-d6da2405f928bc1bf7410a880edba283.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ouya/dpad_left.png"
+dest_files=["res://.godot/imported/dpad_left.png-d6da2405f928bc1bf7410a880edba283.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/source/addons/controller_icons/assets/ouya/dpad_right.png b/source/addons/controller_icons/assets/ouya/dpad_right.png
new file mode 100644
index 0000000..1b3d9ae
Binary files /dev/null and b/source/addons/controller_icons/assets/ouya/dpad_right.png differ
diff --git a/source/addons/controller_icons/assets/ouya/dpad_right.png.import b/source/addons/controller_icons/assets/ouya/dpad_right.png.import
new file mode 100644
index 0000000..97aacfc
--- /dev/null
+++ b/source/addons/controller_icons/assets/ouya/dpad_right.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c1f1hf2gs8jek"
+path="res://.godot/imported/dpad_right.png-44405ca2fe5d8a219ba0eba3426bec59.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ouya/dpad_right.png"
+dest_files=["res://.godot/imported/dpad_right.png-44405ca2fe5d8a219ba0eba3426bec59.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/source/addons/controller_icons/assets/ouya/dpad_up.png b/source/addons/controller_icons/assets/ouya/dpad_up.png
new file mode 100644
index 0000000..70ea26e
Binary files /dev/null and b/source/addons/controller_icons/assets/ouya/dpad_up.png differ
diff --git a/source/addons/controller_icons/assets/ouya/dpad_up.png.import b/source/addons/controller_icons/assets/ouya/dpad_up.png.import
new file mode 100644
index 0000000..611f1b3
--- /dev/null
+++ b/source/addons/controller_icons/assets/ouya/dpad_up.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://lrrqo1v6mlnw"
+path="res://.godot/imported/dpad_up.png-0d780dfe823faac5787681ba448e07f0.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ouya/dpad_up.png"
+dest_files=["res://.godot/imported/dpad_up.png-0d780dfe823faac5787681ba448e07f0.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/source/addons/controller_icons/assets/ouya/l1.png b/source/addons/controller_icons/assets/ouya/l1.png
new file mode 100644
index 0000000..2b20073
Binary files /dev/null and b/source/addons/controller_icons/assets/ouya/l1.png differ
diff --git a/source/addons/controller_icons/assets/ouya/l1.png.import b/source/addons/controller_icons/assets/ouya/l1.png.import
new file mode 100644
index 0000000..a0eb303
--- /dev/null
+++ b/source/addons/controller_icons/assets/ouya/l1.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://oll7c7kiudqg"
+path="res://.godot/imported/l1.png-40be426ff0b63ac71a387da3194167e8.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ouya/l1.png"
+dest_files=["res://.godot/imported/l1.png-40be426ff0b63ac71a387da3194167e8.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/source/addons/controller_icons/assets/ouya/l2.png b/source/addons/controller_icons/assets/ouya/l2.png
new file mode 100644
index 0000000..6234c1e
Binary files /dev/null and b/source/addons/controller_icons/assets/ouya/l2.png differ
diff --git a/source/addons/controller_icons/assets/ouya/l2.png.import b/source/addons/controller_icons/assets/ouya/l2.png.import
new file mode 100644
index 0000000..f63cb01
--- /dev/null
+++ b/source/addons/controller_icons/assets/ouya/l2.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://ckthgirocj4ye"
+path="res://.godot/imported/l2.png-4ccae94ce7c12e37b2621a33b6e321e6.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ouya/l2.png"
+dest_files=["res://.godot/imported/l2.png-4ccae94ce7c12e37b2621a33b6e321e6.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/source/addons/controller_icons/assets/ouya/l_stick.png b/source/addons/controller_icons/assets/ouya/l_stick.png
new file mode 100644
index 0000000..631dad6
Binary files /dev/null and b/source/addons/controller_icons/assets/ouya/l_stick.png differ
diff --git a/source/addons/controller_icons/assets/ouya/l_stick.png.import b/source/addons/controller_icons/assets/ouya/l_stick.png.import
new file mode 100644
index 0000000..c44fe1b
--- /dev/null
+++ b/source/addons/controller_icons/assets/ouya/l_stick.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://ddebrfwlw0rx4"
+path="res://.godot/imported/l_stick.png-501fa1ab3b082e67f566728cbecc7708.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ouya/l_stick.png"
+dest_files=["res://.godot/imported/l_stick.png-501fa1ab3b082e67f566728cbecc7708.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/source/addons/controller_icons/assets/ouya/menu.png b/source/addons/controller_icons/assets/ouya/menu.png
new file mode 100644
index 0000000..b2eef11
Binary files /dev/null and b/source/addons/controller_icons/assets/ouya/menu.png differ
diff --git a/source/addons/controller_icons/assets/ouya/menu.png.import b/source/addons/controller_icons/assets/ouya/menu.png.import
new file mode 100644
index 0000000..1226426
--- /dev/null
+++ b/source/addons/controller_icons/assets/ouya/menu.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://ddqchjo615p6p"
+path="res://.godot/imported/menu.png-c3e217d08a17c9c3997312859256b788.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ouya/menu.png"
+dest_files=["res://.godot/imported/menu.png-c3e217d08a17c9c3997312859256b788.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/source/addons/controller_icons/assets/ouya/o.png b/source/addons/controller_icons/assets/ouya/o.png
new file mode 100644
index 0000000..e96a62c
Binary files /dev/null and b/source/addons/controller_icons/assets/ouya/o.png differ
diff --git a/source/addons/controller_icons/assets/ouya/o.png.import b/source/addons/controller_icons/assets/ouya/o.png.import
new file mode 100644
index 0000000..8f11c5c
--- /dev/null
+++ b/source/addons/controller_icons/assets/ouya/o.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://btb2inju0rhw4"
+path="res://.godot/imported/o.png-5860511e81509fe5f2c91ae353e00a58.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ouya/o.png"
+dest_files=["res://.godot/imported/o.png-5860511e81509fe5f2c91ae353e00a58.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/source/addons/controller_icons/assets/ouya/r1.png b/source/addons/controller_icons/assets/ouya/r1.png
new file mode 100644
index 0000000..5e8f924
Binary files /dev/null and b/source/addons/controller_icons/assets/ouya/r1.png differ
diff --git a/source/addons/controller_icons/assets/ouya/r1.png.import b/source/addons/controller_icons/assets/ouya/r1.png.import
new file mode 100644
index 0000000..7be0b67
--- /dev/null
+++ b/source/addons/controller_icons/assets/ouya/r1.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bwchef4k1lkhv"
+path="res://.godot/imported/r1.png-2f981ba18f14037d054db9e0a74904f5.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ouya/r1.png"
+dest_files=["res://.godot/imported/r1.png-2f981ba18f14037d054db9e0a74904f5.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/source/addons/controller_icons/assets/ouya/r2.png b/source/addons/controller_icons/assets/ouya/r2.png
new file mode 100644
index 0000000..55db1c7
Binary files /dev/null and b/source/addons/controller_icons/assets/ouya/r2.png differ
diff --git a/source/addons/controller_icons/assets/ouya/r2.png.import b/source/addons/controller_icons/assets/ouya/r2.png.import
new file mode 100644
index 0000000..a644d20
--- /dev/null
+++ b/source/addons/controller_icons/assets/ouya/r2.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://ckuwwjnc4n0ty"
+path="res://.godot/imported/r2.png-5547939bd008bff4345aab8e7d1e50fc.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ouya/r2.png"
+dest_files=["res://.godot/imported/r2.png-5547939bd008bff4345aab8e7d1e50fc.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/source/addons/controller_icons/assets/ouya/r_stick.png b/source/addons/controller_icons/assets/ouya/r_stick.png
new file mode 100644
index 0000000..c46c748
Binary files /dev/null and b/source/addons/controller_icons/assets/ouya/r_stick.png differ
diff --git a/source/addons/controller_icons/assets/ouya/r_stick.png.import b/source/addons/controller_icons/assets/ouya/r_stick.png.import
new file mode 100644
index 0000000..4b5b315
--- /dev/null
+++ b/source/addons/controller_icons/assets/ouya/r_stick.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://x6qlfu7hm2av"
+path="res://.godot/imported/r_stick.png-b68d71869af9e2ee20718829995adcc3.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ouya/r_stick.png"
+dest_files=["res://.godot/imported/r_stick.png-b68d71869af9e2ee20718829995adcc3.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/source/addons/controller_icons/assets/ouya/touch.png b/source/addons/controller_icons/assets/ouya/touch.png
new file mode 100644
index 0000000..2df0e46
Binary files /dev/null and b/source/addons/controller_icons/assets/ouya/touch.png differ
diff --git a/source/addons/controller_icons/assets/ouya/touch.png.import b/source/addons/controller_icons/assets/ouya/touch.png.import
new file mode 100644
index 0000000..25dd4bd
--- /dev/null
+++ b/source/addons/controller_icons/assets/ouya/touch.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://crrpiy63ykx14"
+path="res://.godot/imported/touch.png-1ba3e7ec2b35a2d00655a24d0089caad.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ouya/touch.png"
+dest_files=["res://.godot/imported/touch.png-1ba3e7ec2b35a2d00655a24d0089caad.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/source/addons/controller_icons/assets/ouya/u.png b/source/addons/controller_icons/assets/ouya/u.png
new file mode 100644
index 0000000..c90ca2d
Binary files /dev/null and b/source/addons/controller_icons/assets/ouya/u.png differ
diff --git a/source/addons/controller_icons/assets/ouya/u.png.import b/source/addons/controller_icons/assets/ouya/u.png.import
new file mode 100644
index 0000000..81fb813
--- /dev/null
+++ b/source/addons/controller_icons/assets/ouya/u.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bxom1daxf3rkv"
+path="res://.godot/imported/u.png-599d0e95eb0d2f2937ff55a5a246fb0f.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ouya/u.png"
+dest_files=["res://.godot/imported/u.png-599d0e95eb0d2f2937ff55a5a246fb0f.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/source/addons/controller_icons/assets/ouya/y.png b/source/addons/controller_icons/assets/ouya/y.png
new file mode 100644
index 0000000..c0a08e0
Binary files /dev/null and b/source/addons/controller_icons/assets/ouya/y.png differ
diff --git a/source/addons/controller_icons/assets/ouya/y.png.import b/source/addons/controller_icons/assets/ouya/y.png.import
new file mode 100644
index 0000000..37e4584
--- /dev/null
+++ b/source/addons/controller_icons/assets/ouya/y.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dfu8cthd37ls6"
+path="res://.godot/imported/y.png-5d0ac3a56f44813490c7f2c4bfb2a86b.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ouya/y.png"
+dest_files=["res://.godot/imported/y.png-5d0ac3a56f44813490c7f2c4bfb2a86b.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/source/addons/controller_icons/assets/positional/east.png b/source/addons/controller_icons/assets/positional/east.png
new file mode 100644
index 0000000..8a821aa
Binary files /dev/null and b/source/addons/controller_icons/assets/positional/east.png differ
diff --git a/source/addons/controller_icons/assets/positional/east.png.import b/source/addons/controller_icons/assets/positional/east.png.import
new file mode 100644
index 0000000..4c4073b
--- /dev/null
+++ b/source/addons/controller_icons/assets/positional/east.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://ct4njsaxkgfd8"
+path="res://.godot/imported/east.png-468aa650c9556f22433824736c3d70c7.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/positional/east.png"
+dest_files=["res://.godot/imported/east.png-468aa650c9556f22433824736c3d70c7.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/source/addons/controller_icons/assets/positional/north.png b/source/addons/controller_icons/assets/positional/north.png
new file mode 100644
index 0000000..888a343
Binary files /dev/null and b/source/addons/controller_icons/assets/positional/north.png differ
diff --git a/source/addons/controller_icons/assets/positional/north.png.import b/source/addons/controller_icons/assets/positional/north.png.import
new file mode 100644
index 0000000..204ca14
--- /dev/null
+++ b/source/addons/controller_icons/assets/positional/north.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://78i5io3k54qf"
+path="res://.godot/imported/north.png-8eae94f078419a6dd29488ecb0e91781.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/positional/north.png"
+dest_files=["res://.godot/imported/north.png-8eae94f078419a6dd29488ecb0e91781.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/source/addons/controller_icons/assets/positional/south.png b/source/addons/controller_icons/assets/positional/south.png
new file mode 100644
index 0000000..78da86f
Binary files /dev/null and b/source/addons/controller_icons/assets/positional/south.png differ
diff --git a/source/addons/controller_icons/assets/positional/south.png.import b/source/addons/controller_icons/assets/positional/south.png.import
new file mode 100644
index 0000000..a5dffbc
--- /dev/null
+++ b/source/addons/controller_icons/assets/positional/south.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b7cyrhxkp7lqv"
+path="res://.godot/imported/south.png-641e4a1035caae19816e0982ab1fa092.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/positional/south.png"
+dest_files=["res://.godot/imported/south.png-641e4a1035caae19816e0982ab1fa092.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/source/addons/controller_icons/assets/positional/west.png b/source/addons/controller_icons/assets/positional/west.png
new file mode 100644
index 0000000..ccf72ae
Binary files /dev/null and b/source/addons/controller_icons/assets/positional/west.png differ
diff --git a/source/addons/controller_icons/assets/positional/west.png.import b/source/addons/controller_icons/assets/positional/west.png.import
new file mode 100644
index 0000000..49a14a0
--- /dev/null
+++ b/source/addons/controller_icons/assets/positional/west.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bpm66ufy22rft"
+path="res://.godot/imported/west.png-721f52ab7a924c9ea30a0b9420becae2.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/positional/west.png"
+dest_files=["res://.godot/imported/west.png-721f52ab7a924c9ea30a0b9420becae2.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/source/addons/controller_icons/assets/ps3/circle.png b/source/addons/controller_icons/assets/ps3/circle.png
new file mode 100644
index 0000000..10dd9b0
Binary files /dev/null and b/source/addons/controller_icons/assets/ps3/circle.png differ
diff --git a/source/addons/controller_icons/assets/ps3/circle.png.import b/source/addons/controller_icons/assets/ps3/circle.png.import
new file mode 100644
index 0000000..621fa02
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps3/circle.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dse7uwpu8ckqc"
+path="res://.godot/imported/circle.png-70d1c7377e6d97fdb685a6b0754f3f42.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps3/circle.png"
+dest_files=["res://.godot/imported/circle.png-70d1c7377e6d97fdb685a6b0754f3f42.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/source/addons/controller_icons/assets/ps3/cross.png b/source/addons/controller_icons/assets/ps3/cross.png
new file mode 100644
index 0000000..73a42a7
Binary files /dev/null and b/source/addons/controller_icons/assets/ps3/cross.png differ
diff --git a/source/addons/controller_icons/assets/ps3/cross.png.import b/source/addons/controller_icons/assets/ps3/cross.png.import
new file mode 100644
index 0000000..cdba998
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps3/cross.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://d2ucqffimqhnr"
+path="res://.godot/imported/cross.png-e329bed17ebc98e605153471fea82b80.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps3/cross.png"
+dest_files=["res://.godot/imported/cross.png-e329bed17ebc98e605153471fea82b80.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/source/addons/controller_icons/assets/ps3/dpad.png b/source/addons/controller_icons/assets/ps3/dpad.png
new file mode 100644
index 0000000..5a31103
Binary files /dev/null and b/source/addons/controller_icons/assets/ps3/dpad.png differ
diff --git a/source/addons/controller_icons/assets/ps3/dpad.png.import b/source/addons/controller_icons/assets/ps3/dpad.png.import
new file mode 100644
index 0000000..e0c4dfe
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps3/dpad.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://ckjwmngj4kbho"
+path="res://.godot/imported/dpad.png-4637fef7b5db266765dab22db8f811fd.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps3/dpad.png"
+dest_files=["res://.godot/imported/dpad.png-4637fef7b5db266765dab22db8f811fd.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/source/addons/controller_icons/assets/ps3/dpad_down.png b/source/addons/controller_icons/assets/ps3/dpad_down.png
new file mode 100644
index 0000000..dddcc0d
Binary files /dev/null and b/source/addons/controller_icons/assets/ps3/dpad_down.png differ
diff --git a/source/addons/controller_icons/assets/ps3/dpad_down.png.import b/source/addons/controller_icons/assets/ps3/dpad_down.png.import
new file mode 100644
index 0000000..1316c7f
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps3/dpad_down.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cq5syvstyqo2a"
+path="res://.godot/imported/dpad_down.png-3aa92d8def03f8a78bef46eb393c9ccb.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps3/dpad_down.png"
+dest_files=["res://.godot/imported/dpad_down.png-3aa92d8def03f8a78bef46eb393c9ccb.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/source/addons/controller_icons/assets/ps3/dpad_left.png b/source/addons/controller_icons/assets/ps3/dpad_left.png
new file mode 100644
index 0000000..78beb63
Binary files /dev/null and b/source/addons/controller_icons/assets/ps3/dpad_left.png differ
diff --git a/source/addons/controller_icons/assets/ps3/dpad_left.png.import b/source/addons/controller_icons/assets/ps3/dpad_left.png.import
new file mode 100644
index 0000000..d832248
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps3/dpad_left.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bttmu8c1tn2rv"
+path="res://.godot/imported/dpad_left.png-1720ec3d2d90c298cf2b0d3b3eb8b92b.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps3/dpad_left.png"
+dest_files=["res://.godot/imported/dpad_left.png-1720ec3d2d90c298cf2b0d3b3eb8b92b.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/source/addons/controller_icons/assets/ps3/dpad_right.png b/source/addons/controller_icons/assets/ps3/dpad_right.png
new file mode 100644
index 0000000..94a6590
Binary files /dev/null and b/source/addons/controller_icons/assets/ps3/dpad_right.png differ
diff --git a/source/addons/controller_icons/assets/ps3/dpad_right.png.import b/source/addons/controller_icons/assets/ps3/dpad_right.png.import
new file mode 100644
index 0000000..b544802
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps3/dpad_right.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cxqto8qkeu0f4"
+path="res://.godot/imported/dpad_right.png-7b72f2c4cc3545b46da3d768493a81ae.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps3/dpad_right.png"
+dest_files=["res://.godot/imported/dpad_right.png-7b72f2c4cc3545b46da3d768493a81ae.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/source/addons/controller_icons/assets/ps3/dpad_up.png b/source/addons/controller_icons/assets/ps3/dpad_up.png
new file mode 100644
index 0000000..5bc8705
Binary files /dev/null and b/source/addons/controller_icons/assets/ps3/dpad_up.png differ
diff --git a/source/addons/controller_icons/assets/ps3/dpad_up.png.import b/source/addons/controller_icons/assets/ps3/dpad_up.png.import
new file mode 100644
index 0000000..d21a37f
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps3/dpad_up.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://crpwirpuob7pc"
+path="res://.godot/imported/dpad_up.png-021888c99c1636514946a171fb55ea78.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps3/dpad_up.png"
+dest_files=["res://.godot/imported/dpad_up.png-021888c99c1636514946a171fb55ea78.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/source/addons/controller_icons/assets/ps3/l1.png b/source/addons/controller_icons/assets/ps3/l1.png
new file mode 100644
index 0000000..8a1d87c
Binary files /dev/null and b/source/addons/controller_icons/assets/ps3/l1.png differ
diff --git a/source/addons/controller_icons/assets/ps3/l1.png.import b/source/addons/controller_icons/assets/ps3/l1.png.import
new file mode 100644
index 0000000..b1718dc
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps3/l1.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dap2udggtn0ap"
+path="res://.godot/imported/l1.png-dfeafeae6ba7ae1b62c84a1f737135c8.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps3/l1.png"
+dest_files=["res://.godot/imported/l1.png-dfeafeae6ba7ae1b62c84a1f737135c8.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/source/addons/controller_icons/assets/ps3/l2.png b/source/addons/controller_icons/assets/ps3/l2.png
new file mode 100644
index 0000000..3b938d1
Binary files /dev/null and b/source/addons/controller_icons/assets/ps3/l2.png differ
diff --git a/source/addons/controller_icons/assets/ps3/l2.png.import b/source/addons/controller_icons/assets/ps3/l2.png.import
new file mode 100644
index 0000000..deaaa18
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps3/l2.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://byqc7vuhgliui"
+path="res://.godot/imported/l2.png-49cf84f948da7cf4a5ca5167681ae3d5.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps3/l2.png"
+dest_files=["res://.godot/imported/l2.png-49cf84f948da7cf4a5ca5167681ae3d5.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/source/addons/controller_icons/assets/ps3/l_stick.png b/source/addons/controller_icons/assets/ps3/l_stick.png
new file mode 100644
index 0000000..101b99c
Binary files /dev/null and b/source/addons/controller_icons/assets/ps3/l_stick.png differ
diff --git a/source/addons/controller_icons/assets/ps3/l_stick.png.import b/source/addons/controller_icons/assets/ps3/l_stick.png.import
new file mode 100644
index 0000000..6deede5
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps3/l_stick.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cccbypburqcvq"
+path="res://.godot/imported/l_stick.png-4d7ce55783c67f70a2df08cb2beff743.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps3/l_stick.png"
+dest_files=["res://.godot/imported/l_stick.png-4d7ce55783c67f70a2df08cb2beff743.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/source/addons/controller_icons/assets/ps3/l_stick_click.png b/source/addons/controller_icons/assets/ps3/l_stick_click.png
new file mode 100644
index 0000000..43b55a5
Binary files /dev/null and b/source/addons/controller_icons/assets/ps3/l_stick_click.png differ
diff --git a/source/addons/controller_icons/assets/ps3/l_stick_click.png.import b/source/addons/controller_icons/assets/ps3/l_stick_click.png.import
new file mode 100644
index 0000000..317a95f
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps3/l_stick_click.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dd8k51h8nwcg0"
+path="res://.godot/imported/l_stick_click.png-3323df54acb88d23cb5dcf1d89369e9f.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps3/l_stick_click.png"
+dest_files=["res://.godot/imported/l_stick_click.png-3323df54acb88d23cb5dcf1d89369e9f.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/source/addons/controller_icons/assets/ps3/r1.png b/source/addons/controller_icons/assets/ps3/r1.png
new file mode 100644
index 0000000..722e405
Binary files /dev/null and b/source/addons/controller_icons/assets/ps3/r1.png differ
diff --git a/source/addons/controller_icons/assets/ps3/r1.png.import b/source/addons/controller_icons/assets/ps3/r1.png.import
new file mode 100644
index 0000000..613081e
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps3/r1.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c4kphw2308ie8"
+path="res://.godot/imported/r1.png-336215df5c25fad438a516b20a7e7b24.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps3/r1.png"
+dest_files=["res://.godot/imported/r1.png-336215df5c25fad438a516b20a7e7b24.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/source/addons/controller_icons/assets/ps3/r2.png b/source/addons/controller_icons/assets/ps3/r2.png
new file mode 100644
index 0000000..f05529f
Binary files /dev/null and b/source/addons/controller_icons/assets/ps3/r2.png differ
diff --git a/source/addons/controller_icons/assets/ps3/r2.png.import b/source/addons/controller_icons/assets/ps3/r2.png.import
new file mode 100644
index 0000000..a299f59
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps3/r2.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://d3jlrd2rc72r4"
+path="res://.godot/imported/r2.png-9cd8110714aedc5d2a3dfc1ffdff8c02.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps3/r2.png"
+dest_files=["res://.godot/imported/r2.png-9cd8110714aedc5d2a3dfc1ffdff8c02.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/source/addons/controller_icons/assets/ps3/r_stick.png b/source/addons/controller_icons/assets/ps3/r_stick.png
new file mode 100644
index 0000000..374f589
Binary files /dev/null and b/source/addons/controller_icons/assets/ps3/r_stick.png differ
diff --git a/source/addons/controller_icons/assets/ps3/r_stick.png.import b/source/addons/controller_icons/assets/ps3/r_stick.png.import
new file mode 100644
index 0000000..7def871
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps3/r_stick.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bcbpy0rj57gkm"
+path="res://.godot/imported/r_stick.png-f749816036286088f35537738f770504.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps3/r_stick.png"
+dest_files=["res://.godot/imported/r_stick.png-f749816036286088f35537738f770504.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/source/addons/controller_icons/assets/ps3/r_stick_click.png b/source/addons/controller_icons/assets/ps3/r_stick_click.png
new file mode 100644
index 0000000..1af48a7
Binary files /dev/null and b/source/addons/controller_icons/assets/ps3/r_stick_click.png differ
diff --git a/source/addons/controller_icons/assets/ps3/r_stick_click.png.import b/source/addons/controller_icons/assets/ps3/r_stick_click.png.import
new file mode 100644
index 0000000..e2474d3
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps3/r_stick_click.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://fxtf3vikkqnu"
+path="res://.godot/imported/r_stick_click.png-cde2b6f7baf1c09e35614699e80663da.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps3/r_stick_click.png"
+dest_files=["res://.godot/imported/r_stick_click.png-cde2b6f7baf1c09e35614699e80663da.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/source/addons/controller_icons/assets/ps3/select.png b/source/addons/controller_icons/assets/ps3/select.png
new file mode 100644
index 0000000..b493aff
Binary files /dev/null and b/source/addons/controller_icons/assets/ps3/select.png differ
diff --git a/source/addons/controller_icons/assets/ps3/select.png.import b/source/addons/controller_icons/assets/ps3/select.png.import
new file mode 100644
index 0000000..8dfdaa0
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps3/select.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c1pnhjot6jh88"
+path="res://.godot/imported/select.png-522047772d3761e1a6d393174fcc2cdc.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps3/select.png"
+dest_files=["res://.godot/imported/select.png-522047772d3761e1a6d393174fcc2cdc.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/source/addons/controller_icons/assets/ps3/square.png b/source/addons/controller_icons/assets/ps3/square.png
new file mode 100644
index 0000000..3ad1286
Binary files /dev/null and b/source/addons/controller_icons/assets/ps3/square.png differ
diff --git a/source/addons/controller_icons/assets/ps3/square.png.import b/source/addons/controller_icons/assets/ps3/square.png.import
new file mode 100644
index 0000000..d3f6cfe
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps3/square.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b2tvg7auwno7l"
+path="res://.godot/imported/square.png-acfb3df3c257e4d05e07c07b6c83dfc5.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps3/square.png"
+dest_files=["res://.godot/imported/square.png-acfb3df3c257e4d05e07c07b6c83dfc5.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/source/addons/controller_icons/assets/ps3/start.png b/source/addons/controller_icons/assets/ps3/start.png
new file mode 100644
index 0000000..3822fd8
Binary files /dev/null and b/source/addons/controller_icons/assets/ps3/start.png differ
diff --git a/source/addons/controller_icons/assets/ps3/start.png.import b/source/addons/controller_icons/assets/ps3/start.png.import
new file mode 100644
index 0000000..c7eec86
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps3/start.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dx4t1kuqepf8f"
+path="res://.godot/imported/start.png-5eb6d70080bded8525bed5b22e1fd045.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps3/start.png"
+dest_files=["res://.godot/imported/start.png-5eb6d70080bded8525bed5b22e1fd045.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/source/addons/controller_icons/assets/ps3/triangle.png b/source/addons/controller_icons/assets/ps3/triangle.png
new file mode 100644
index 0000000..9dcdbba
Binary files /dev/null and b/source/addons/controller_icons/assets/ps3/triangle.png differ
diff --git a/source/addons/controller_icons/assets/ps3/triangle.png.import b/source/addons/controller_icons/assets/ps3/triangle.png.import
new file mode 100644
index 0000000..0d3cc1a
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps3/triangle.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bq378yldukdlh"
+path="res://.godot/imported/triangle.png-636bd5a4c11993247c97be299c04f5ef.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps3/triangle.png"
+dest_files=["res://.godot/imported/triangle.png-636bd5a4c11993247c97be299c04f5ef.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/source/addons/controller_icons/assets/ps4/circle.png b/source/addons/controller_icons/assets/ps4/circle.png
new file mode 100644
index 0000000..10dd9b0
Binary files /dev/null and b/source/addons/controller_icons/assets/ps4/circle.png differ
diff --git a/source/addons/controller_icons/assets/ps4/circle.png.import b/source/addons/controller_icons/assets/ps4/circle.png.import
new file mode 100644
index 0000000..932b2e5
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps4/circle.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bdnj53115obj6"
+path="res://.godot/imported/circle.png-01df92401a316edc4ce14b20766177ab.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps4/circle.png"
+dest_files=["res://.godot/imported/circle.png-01df92401a316edc4ce14b20766177ab.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/source/addons/controller_icons/assets/ps4/cross.png b/source/addons/controller_icons/assets/ps4/cross.png
new file mode 100644
index 0000000..73a42a7
Binary files /dev/null and b/source/addons/controller_icons/assets/ps4/cross.png differ
diff --git a/source/addons/controller_icons/assets/ps4/cross.png.import b/source/addons/controller_icons/assets/ps4/cross.png.import
new file mode 100644
index 0000000..bb1f003
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps4/cross.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bnvbg64nsbaf4"
+path="res://.godot/imported/cross.png-e713dddd604d213d7729201a660a0525.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps4/cross.png"
+dest_files=["res://.godot/imported/cross.png-e713dddd604d213d7729201a660a0525.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/source/addons/controller_icons/assets/ps4/diagram.png b/source/addons/controller_icons/assets/ps4/diagram.png
new file mode 100644
index 0000000..9af791a
Binary files /dev/null and b/source/addons/controller_icons/assets/ps4/diagram.png differ
diff --git a/source/addons/controller_icons/assets/ps4/diagram.png.import b/source/addons/controller_icons/assets/ps4/diagram.png.import
new file mode 100644
index 0000000..8c3941e
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps4/diagram.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cpmt0ar1hehq3"
+path="res://.godot/imported/diagram.png-0ae298bc80cd0126f885be209e23a765.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps4/diagram.png"
+dest_files=["res://.godot/imported/diagram.png-0ae298bc80cd0126f885be209e23a765.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/source/addons/controller_icons/assets/ps4/diagram_simple.png b/source/addons/controller_icons/assets/ps4/diagram_simple.png
new file mode 100644
index 0000000..d703c4d
Binary files /dev/null and b/source/addons/controller_icons/assets/ps4/diagram_simple.png differ
diff --git a/source/addons/controller_icons/assets/ps4/diagram_simple.png.import b/source/addons/controller_icons/assets/ps4/diagram_simple.png.import
new file mode 100644
index 0000000..c646b48
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps4/diagram_simple.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dpmkvhixf4p61"
+path="res://.godot/imported/diagram_simple.png-5fdad32ea7c3ffc2b56944758c7cd03e.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps4/diagram_simple.png"
+dest_files=["res://.godot/imported/diagram_simple.png-5fdad32ea7c3ffc2b56944758c7cd03e.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/source/addons/controller_icons/assets/ps4/dpad.png b/source/addons/controller_icons/assets/ps4/dpad.png
new file mode 100644
index 0000000..5a31103
Binary files /dev/null and b/source/addons/controller_icons/assets/ps4/dpad.png differ
diff --git a/source/addons/controller_icons/assets/ps4/dpad.png.import b/source/addons/controller_icons/assets/ps4/dpad.png.import
new file mode 100644
index 0000000..8937acf
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps4/dpad.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dv7bykspkb5hd"
+path="res://.godot/imported/dpad.png-dd021d29d27d6122ce9bfcfb1bbb021b.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps4/dpad.png"
+dest_files=["res://.godot/imported/dpad.png-dd021d29d27d6122ce9bfcfb1bbb021b.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/source/addons/controller_icons/assets/ps4/dpad_down.png b/source/addons/controller_icons/assets/ps4/dpad_down.png
new file mode 100644
index 0000000..dddcc0d
Binary files /dev/null and b/source/addons/controller_icons/assets/ps4/dpad_down.png differ
diff --git a/source/addons/controller_icons/assets/ps4/dpad_down.png.import b/source/addons/controller_icons/assets/ps4/dpad_down.png.import
new file mode 100644
index 0000000..ce5629b
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps4/dpad_down.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bmdsp6d1d1abc"
+path="res://.godot/imported/dpad_down.png-59c0669558772f9d842bb5f97d6efb92.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps4/dpad_down.png"
+dest_files=["res://.godot/imported/dpad_down.png-59c0669558772f9d842bb5f97d6efb92.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/source/addons/controller_icons/assets/ps4/dpad_left.png b/source/addons/controller_icons/assets/ps4/dpad_left.png
new file mode 100644
index 0000000..78beb63
Binary files /dev/null and b/source/addons/controller_icons/assets/ps4/dpad_left.png differ
diff --git a/source/addons/controller_icons/assets/ps4/dpad_left.png.import b/source/addons/controller_icons/assets/ps4/dpad_left.png.import
new file mode 100644
index 0000000..51f9f26
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps4/dpad_left.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dyqy2t346i7n4"
+path="res://.godot/imported/dpad_left.png-0293ca67b8114377516161a62ab1783a.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps4/dpad_left.png"
+dest_files=["res://.godot/imported/dpad_left.png-0293ca67b8114377516161a62ab1783a.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/source/addons/controller_icons/assets/ps4/dpad_right.png b/source/addons/controller_icons/assets/ps4/dpad_right.png
new file mode 100644
index 0000000..94a6590
Binary files /dev/null and b/source/addons/controller_icons/assets/ps4/dpad_right.png differ
diff --git a/source/addons/controller_icons/assets/ps4/dpad_right.png.import b/source/addons/controller_icons/assets/ps4/dpad_right.png.import
new file mode 100644
index 0000000..6208554
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps4/dpad_right.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bl5rce50vbnn7"
+path="res://.godot/imported/dpad_right.png-deac173b424649225684e25625f0bea1.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps4/dpad_right.png"
+dest_files=["res://.godot/imported/dpad_right.png-deac173b424649225684e25625f0bea1.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/source/addons/controller_icons/assets/ps4/dpad_up.png b/source/addons/controller_icons/assets/ps4/dpad_up.png
new file mode 100644
index 0000000..5bc8705
Binary files /dev/null and b/source/addons/controller_icons/assets/ps4/dpad_up.png differ
diff --git a/source/addons/controller_icons/assets/ps4/dpad_up.png.import b/source/addons/controller_icons/assets/ps4/dpad_up.png.import
new file mode 100644
index 0000000..9ff6a7d
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps4/dpad_up.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://crf0mhukst7cs"
+path="res://.godot/imported/dpad_up.png-29b188f1af23baff02984fc1f7680ac3.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps4/dpad_up.png"
+dest_files=["res://.godot/imported/dpad_up.png-29b188f1af23baff02984fc1f7680ac3.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/source/addons/controller_icons/assets/ps4/l1.png b/source/addons/controller_icons/assets/ps4/l1.png
new file mode 100644
index 0000000..6be5fcb
Binary files /dev/null and b/source/addons/controller_icons/assets/ps4/l1.png differ
diff --git a/source/addons/controller_icons/assets/ps4/l1.png.import b/source/addons/controller_icons/assets/ps4/l1.png.import
new file mode 100644
index 0000000..5860963
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps4/l1.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bx646jls6fotu"
+path="res://.godot/imported/l1.png-95ac4b86b63cb6d6063d04c34423e038.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps4/l1.png"
+dest_files=["res://.godot/imported/l1.png-95ac4b86b63cb6d6063d04c34423e038.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/source/addons/controller_icons/assets/ps4/l2.png b/source/addons/controller_icons/assets/ps4/l2.png
new file mode 100644
index 0000000..7abdfef
Binary files /dev/null and b/source/addons/controller_icons/assets/ps4/l2.png differ
diff --git a/source/addons/controller_icons/assets/ps4/l2.png.import b/source/addons/controller_icons/assets/ps4/l2.png.import
new file mode 100644
index 0000000..7994d7f
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps4/l2.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c6430g8j7ft6t"
+path="res://.godot/imported/l2.png-4dcb2ad01f6cbc33aa48ee09f5756380.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps4/l2.png"
+dest_files=["res://.godot/imported/l2.png-4dcb2ad01f6cbc33aa48ee09f5756380.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/source/addons/controller_icons/assets/ps4/l_stick.png b/source/addons/controller_icons/assets/ps4/l_stick.png
new file mode 100644
index 0000000..61b6330
Binary files /dev/null and b/source/addons/controller_icons/assets/ps4/l_stick.png differ
diff --git a/source/addons/controller_icons/assets/ps4/l_stick.png.import b/source/addons/controller_icons/assets/ps4/l_stick.png.import
new file mode 100644
index 0000000..fd9453d
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps4/l_stick.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b8y3vc8sn5lvu"
+path="res://.godot/imported/l_stick.png-fc48bbb457eb14f55412c04cde7dc518.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps4/l_stick.png"
+dest_files=["res://.godot/imported/l_stick.png-fc48bbb457eb14f55412c04cde7dc518.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/source/addons/controller_icons/assets/ps4/l_stick_click.png b/source/addons/controller_icons/assets/ps4/l_stick_click.png
new file mode 100644
index 0000000..ad0428f
Binary files /dev/null and b/source/addons/controller_icons/assets/ps4/l_stick_click.png differ
diff --git a/source/addons/controller_icons/assets/ps4/l_stick_click.png.import b/source/addons/controller_icons/assets/ps4/l_stick_click.png.import
new file mode 100644
index 0000000..d2a7894
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps4/l_stick_click.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dyste7anvays1"
+path="res://.godot/imported/l_stick_click.png-9e3d30c01f3f7fbbd1bf8d68e875e502.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps4/l_stick_click.png"
+dest_files=["res://.godot/imported/l_stick_click.png-9e3d30c01f3f7fbbd1bf8d68e875e502.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/source/addons/controller_icons/assets/ps4/options.png b/source/addons/controller_icons/assets/ps4/options.png
new file mode 100644
index 0000000..21820ed
Binary files /dev/null and b/source/addons/controller_icons/assets/ps4/options.png differ
diff --git a/source/addons/controller_icons/assets/ps4/options.png.import b/source/addons/controller_icons/assets/ps4/options.png.import
new file mode 100644
index 0000000..b1d63fa
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps4/options.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cfbt1pwpnjvva"
+path="res://.godot/imported/options.png-c3fb31c3e90305771b4ea74b6c139e3e.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps4/options.png"
+dest_files=["res://.godot/imported/options.png-c3fb31c3e90305771b4ea74b6c139e3e.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/source/addons/controller_icons/assets/ps4/r1.png b/source/addons/controller_icons/assets/ps4/r1.png
new file mode 100644
index 0000000..b296a5e
Binary files /dev/null and b/source/addons/controller_icons/assets/ps4/r1.png differ
diff --git a/source/addons/controller_icons/assets/ps4/r1.png.import b/source/addons/controller_icons/assets/ps4/r1.png.import
new file mode 100644
index 0000000..f681fdb
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps4/r1.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bs7lcrl1jinbj"
+path="res://.godot/imported/r1.png-b2cc33e4d5182caa83ca9d0b07abef24.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps4/r1.png"
+dest_files=["res://.godot/imported/r1.png-b2cc33e4d5182caa83ca9d0b07abef24.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/source/addons/controller_icons/assets/ps4/r2.png b/source/addons/controller_icons/assets/ps4/r2.png
new file mode 100644
index 0000000..0303819
Binary files /dev/null and b/source/addons/controller_icons/assets/ps4/r2.png differ
diff --git a/source/addons/controller_icons/assets/ps4/r2.png.import b/source/addons/controller_icons/assets/ps4/r2.png.import
new file mode 100644
index 0000000..3b9a521
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps4/r2.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dogjufp4vxrnq"
+path="res://.godot/imported/r2.png-0f2740d264d9152a0d962dc06d3c7e12.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps4/r2.png"
+dest_files=["res://.godot/imported/r2.png-0f2740d264d9152a0d962dc06d3c7e12.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/source/addons/controller_icons/assets/ps4/r_stick.png b/source/addons/controller_icons/assets/ps4/r_stick.png
new file mode 100644
index 0000000..91d66f4
Binary files /dev/null and b/source/addons/controller_icons/assets/ps4/r_stick.png differ
diff --git a/source/addons/controller_icons/assets/ps4/r_stick.png.import b/source/addons/controller_icons/assets/ps4/r_stick.png.import
new file mode 100644
index 0000000..58ccdbe
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps4/r_stick.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://lvpdaaqg50mi"
+path="res://.godot/imported/r_stick.png-335f2cba5a6bd621c084beb16d4cb930.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps4/r_stick.png"
+dest_files=["res://.godot/imported/r_stick.png-335f2cba5a6bd621c084beb16d4cb930.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/source/addons/controller_icons/assets/ps4/r_stick_click.png b/source/addons/controller_icons/assets/ps4/r_stick_click.png
new file mode 100644
index 0000000..de08508
Binary files /dev/null and b/source/addons/controller_icons/assets/ps4/r_stick_click.png differ
diff --git a/source/addons/controller_icons/assets/ps4/r_stick_click.png.import b/source/addons/controller_icons/assets/ps4/r_stick_click.png.import
new file mode 100644
index 0000000..f8f89a5
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps4/r_stick_click.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://nk2eyp23eiup"
+path="res://.godot/imported/r_stick_click.png-d648f8e76cb1035ebd104fecb0d0c268.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps4/r_stick_click.png"
+dest_files=["res://.godot/imported/r_stick_click.png-d648f8e76cb1035ebd104fecb0d0c268.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/source/addons/controller_icons/assets/ps4/share.png b/source/addons/controller_icons/assets/ps4/share.png
new file mode 100644
index 0000000..9a1c4ab
Binary files /dev/null and b/source/addons/controller_icons/assets/ps4/share.png differ
diff --git a/source/addons/controller_icons/assets/ps4/share.png.import b/source/addons/controller_icons/assets/ps4/share.png.import
new file mode 100644
index 0000000..f2b578a
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps4/share.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://btjpw3784tqwk"
+path="res://.godot/imported/share.png-8f5440356f77d78ad3f3982e23b727b9.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps4/share.png"
+dest_files=["res://.godot/imported/share.png-8f5440356f77d78ad3f3982e23b727b9.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/source/addons/controller_icons/assets/ps4/square.png b/source/addons/controller_icons/assets/ps4/square.png
new file mode 100644
index 0000000..3ad1286
Binary files /dev/null and b/source/addons/controller_icons/assets/ps4/square.png differ
diff --git a/source/addons/controller_icons/assets/ps4/square.png.import b/source/addons/controller_icons/assets/ps4/square.png.import
new file mode 100644
index 0000000..b17c261
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps4/square.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://77f8q5t0w3gy"
+path="res://.godot/imported/square.png-ee72c07940fd3321db35ceefeb290300.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps4/square.png"
+dest_files=["res://.godot/imported/square.png-ee72c07940fd3321db35ceefeb290300.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/source/addons/controller_icons/assets/ps4/touch_pad.png b/source/addons/controller_icons/assets/ps4/touch_pad.png
new file mode 100644
index 0000000..2c8e730
Binary files /dev/null and b/source/addons/controller_icons/assets/ps4/touch_pad.png differ
diff --git a/source/addons/controller_icons/assets/ps4/touch_pad.png.import b/source/addons/controller_icons/assets/ps4/touch_pad.png.import
new file mode 100644
index 0000000..8e6aab1
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps4/touch_pad.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bk8ykwla3kyee"
+path="res://.godot/imported/touch_pad.png-7bbb4179df1c702619f3e56dc6165c73.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps4/touch_pad.png"
+dest_files=["res://.godot/imported/touch_pad.png-7bbb4179df1c702619f3e56dc6165c73.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/source/addons/controller_icons/assets/ps4/triangle.png b/source/addons/controller_icons/assets/ps4/triangle.png
new file mode 100644
index 0000000..9dcdbba
Binary files /dev/null and b/source/addons/controller_icons/assets/ps4/triangle.png differ
diff --git a/source/addons/controller_icons/assets/ps4/triangle.png.import b/source/addons/controller_icons/assets/ps4/triangle.png.import
new file mode 100644
index 0000000..89e1aa8
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps4/triangle.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://xklewd7k0tim"
+path="res://.godot/imported/triangle.png-da43fcba8230ca87ef19d28e68d91ddc.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps4/triangle.png"
+dest_files=["res://.godot/imported/triangle.png-da43fcba8230ca87ef19d28e68d91ddc.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/source/addons/controller_icons/assets/ps5/circle.png b/source/addons/controller_icons/assets/ps5/circle.png
new file mode 100644
index 0000000..05a89a9
Binary files /dev/null and b/source/addons/controller_icons/assets/ps5/circle.png differ
diff --git a/source/addons/controller_icons/assets/ps5/circle.png.import b/source/addons/controller_icons/assets/ps5/circle.png.import
new file mode 100644
index 0000000..166598c
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps5/circle.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bri4438gvie1f"
+path="res://.godot/imported/circle.png-899c1a608c9238361ba9359dc8352237.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps5/circle.png"
+dest_files=["res://.godot/imported/circle.png-899c1a608c9238361ba9359dc8352237.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/source/addons/controller_icons/assets/ps5/cross.png b/source/addons/controller_icons/assets/ps5/cross.png
new file mode 100644
index 0000000..395a898
Binary files /dev/null and b/source/addons/controller_icons/assets/ps5/cross.png differ
diff --git a/source/addons/controller_icons/assets/ps5/cross.png.import b/source/addons/controller_icons/assets/ps5/cross.png.import
new file mode 100644
index 0000000..ba9741b
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps5/cross.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://belyhno2tge45"
+path="res://.godot/imported/cross.png-b283effc447d98ff8075473f129fd229.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps5/cross.png"
+dest_files=["res://.godot/imported/cross.png-b283effc447d98ff8075473f129fd229.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/source/addons/controller_icons/assets/ps5/diagram.png b/source/addons/controller_icons/assets/ps5/diagram.png
new file mode 100644
index 0000000..d452d34
Binary files /dev/null and b/source/addons/controller_icons/assets/ps5/diagram.png differ
diff --git a/source/addons/controller_icons/assets/ps5/diagram.png.import b/source/addons/controller_icons/assets/ps5/diagram.png.import
new file mode 100644
index 0000000..df6c187
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps5/diagram.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://e46bxi0x8sk2"
+path="res://.godot/imported/diagram.png-21a10cf2a3943fa6401b25cac8533abe.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps5/diagram.png"
+dest_files=["res://.godot/imported/diagram.png-21a10cf2a3943fa6401b25cac8533abe.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/source/addons/controller_icons/assets/ps5/diagram_simple.png b/source/addons/controller_icons/assets/ps5/diagram_simple.png
new file mode 100644
index 0000000..99d85c9
Binary files /dev/null and b/source/addons/controller_icons/assets/ps5/diagram_simple.png differ
diff --git a/source/addons/controller_icons/assets/ps5/diagram_simple.png.import b/source/addons/controller_icons/assets/ps5/diagram_simple.png.import
new file mode 100644
index 0000000..4f5b11d
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps5/diagram_simple.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dackqyp4i6pej"
+path="res://.godot/imported/diagram_simple.png-1787b04a8e001e271d295cd5be2dbc04.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps5/diagram_simple.png"
+dest_files=["res://.godot/imported/diagram_simple.png-1787b04a8e001e271d295cd5be2dbc04.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/source/addons/controller_icons/assets/ps5/dpad.png b/source/addons/controller_icons/assets/ps5/dpad.png
new file mode 100644
index 0000000..49e6405
Binary files /dev/null and b/source/addons/controller_icons/assets/ps5/dpad.png differ
diff --git a/source/addons/controller_icons/assets/ps5/dpad.png.import b/source/addons/controller_icons/assets/ps5/dpad.png.import
new file mode 100644
index 0000000..bef3bf9
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps5/dpad.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://beffl6nv8eoce"
+path="res://.godot/imported/dpad.png-00aec67b45feaa97b1794d743c936d5f.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps5/dpad.png"
+dest_files=["res://.godot/imported/dpad.png-00aec67b45feaa97b1794d743c936d5f.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/source/addons/controller_icons/assets/ps5/dpad_down.png b/source/addons/controller_icons/assets/ps5/dpad_down.png
new file mode 100644
index 0000000..a8f893a
Binary files /dev/null and b/source/addons/controller_icons/assets/ps5/dpad_down.png differ
diff --git a/source/addons/controller_icons/assets/ps5/dpad_down.png.import b/source/addons/controller_icons/assets/ps5/dpad_down.png.import
new file mode 100644
index 0000000..c28e494
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps5/dpad_down.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cfatmi6wvlpfo"
+path="res://.godot/imported/dpad_down.png-3feaef9a314dd6ae52a31ef8569ba2bc.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps5/dpad_down.png"
+dest_files=["res://.godot/imported/dpad_down.png-3feaef9a314dd6ae52a31ef8569ba2bc.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/source/addons/controller_icons/assets/ps5/dpad_left.png b/source/addons/controller_icons/assets/ps5/dpad_left.png
new file mode 100644
index 0000000..2bdc048
Binary files /dev/null and b/source/addons/controller_icons/assets/ps5/dpad_left.png differ
diff --git a/source/addons/controller_icons/assets/ps5/dpad_left.png.import b/source/addons/controller_icons/assets/ps5/dpad_left.png.import
new file mode 100644
index 0000000..498970c
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps5/dpad_left.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://ckx3ofvrb3luj"
+path="res://.godot/imported/dpad_left.png-64bf99650504668c7743f369e8d66e99.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps5/dpad_left.png"
+dest_files=["res://.godot/imported/dpad_left.png-64bf99650504668c7743f369e8d66e99.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/source/addons/controller_icons/assets/ps5/dpad_right.png b/source/addons/controller_icons/assets/ps5/dpad_right.png
new file mode 100644
index 0000000..b7cd568
Binary files /dev/null and b/source/addons/controller_icons/assets/ps5/dpad_right.png differ
diff --git a/source/addons/controller_icons/assets/ps5/dpad_right.png.import b/source/addons/controller_icons/assets/ps5/dpad_right.png.import
new file mode 100644
index 0000000..810a54a
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps5/dpad_right.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bha2mk6ybhqq1"
+path="res://.godot/imported/dpad_right.png-ac99de9134bc8dac8efce489d7997a23.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps5/dpad_right.png"
+dest_files=["res://.godot/imported/dpad_right.png-ac99de9134bc8dac8efce489d7997a23.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/source/addons/controller_icons/assets/ps5/dpad_up.png b/source/addons/controller_icons/assets/ps5/dpad_up.png
new file mode 100644
index 0000000..99180d2
Binary files /dev/null and b/source/addons/controller_icons/assets/ps5/dpad_up.png differ
diff --git a/source/addons/controller_icons/assets/ps5/dpad_up.png.import b/source/addons/controller_icons/assets/ps5/dpad_up.png.import
new file mode 100644
index 0000000..8f3f83c
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps5/dpad_up.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://chj3vtwuwu2fa"
+path="res://.godot/imported/dpad_up.png-bea6ace373247dd17fb25f7f3e0f6b07.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps5/dpad_up.png"
+dest_files=["res://.godot/imported/dpad_up.png-bea6ace373247dd17fb25f7f3e0f6b07.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/source/addons/controller_icons/assets/ps5/l1.png b/source/addons/controller_icons/assets/ps5/l1.png
new file mode 100644
index 0000000..07e505a
Binary files /dev/null and b/source/addons/controller_icons/assets/ps5/l1.png differ
diff --git a/source/addons/controller_icons/assets/ps5/l1.png.import b/source/addons/controller_icons/assets/ps5/l1.png.import
new file mode 100644
index 0000000..078cff1
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps5/l1.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cptsbtql4gq7f"
+path="res://.godot/imported/l1.png-1dbab572c17a5f38e671c2db53d5037e.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps5/l1.png"
+dest_files=["res://.godot/imported/l1.png-1dbab572c17a5f38e671c2db53d5037e.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/source/addons/controller_icons/assets/ps5/l2.png b/source/addons/controller_icons/assets/ps5/l2.png
new file mode 100644
index 0000000..05f3dd2
Binary files /dev/null and b/source/addons/controller_icons/assets/ps5/l2.png differ
diff --git a/source/addons/controller_icons/assets/ps5/l2.png.import b/source/addons/controller_icons/assets/ps5/l2.png.import
new file mode 100644
index 0000000..8192fea
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps5/l2.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dr554tkwtvx7d"
+path="res://.godot/imported/l2.png-e8cc4c0283c6b3b54d63e008d0690aa6.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps5/l2.png"
+dest_files=["res://.godot/imported/l2.png-e8cc4c0283c6b3b54d63e008d0690aa6.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/source/addons/controller_icons/assets/ps5/l_stick.png b/source/addons/controller_icons/assets/ps5/l_stick.png
new file mode 100644
index 0000000..0245ff8
Binary files /dev/null and b/source/addons/controller_icons/assets/ps5/l_stick.png differ
diff --git a/source/addons/controller_icons/assets/ps5/l_stick.png.import b/source/addons/controller_icons/assets/ps5/l_stick.png.import
new file mode 100644
index 0000000..f60e5db
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps5/l_stick.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dwkmm5mtpc46o"
+path="res://.godot/imported/l_stick.png-fba628dc0742fc567477799a16835c0f.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps5/l_stick.png"
+dest_files=["res://.godot/imported/l_stick.png-fba628dc0742fc567477799a16835c0f.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/source/addons/controller_icons/assets/ps5/l_stick_click.png b/source/addons/controller_icons/assets/ps5/l_stick_click.png
new file mode 100644
index 0000000..66e5271
Binary files /dev/null and b/source/addons/controller_icons/assets/ps5/l_stick_click.png differ
diff --git a/source/addons/controller_icons/assets/ps5/l_stick_click.png.import b/source/addons/controller_icons/assets/ps5/l_stick_click.png.import
new file mode 100644
index 0000000..bccdeba
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps5/l_stick_click.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://2ehovw43mq41"
+path="res://.godot/imported/l_stick_click.png-ca560b0370da6348af3fa4a6dd2b76f5.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps5/l_stick_click.png"
+dest_files=["res://.godot/imported/l_stick_click.png-ca560b0370da6348af3fa4a6dd2b76f5.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/source/addons/controller_icons/assets/ps5/microphone.png b/source/addons/controller_icons/assets/ps5/microphone.png
new file mode 100644
index 0000000..bb0f331
Binary files /dev/null and b/source/addons/controller_icons/assets/ps5/microphone.png differ
diff --git a/source/addons/controller_icons/assets/ps5/microphone.png.import b/source/addons/controller_icons/assets/ps5/microphone.png.import
new file mode 100644
index 0000000..835f6b9
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps5/microphone.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://pjngcu888j2h"
+path="res://.godot/imported/microphone.png-52a21a21c13dc3691829948c71961c62.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps5/microphone.png"
+dest_files=["res://.godot/imported/microphone.png-52a21a21c13dc3691829948c71961c62.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/source/addons/controller_icons/assets/ps5/options.png b/source/addons/controller_icons/assets/ps5/options.png
new file mode 100644
index 0000000..3e56fe2
Binary files /dev/null and b/source/addons/controller_icons/assets/ps5/options.png differ
diff --git a/source/addons/controller_icons/assets/ps5/options.png.import b/source/addons/controller_icons/assets/ps5/options.png.import
new file mode 100644
index 0000000..5309317
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps5/options.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dihbnhx3krnjw"
+path="res://.godot/imported/options.png-da4d32b86bae8f981620c1bbef1482ca.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps5/options.png"
+dest_files=["res://.godot/imported/options.png-da4d32b86bae8f981620c1bbef1482ca.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/source/addons/controller_icons/assets/ps5/options_alt.png b/source/addons/controller_icons/assets/ps5/options_alt.png
new file mode 100644
index 0000000..ca28364
Binary files /dev/null and b/source/addons/controller_icons/assets/ps5/options_alt.png differ
diff --git a/source/addons/controller_icons/assets/ps5/options_alt.png.import b/source/addons/controller_icons/assets/ps5/options_alt.png.import
new file mode 100644
index 0000000..6259b0e
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps5/options_alt.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cfn54dcp6oime"
+path="res://.godot/imported/options_alt.png-c593663a8f76955c80b23e8f042168ca.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps5/options_alt.png"
+dest_files=["res://.godot/imported/options_alt.png-c593663a8f76955c80b23e8f042168ca.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/source/addons/controller_icons/assets/ps5/r1.png b/source/addons/controller_icons/assets/ps5/r1.png
new file mode 100644
index 0000000..2cff97a
Binary files /dev/null and b/source/addons/controller_icons/assets/ps5/r1.png differ
diff --git a/source/addons/controller_icons/assets/ps5/r1.png.import b/source/addons/controller_icons/assets/ps5/r1.png.import
new file mode 100644
index 0000000..73db2df
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps5/r1.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dshu7ejne3fv3"
+path="res://.godot/imported/r1.png-fa610c0190f3f0984090193cb99c26c3.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps5/r1.png"
+dest_files=["res://.godot/imported/r1.png-fa610c0190f3f0984090193cb99c26c3.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/source/addons/controller_icons/assets/ps5/r2.png b/source/addons/controller_icons/assets/ps5/r2.png
new file mode 100644
index 0000000..a13f17f
Binary files /dev/null and b/source/addons/controller_icons/assets/ps5/r2.png differ
diff --git a/source/addons/controller_icons/assets/ps5/r2.png.import b/source/addons/controller_icons/assets/ps5/r2.png.import
new file mode 100644
index 0000000..a9dc1e7
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps5/r2.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dwxe8qbcua1to"
+path="res://.godot/imported/r2.png-b8eac74642614e99f555e46a0181e4d0.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps5/r2.png"
+dest_files=["res://.godot/imported/r2.png-b8eac74642614e99f555e46a0181e4d0.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/source/addons/controller_icons/assets/ps5/r_stick.png b/source/addons/controller_icons/assets/ps5/r_stick.png
new file mode 100644
index 0000000..85c1556
Binary files /dev/null and b/source/addons/controller_icons/assets/ps5/r_stick.png differ
diff --git a/source/addons/controller_icons/assets/ps5/r_stick.png.import b/source/addons/controller_icons/assets/ps5/r_stick.png.import
new file mode 100644
index 0000000..acc7820
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps5/r_stick.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c4orcrdsy1akr"
+path="res://.godot/imported/r_stick.png-307bf90c96a761c29568ba8c2317686c.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps5/r_stick.png"
+dest_files=["res://.godot/imported/r_stick.png-307bf90c96a761c29568ba8c2317686c.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/source/addons/controller_icons/assets/ps5/r_stick_click.png b/source/addons/controller_icons/assets/ps5/r_stick_click.png
new file mode 100644
index 0000000..eecd4e8
Binary files /dev/null and b/source/addons/controller_icons/assets/ps5/r_stick_click.png differ
diff --git a/source/addons/controller_icons/assets/ps5/r_stick_click.png.import b/source/addons/controller_icons/assets/ps5/r_stick_click.png.import
new file mode 100644
index 0000000..0d9efca
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps5/r_stick_click.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dpvd1a8tomykb"
+path="res://.godot/imported/r_stick_click.png-971e79762425c58c9da5a80737fe31cc.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps5/r_stick_click.png"
+dest_files=["res://.godot/imported/r_stick_click.png-971e79762425c58c9da5a80737fe31cc.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/source/addons/controller_icons/assets/ps5/share.png b/source/addons/controller_icons/assets/ps5/share.png
new file mode 100644
index 0000000..d96e698
Binary files /dev/null and b/source/addons/controller_icons/assets/ps5/share.png differ
diff --git a/source/addons/controller_icons/assets/ps5/share.png.import b/source/addons/controller_icons/assets/ps5/share.png.import
new file mode 100644
index 0000000..39db26e
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps5/share.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cagxvtko4awd8"
+path="res://.godot/imported/share.png-a33890317e3226e9b99cebbbfe855141.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps5/share.png"
+dest_files=["res://.godot/imported/share.png-a33890317e3226e9b99cebbbfe855141.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/source/addons/controller_icons/assets/ps5/share_alt.png b/source/addons/controller_icons/assets/ps5/share_alt.png
new file mode 100644
index 0000000..10941aa
Binary files /dev/null and b/source/addons/controller_icons/assets/ps5/share_alt.png differ
diff --git a/source/addons/controller_icons/assets/ps5/share_alt.png.import b/source/addons/controller_icons/assets/ps5/share_alt.png.import
new file mode 100644
index 0000000..84a21c3
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps5/share_alt.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bl176l6frbhu"
+path="res://.godot/imported/share_alt.png-15dd25ceafbe1a81af5420db0b8177fb.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps5/share_alt.png"
+dest_files=["res://.godot/imported/share_alt.png-15dd25ceafbe1a81af5420db0b8177fb.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/source/addons/controller_icons/assets/ps5/square.png b/source/addons/controller_icons/assets/ps5/square.png
new file mode 100644
index 0000000..20f6065
Binary files /dev/null and b/source/addons/controller_icons/assets/ps5/square.png differ
diff --git a/source/addons/controller_icons/assets/ps5/square.png.import b/source/addons/controller_icons/assets/ps5/square.png.import
new file mode 100644
index 0000000..59a0f77
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps5/square.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bb8qjwcmyrtk4"
+path="res://.godot/imported/square.png-3f9dd349449b9b92bc9a0b5deebb6dc4.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps5/square.png"
+dest_files=["res://.godot/imported/square.png-3f9dd349449b9b92bc9a0b5deebb6dc4.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/source/addons/controller_icons/assets/ps5/touch_pad.png b/source/addons/controller_icons/assets/ps5/touch_pad.png
new file mode 100644
index 0000000..1a77d0c
Binary files /dev/null and b/source/addons/controller_icons/assets/ps5/touch_pad.png differ
diff --git a/source/addons/controller_icons/assets/ps5/touch_pad.png.import b/source/addons/controller_icons/assets/ps5/touch_pad.png.import
new file mode 100644
index 0000000..d8c4a61
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps5/touch_pad.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://drx7nm004x5i3"
+path="res://.godot/imported/touch_pad.png-1ef4d501193c49e180986793017fe36a.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps5/touch_pad.png"
+dest_files=["res://.godot/imported/touch_pad.png-1ef4d501193c49e180986793017fe36a.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/source/addons/controller_icons/assets/ps5/triangle.png b/source/addons/controller_icons/assets/ps5/triangle.png
new file mode 100644
index 0000000..4950d17
Binary files /dev/null and b/source/addons/controller_icons/assets/ps5/triangle.png differ
diff --git a/source/addons/controller_icons/assets/ps5/triangle.png.import b/source/addons/controller_icons/assets/ps5/triangle.png.import
new file mode 100644
index 0000000..0597267
--- /dev/null
+++ b/source/addons/controller_icons/assets/ps5/triangle.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c05iqfpx578f2"
+path="res://.godot/imported/triangle.png-c318942d066e6716a1f2a4c38ef81b3e.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/ps5/triangle.png"
+dest_files=["res://.godot/imported/triangle.png-c318942d066e6716a1f2a4c38ef81b3e.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/source/addons/controller_icons/assets/stadia/a.png b/source/addons/controller_icons/assets/stadia/a.png
new file mode 100644
index 0000000..7a0e6e1
Binary files /dev/null and b/source/addons/controller_icons/assets/stadia/a.png differ
diff --git a/source/addons/controller_icons/assets/stadia/a.png.import b/source/addons/controller_icons/assets/stadia/a.png.import
new file mode 100644
index 0000000..f406939
--- /dev/null
+++ b/source/addons/controller_icons/assets/stadia/a.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bv4qgyj7ctpdi"
+path="res://.godot/imported/a.png-f39af9db7ec42a6167445f21d52dd49e.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/stadia/a.png"
+dest_files=["res://.godot/imported/a.png-f39af9db7ec42a6167445f21d52dd49e.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/source/addons/controller_icons/assets/stadia/assistant.png b/source/addons/controller_icons/assets/stadia/assistant.png
new file mode 100644
index 0000000..78ad612
Binary files /dev/null and b/source/addons/controller_icons/assets/stadia/assistant.png differ
diff --git a/source/addons/controller_icons/assets/stadia/assistant.png.import b/source/addons/controller_icons/assets/stadia/assistant.png.import
new file mode 100644
index 0000000..b6cbd71
--- /dev/null
+++ b/source/addons/controller_icons/assets/stadia/assistant.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://eb1e5xeb87ty"
+path="res://.godot/imported/assistant.png-2a4e3627b05fcf62f61e45e5dfad1445.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/stadia/assistant.png"
+dest_files=["res://.godot/imported/assistant.png-2a4e3627b05fcf62f61e45e5dfad1445.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/source/addons/controller_icons/assets/stadia/b.png b/source/addons/controller_icons/assets/stadia/b.png
new file mode 100644
index 0000000..bd71b2d
Binary files /dev/null and b/source/addons/controller_icons/assets/stadia/b.png differ
diff --git a/source/addons/controller_icons/assets/stadia/b.png.import b/source/addons/controller_icons/assets/stadia/b.png.import
new file mode 100644
index 0000000..48efdfc
--- /dev/null
+++ b/source/addons/controller_icons/assets/stadia/b.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://sxuvnex00hi1"
+path="res://.godot/imported/b.png-a0cbab91a3c959de17829d12080654c4.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/stadia/b.png"
+dest_files=["res://.godot/imported/b.png-a0cbab91a3c959de17829d12080654c4.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/source/addons/controller_icons/assets/stadia/dots.png b/source/addons/controller_icons/assets/stadia/dots.png
new file mode 100644
index 0000000..cba1e78
Binary files /dev/null and b/source/addons/controller_icons/assets/stadia/dots.png differ
diff --git a/source/addons/controller_icons/assets/stadia/dots.png.import b/source/addons/controller_icons/assets/stadia/dots.png.import
new file mode 100644
index 0000000..2582096
--- /dev/null
+++ b/source/addons/controller_icons/assets/stadia/dots.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bnyru0b0n5iqs"
+path="res://.godot/imported/dots.png-b263d2845e2a883a9e404681ffe43345.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/stadia/dots.png"
+dest_files=["res://.godot/imported/dots.png-b263d2845e2a883a9e404681ffe43345.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/source/addons/controller_icons/assets/stadia/dpad.png b/source/addons/controller_icons/assets/stadia/dpad.png
new file mode 100644
index 0000000..4c8663a
Binary files /dev/null and b/source/addons/controller_icons/assets/stadia/dpad.png differ
diff --git a/source/addons/controller_icons/assets/stadia/dpad.png.import b/source/addons/controller_icons/assets/stadia/dpad.png.import
new file mode 100644
index 0000000..15bea33
--- /dev/null
+++ b/source/addons/controller_icons/assets/stadia/dpad.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bddbmt3fx4djh"
+path="res://.godot/imported/dpad.png-58485bb8e8b0aa997156eb8f8ff9fbb0.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/stadia/dpad.png"
+dest_files=["res://.godot/imported/dpad.png-58485bb8e8b0aa997156eb8f8ff9fbb0.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/source/addons/controller_icons/assets/stadia/dpad_down.png b/source/addons/controller_icons/assets/stadia/dpad_down.png
new file mode 100644
index 0000000..ca2ad56
Binary files /dev/null and b/source/addons/controller_icons/assets/stadia/dpad_down.png differ
diff --git a/source/addons/controller_icons/assets/stadia/dpad_down.png.import b/source/addons/controller_icons/assets/stadia/dpad_down.png.import
new file mode 100644
index 0000000..9163293
--- /dev/null
+++ b/source/addons/controller_icons/assets/stadia/dpad_down.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cf1yr1jpwoqd4"
+path="res://.godot/imported/dpad_down.png-0e0070ab4a731afd3204175e1539f822.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/stadia/dpad_down.png"
+dest_files=["res://.godot/imported/dpad_down.png-0e0070ab4a731afd3204175e1539f822.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/source/addons/controller_icons/assets/stadia/dpad_left.png b/source/addons/controller_icons/assets/stadia/dpad_left.png
new file mode 100644
index 0000000..90ab042
Binary files /dev/null and b/source/addons/controller_icons/assets/stadia/dpad_left.png differ
diff --git a/source/addons/controller_icons/assets/stadia/dpad_left.png.import b/source/addons/controller_icons/assets/stadia/dpad_left.png.import
new file mode 100644
index 0000000..6403e48
--- /dev/null
+++ b/source/addons/controller_icons/assets/stadia/dpad_left.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cq7w3jth676di"
+path="res://.godot/imported/dpad_left.png-6f793e4e26f3c710bdbc49c5329c5eff.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/stadia/dpad_left.png"
+dest_files=["res://.godot/imported/dpad_left.png-6f793e4e26f3c710bdbc49c5329c5eff.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/source/addons/controller_icons/assets/stadia/dpad_right.png b/source/addons/controller_icons/assets/stadia/dpad_right.png
new file mode 100644
index 0000000..23a5445
Binary files /dev/null and b/source/addons/controller_icons/assets/stadia/dpad_right.png differ
diff --git a/source/addons/controller_icons/assets/stadia/dpad_right.png.import b/source/addons/controller_icons/assets/stadia/dpad_right.png.import
new file mode 100644
index 0000000..2d8fab3
--- /dev/null
+++ b/source/addons/controller_icons/assets/stadia/dpad_right.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://7ssgv6rjgy3h"
+path="res://.godot/imported/dpad_right.png-a38451b01e6223d51bc488908900e4a4.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/stadia/dpad_right.png"
+dest_files=["res://.godot/imported/dpad_right.png-a38451b01e6223d51bc488908900e4a4.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/source/addons/controller_icons/assets/stadia/dpad_up.png b/source/addons/controller_icons/assets/stadia/dpad_up.png
new file mode 100644
index 0000000..df9553c
Binary files /dev/null and b/source/addons/controller_icons/assets/stadia/dpad_up.png differ
diff --git a/source/addons/controller_icons/assets/stadia/dpad_up.png.import b/source/addons/controller_icons/assets/stadia/dpad_up.png.import
new file mode 100644
index 0000000..e80f92d
--- /dev/null
+++ b/source/addons/controller_icons/assets/stadia/dpad_up.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dw8p3es1mkcqp"
+path="res://.godot/imported/dpad_up.png-61f0cbde467cee63157b87d1351e499d.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/stadia/dpad_up.png"
+dest_files=["res://.godot/imported/dpad_up.png-61f0cbde467cee63157b87d1351e499d.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/source/addons/controller_icons/assets/stadia/l1.png b/source/addons/controller_icons/assets/stadia/l1.png
new file mode 100644
index 0000000..ad8b15e
Binary files /dev/null and b/source/addons/controller_icons/assets/stadia/l1.png differ
diff --git a/source/addons/controller_icons/assets/stadia/l1.png.import b/source/addons/controller_icons/assets/stadia/l1.png.import
new file mode 100644
index 0000000..33e1816
--- /dev/null
+++ b/source/addons/controller_icons/assets/stadia/l1.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://0juhj61jiqig"
+path="res://.godot/imported/l1.png-40772d284cfbbb0f5e00a0d2807ad772.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/stadia/l1.png"
+dest_files=["res://.godot/imported/l1.png-40772d284cfbbb0f5e00a0d2807ad772.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/source/addons/controller_icons/assets/stadia/l2.png b/source/addons/controller_icons/assets/stadia/l2.png
new file mode 100644
index 0000000..cfb2441
Binary files /dev/null and b/source/addons/controller_icons/assets/stadia/l2.png differ
diff --git a/source/addons/controller_icons/assets/stadia/l2.png.import b/source/addons/controller_icons/assets/stadia/l2.png.import
new file mode 100644
index 0000000..aa11be5
--- /dev/null
+++ b/source/addons/controller_icons/assets/stadia/l2.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b3mxt82tfc0qr"
+path="res://.godot/imported/l2.png-65410a5b5bf71ded0383e7be48e96124.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/stadia/l2.png"
+dest_files=["res://.godot/imported/l2.png-65410a5b5bf71ded0383e7be48e96124.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/source/addons/controller_icons/assets/stadia/l_stick.png b/source/addons/controller_icons/assets/stadia/l_stick.png
new file mode 100644
index 0000000..de49dc6
Binary files /dev/null and b/source/addons/controller_icons/assets/stadia/l_stick.png differ
diff --git a/source/addons/controller_icons/assets/stadia/l_stick.png.import b/source/addons/controller_icons/assets/stadia/l_stick.png.import
new file mode 100644
index 0000000..4e133d9
--- /dev/null
+++ b/source/addons/controller_icons/assets/stadia/l_stick.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bkig588ldv8l1"
+path="res://.godot/imported/l_stick.png-c7374b4ac7c738d8b0635b5617f8b92d.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/stadia/l_stick.png"
+dest_files=["res://.godot/imported/l_stick.png-c7374b4ac7c738d8b0635b5617f8b92d.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/source/addons/controller_icons/assets/stadia/menu.png b/source/addons/controller_icons/assets/stadia/menu.png
new file mode 100644
index 0000000..173efdf
Binary files /dev/null and b/source/addons/controller_icons/assets/stadia/menu.png differ
diff --git a/source/addons/controller_icons/assets/stadia/menu.png.import b/source/addons/controller_icons/assets/stadia/menu.png.import
new file mode 100644
index 0000000..917341c
--- /dev/null
+++ b/source/addons/controller_icons/assets/stadia/menu.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://clsidc7meysf1"
+path="res://.godot/imported/menu.png-53cbf3eec3a419b76e5e61ce64721148.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/stadia/menu.png"
+dest_files=["res://.godot/imported/menu.png-53cbf3eec3a419b76e5e61ce64721148.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/source/addons/controller_icons/assets/stadia/r1.png b/source/addons/controller_icons/assets/stadia/r1.png
new file mode 100644
index 0000000..747c8fa
Binary files /dev/null and b/source/addons/controller_icons/assets/stadia/r1.png differ
diff --git a/source/addons/controller_icons/assets/stadia/r1.png.import b/source/addons/controller_icons/assets/stadia/r1.png.import
new file mode 100644
index 0000000..ba665f5
--- /dev/null
+++ b/source/addons/controller_icons/assets/stadia/r1.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://ckfju5othymuc"
+path="res://.godot/imported/r1.png-61ddcf999e521e50e31454c7421b13c5.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/stadia/r1.png"
+dest_files=["res://.godot/imported/r1.png-61ddcf999e521e50e31454c7421b13c5.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/source/addons/controller_icons/assets/stadia/r2.png b/source/addons/controller_icons/assets/stadia/r2.png
new file mode 100644
index 0000000..a1a5b35
Binary files /dev/null and b/source/addons/controller_icons/assets/stadia/r2.png differ
diff --git a/source/addons/controller_icons/assets/stadia/r2.png.import b/source/addons/controller_icons/assets/stadia/r2.png.import
new file mode 100644
index 0000000..3598fd5
--- /dev/null
+++ b/source/addons/controller_icons/assets/stadia/r2.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bcwlmbqr5byql"
+path="res://.godot/imported/r2.png-264029ef902dd23d9d2aedc9076396d3.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/stadia/r2.png"
+dest_files=["res://.godot/imported/r2.png-264029ef902dd23d9d2aedc9076396d3.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/source/addons/controller_icons/assets/stadia/r_stick.png b/source/addons/controller_icons/assets/stadia/r_stick.png
new file mode 100644
index 0000000..866be1c
Binary files /dev/null and b/source/addons/controller_icons/assets/stadia/r_stick.png differ
diff --git a/source/addons/controller_icons/assets/stadia/r_stick.png.import b/source/addons/controller_icons/assets/stadia/r_stick.png.import
new file mode 100644
index 0000000..cd5c061
--- /dev/null
+++ b/source/addons/controller_icons/assets/stadia/r_stick.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://rob68as0a0nx"
+path="res://.godot/imported/r_stick.png-6b5f1cef528e226a07bca3b5db7cee23.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/stadia/r_stick.png"
+dest_files=["res://.godot/imported/r_stick.png-6b5f1cef528e226a07bca3b5db7cee23.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/source/addons/controller_icons/assets/stadia/select.png b/source/addons/controller_icons/assets/stadia/select.png
new file mode 100644
index 0000000..38df6c3
Binary files /dev/null and b/source/addons/controller_icons/assets/stadia/select.png differ
diff --git a/source/addons/controller_icons/assets/stadia/select.png.import b/source/addons/controller_icons/assets/stadia/select.png.import
new file mode 100644
index 0000000..b5db3c9
--- /dev/null
+++ b/source/addons/controller_icons/assets/stadia/select.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://ii5p47rg6nu4"
+path="res://.godot/imported/select.png-5f6095f9bd8662055bec7c1bae674ec9.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/stadia/select.png"
+dest_files=["res://.godot/imported/select.png-5f6095f9bd8662055bec7c1bae674ec9.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/source/addons/controller_icons/assets/stadia/x.png b/source/addons/controller_icons/assets/stadia/x.png
new file mode 100644
index 0000000..eb1ef40
Binary files /dev/null and b/source/addons/controller_icons/assets/stadia/x.png differ
diff --git a/source/addons/controller_icons/assets/stadia/x.png.import b/source/addons/controller_icons/assets/stadia/x.png.import
new file mode 100644
index 0000000..ed17556
--- /dev/null
+++ b/source/addons/controller_icons/assets/stadia/x.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://4j3otk7ktg5s"
+path="res://.godot/imported/x.png-f6ec30ea08344e55ef23af72fbc1fb31.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/stadia/x.png"
+dest_files=["res://.godot/imported/x.png-f6ec30ea08344e55ef23af72fbc1fb31.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/source/addons/controller_icons/assets/stadia/y.png b/source/addons/controller_icons/assets/stadia/y.png
new file mode 100644
index 0000000..dbcf567
Binary files /dev/null and b/source/addons/controller_icons/assets/stadia/y.png differ
diff --git a/source/addons/controller_icons/assets/stadia/y.png.import b/source/addons/controller_icons/assets/stadia/y.png.import
new file mode 100644
index 0000000..146e2bc
--- /dev/null
+++ b/source/addons/controller_icons/assets/stadia/y.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bcbp6ptwubct6"
+path="res://.godot/imported/y.png-dd7e8e12e20316029c271244b0ca0229.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/stadia/y.png"
+dest_files=["res://.godot/imported/y.png-dd7e8e12e20316029c271244b0ca0229.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/source/addons/controller_icons/assets/steam/a.png b/source/addons/controller_icons/assets/steam/a.png
new file mode 100644
index 0000000..60c214f
Binary files /dev/null and b/source/addons/controller_icons/assets/steam/a.png differ
diff --git a/source/addons/controller_icons/assets/steam/a.png.import b/source/addons/controller_icons/assets/steam/a.png.import
new file mode 100644
index 0000000..5a665b2
--- /dev/null
+++ b/source/addons/controller_icons/assets/steam/a.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cajx1v8mvjdv7"
+path="res://.godot/imported/a.png-291a1f58c8f457602e861970d6116395.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steam/a.png"
+dest_files=["res://.godot/imported/a.png-291a1f58c8f457602e861970d6116395.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/source/addons/controller_icons/assets/steam/b.png b/source/addons/controller_icons/assets/steam/b.png
new file mode 100644
index 0000000..a1ba1a0
Binary files /dev/null and b/source/addons/controller_icons/assets/steam/b.png differ
diff --git a/source/addons/controller_icons/assets/steam/b.png.import b/source/addons/controller_icons/assets/steam/b.png.import
new file mode 100644
index 0000000..209e115
--- /dev/null
+++ b/source/addons/controller_icons/assets/steam/b.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://csbpy7me5gb6u"
+path="res://.godot/imported/b.png-60ef9dcdf26e65601a22afc1fe68bbde.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steam/b.png"
+dest_files=["res://.godot/imported/b.png-60ef9dcdf26e65601a22afc1fe68bbde.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/source/addons/controller_icons/assets/steam/back.png b/source/addons/controller_icons/assets/steam/back.png
new file mode 100644
index 0000000..147eca2
Binary files /dev/null and b/source/addons/controller_icons/assets/steam/back.png differ
diff --git a/source/addons/controller_icons/assets/steam/back.png.import b/source/addons/controller_icons/assets/steam/back.png.import
new file mode 100644
index 0000000..259a2c9
--- /dev/null
+++ b/source/addons/controller_icons/assets/steam/back.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://kphomjfyki6u"
+path="res://.godot/imported/back.png-aa3128aa827340fec92b81bdf0d61ea4.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steam/back.png"
+dest_files=["res://.godot/imported/back.png-aa3128aa827340fec92b81bdf0d61ea4.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/source/addons/controller_icons/assets/steam/gyro.png b/source/addons/controller_icons/assets/steam/gyro.png
new file mode 100644
index 0000000..6e62084
Binary files /dev/null and b/source/addons/controller_icons/assets/steam/gyro.png differ
diff --git a/source/addons/controller_icons/assets/steam/gyro.png.import b/source/addons/controller_icons/assets/steam/gyro.png.import
new file mode 100644
index 0000000..b4a28a2
--- /dev/null
+++ b/source/addons/controller_icons/assets/steam/gyro.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bt4f535r5jbiq"
+path="res://.godot/imported/gyro.png-036a1df6f9221b801ce960258264e36b.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steam/gyro.png"
+dest_files=["res://.godot/imported/gyro.png-036a1df6f9221b801ce960258264e36b.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/source/addons/controller_icons/assets/steam/lb.png b/source/addons/controller_icons/assets/steam/lb.png
new file mode 100644
index 0000000..867ad60
Binary files /dev/null and b/source/addons/controller_icons/assets/steam/lb.png differ
diff --git a/source/addons/controller_icons/assets/steam/lb.png.import b/source/addons/controller_icons/assets/steam/lb.png.import
new file mode 100644
index 0000000..217482b
--- /dev/null
+++ b/source/addons/controller_icons/assets/steam/lb.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://digmlx17iy336"
+path="res://.godot/imported/lb.png-ebcecead80d2eaa8e8dd39203374482c.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steam/lb.png"
+dest_files=["res://.godot/imported/lb.png-ebcecead80d2eaa8e8dd39203374482c.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/source/addons/controller_icons/assets/steam/left_grip.png b/source/addons/controller_icons/assets/steam/left_grip.png
new file mode 100644
index 0000000..b9417c0
Binary files /dev/null and b/source/addons/controller_icons/assets/steam/left_grip.png differ
diff --git a/source/addons/controller_icons/assets/steam/left_grip.png.import b/source/addons/controller_icons/assets/steam/left_grip.png.import
new file mode 100644
index 0000000..4498efd
--- /dev/null
+++ b/source/addons/controller_icons/assets/steam/left_grip.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://ctjkl1pjr5p4r"
+path="res://.godot/imported/left_grip.png-7632e6b4dc516d33c14edaaca9a800f6.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steam/left_grip.png"
+dest_files=["res://.godot/imported/left_grip.png-7632e6b4dc516d33c14edaaca9a800f6.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/source/addons/controller_icons/assets/steam/left_track.png b/source/addons/controller_icons/assets/steam/left_track.png
new file mode 100644
index 0000000..59f9ae1
Binary files /dev/null and b/source/addons/controller_icons/assets/steam/left_track.png differ
diff --git a/source/addons/controller_icons/assets/steam/left_track.png.import b/source/addons/controller_icons/assets/steam/left_track.png.import
new file mode 100644
index 0000000..c126a55
--- /dev/null
+++ b/source/addons/controller_icons/assets/steam/left_track.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dtll2c2c8oit8"
+path="res://.godot/imported/left_track.png-17f05d6fcb42e2752708554a7e0bac57.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steam/left_track.png"
+dest_files=["res://.godot/imported/left_track.png-17f05d6fcb42e2752708554a7e0bac57.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/source/addons/controller_icons/assets/steam/left_track_center.png b/source/addons/controller_icons/assets/steam/left_track_center.png
new file mode 100644
index 0000000..37fc0f9
Binary files /dev/null and b/source/addons/controller_icons/assets/steam/left_track_center.png differ
diff --git a/source/addons/controller_icons/assets/steam/left_track_center.png.import b/source/addons/controller_icons/assets/steam/left_track_center.png.import
new file mode 100644
index 0000000..8c95191
--- /dev/null
+++ b/source/addons/controller_icons/assets/steam/left_track_center.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://chis8pjw070yd"
+path="res://.godot/imported/left_track_center.png-f881a55ee2c591d91924bfeb7df3151e.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steam/left_track_center.png"
+dest_files=["res://.godot/imported/left_track_center.png-f881a55ee2c591d91924bfeb7df3151e.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/source/addons/controller_icons/assets/steam/left_track_down.png b/source/addons/controller_icons/assets/steam/left_track_down.png
new file mode 100644
index 0000000..92c62ea
Binary files /dev/null and b/source/addons/controller_icons/assets/steam/left_track_down.png differ
diff --git a/source/addons/controller_icons/assets/steam/left_track_down.png.import b/source/addons/controller_icons/assets/steam/left_track_down.png.import
new file mode 100644
index 0000000..e3f78d9
--- /dev/null
+++ b/source/addons/controller_icons/assets/steam/left_track_down.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bnx2r5xyltcke"
+path="res://.godot/imported/left_track_down.png-23a43b41ab965600405a2c0ec8054bca.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steam/left_track_down.png"
+dest_files=["res://.godot/imported/left_track_down.png-23a43b41ab965600405a2c0ec8054bca.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/source/addons/controller_icons/assets/steam/left_track_left.png b/source/addons/controller_icons/assets/steam/left_track_left.png
new file mode 100644
index 0000000..23981de
Binary files /dev/null and b/source/addons/controller_icons/assets/steam/left_track_left.png differ
diff --git a/source/addons/controller_icons/assets/steam/left_track_left.png.import b/source/addons/controller_icons/assets/steam/left_track_left.png.import
new file mode 100644
index 0000000..d08dd91
--- /dev/null
+++ b/source/addons/controller_icons/assets/steam/left_track_left.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://clcdu5delmmh5"
+path="res://.godot/imported/left_track_left.png-8654431bd0ad63399af945958e0c4b5c.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steam/left_track_left.png"
+dest_files=["res://.godot/imported/left_track_left.png-8654431bd0ad63399af945958e0c4b5c.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/source/addons/controller_icons/assets/steam/left_track_right.png b/source/addons/controller_icons/assets/steam/left_track_right.png
new file mode 100644
index 0000000..8b936ff
Binary files /dev/null and b/source/addons/controller_icons/assets/steam/left_track_right.png differ
diff --git a/source/addons/controller_icons/assets/steam/left_track_right.png.import b/source/addons/controller_icons/assets/steam/left_track_right.png.import
new file mode 100644
index 0000000..7e62634
--- /dev/null
+++ b/source/addons/controller_icons/assets/steam/left_track_right.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://uowibbyy0t2e"
+path="res://.godot/imported/left_track_right.png-56a1c44260f8d7e4060f6cf701cca3e6.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steam/left_track_right.png"
+dest_files=["res://.godot/imported/left_track_right.png-56a1c44260f8d7e4060f6cf701cca3e6.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/source/addons/controller_icons/assets/steam/left_track_up.png b/source/addons/controller_icons/assets/steam/left_track_up.png
new file mode 100644
index 0000000..419ce70
Binary files /dev/null and b/source/addons/controller_icons/assets/steam/left_track_up.png differ
diff --git a/source/addons/controller_icons/assets/steam/left_track_up.png.import b/source/addons/controller_icons/assets/steam/left_track_up.png.import
new file mode 100644
index 0000000..0bcf067
--- /dev/null
+++ b/source/addons/controller_icons/assets/steam/left_track_up.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b4funxqwsp5lt"
+path="res://.godot/imported/left_track_up.png-d036ca12f4dcdd984614588b9f0c50f4.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steam/left_track_up.png"
+dest_files=["res://.godot/imported/left_track_up.png-d036ca12f4dcdd984614588b9f0c50f4.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/source/addons/controller_icons/assets/steam/lt.png b/source/addons/controller_icons/assets/steam/lt.png
new file mode 100644
index 0000000..1890ea2
Binary files /dev/null and b/source/addons/controller_icons/assets/steam/lt.png differ
diff --git a/source/addons/controller_icons/assets/steam/lt.png.import b/source/addons/controller_icons/assets/steam/lt.png.import
new file mode 100644
index 0000000..6d90596
--- /dev/null
+++ b/source/addons/controller_icons/assets/steam/lt.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b0s7pjaudi66e"
+path="res://.godot/imported/lt.png-44277066c93d3aa2a3b16029f6b6db5f.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steam/lt.png"
+dest_files=["res://.godot/imported/lt.png-44277066c93d3aa2a3b16029f6b6db5f.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/source/addons/controller_icons/assets/steam/rb.png b/source/addons/controller_icons/assets/steam/rb.png
new file mode 100644
index 0000000..4304c0f
Binary files /dev/null and b/source/addons/controller_icons/assets/steam/rb.png differ
diff --git a/source/addons/controller_icons/assets/steam/rb.png.import b/source/addons/controller_icons/assets/steam/rb.png.import
new file mode 100644
index 0000000..b8fc6a9
--- /dev/null
+++ b/source/addons/controller_icons/assets/steam/rb.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bp82rm756ep6u"
+path="res://.godot/imported/rb.png-2fa5a7ab003444f3f1819759316dcd20.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steam/rb.png"
+dest_files=["res://.godot/imported/rb.png-2fa5a7ab003444f3f1819759316dcd20.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/source/addons/controller_icons/assets/steam/right_grip.png b/source/addons/controller_icons/assets/steam/right_grip.png
new file mode 100644
index 0000000..6545b07
Binary files /dev/null and b/source/addons/controller_icons/assets/steam/right_grip.png differ
diff --git a/source/addons/controller_icons/assets/steam/right_grip.png.import b/source/addons/controller_icons/assets/steam/right_grip.png.import
new file mode 100644
index 0000000..ccb2f16
--- /dev/null
+++ b/source/addons/controller_icons/assets/steam/right_grip.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://0k2r7ob05w33"
+path="res://.godot/imported/right_grip.png-0799ccf7f9bc8a783cac8c357f38758d.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steam/right_grip.png"
+dest_files=["res://.godot/imported/right_grip.png-0799ccf7f9bc8a783cac8c357f38758d.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/source/addons/controller_icons/assets/steam/right_track.png b/source/addons/controller_icons/assets/steam/right_track.png
new file mode 100644
index 0000000..baefb36
Binary files /dev/null and b/source/addons/controller_icons/assets/steam/right_track.png differ
diff --git a/source/addons/controller_icons/assets/steam/right_track.png.import b/source/addons/controller_icons/assets/steam/right_track.png.import
new file mode 100644
index 0000000..2a8df9d
--- /dev/null
+++ b/source/addons/controller_icons/assets/steam/right_track.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://6dq10ds5mlgs"
+path="res://.godot/imported/right_track.png-95cc6adb3c1b4f9db74ec053b4999cf2.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steam/right_track.png"
+dest_files=["res://.godot/imported/right_track.png-95cc6adb3c1b4f9db74ec053b4999cf2.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/source/addons/controller_icons/assets/steam/right_track_center.png b/source/addons/controller_icons/assets/steam/right_track_center.png
new file mode 100644
index 0000000..b6b9e2f
Binary files /dev/null and b/source/addons/controller_icons/assets/steam/right_track_center.png differ
diff --git a/source/addons/controller_icons/assets/steam/right_track_center.png.import b/source/addons/controller_icons/assets/steam/right_track_center.png.import
new file mode 100644
index 0000000..6b2b018
--- /dev/null
+++ b/source/addons/controller_icons/assets/steam/right_track_center.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dta545ndu8if6"
+path="res://.godot/imported/right_track_center.png-58ac8f72d98a03da1da39e477e6e7c1f.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steam/right_track_center.png"
+dest_files=["res://.godot/imported/right_track_center.png-58ac8f72d98a03da1da39e477e6e7c1f.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/source/addons/controller_icons/assets/steam/right_track_down.png b/source/addons/controller_icons/assets/steam/right_track_down.png
new file mode 100644
index 0000000..7ee27fa
Binary files /dev/null and b/source/addons/controller_icons/assets/steam/right_track_down.png differ
diff --git a/source/addons/controller_icons/assets/steam/right_track_down.png.import b/source/addons/controller_icons/assets/steam/right_track_down.png.import
new file mode 100644
index 0000000..d2c5ff4
--- /dev/null
+++ b/source/addons/controller_icons/assets/steam/right_track_down.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c7h7ncsju5ggy"
+path="res://.godot/imported/right_track_down.png-4130a302dfc93d303747d47da81d7f3a.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steam/right_track_down.png"
+dest_files=["res://.godot/imported/right_track_down.png-4130a302dfc93d303747d47da81d7f3a.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/source/addons/controller_icons/assets/steam/right_track_left.png b/source/addons/controller_icons/assets/steam/right_track_left.png
new file mode 100644
index 0000000..0867fac
Binary files /dev/null and b/source/addons/controller_icons/assets/steam/right_track_left.png differ
diff --git a/source/addons/controller_icons/assets/steam/right_track_left.png.import b/source/addons/controller_icons/assets/steam/right_track_left.png.import
new file mode 100644
index 0000000..61f6663
--- /dev/null
+++ b/source/addons/controller_icons/assets/steam/right_track_left.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cxgrqodjwdqxw"
+path="res://.godot/imported/right_track_left.png-7ff9caa711a7d830d6c0e9dcdbbc6e16.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steam/right_track_left.png"
+dest_files=["res://.godot/imported/right_track_left.png-7ff9caa711a7d830d6c0e9dcdbbc6e16.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/source/addons/controller_icons/assets/steam/right_track_right.png b/source/addons/controller_icons/assets/steam/right_track_right.png
new file mode 100644
index 0000000..704e8ae
Binary files /dev/null and b/source/addons/controller_icons/assets/steam/right_track_right.png differ
diff --git a/source/addons/controller_icons/assets/steam/right_track_right.png.import b/source/addons/controller_icons/assets/steam/right_track_right.png.import
new file mode 100644
index 0000000..25c628d
--- /dev/null
+++ b/source/addons/controller_icons/assets/steam/right_track_right.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b0lx11bnneyts"
+path="res://.godot/imported/right_track_right.png-6862b78d914de9a352e198d09c79f9ee.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steam/right_track_right.png"
+dest_files=["res://.godot/imported/right_track_right.png-6862b78d914de9a352e198d09c79f9ee.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/source/addons/controller_icons/assets/steam/right_track_up.png b/source/addons/controller_icons/assets/steam/right_track_up.png
new file mode 100644
index 0000000..b6fed1e
Binary files /dev/null and b/source/addons/controller_icons/assets/steam/right_track_up.png differ
diff --git a/source/addons/controller_icons/assets/steam/right_track_up.png.import b/source/addons/controller_icons/assets/steam/right_track_up.png.import
new file mode 100644
index 0000000..d0e24a4
--- /dev/null
+++ b/source/addons/controller_icons/assets/steam/right_track_up.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://30crryk2c330"
+path="res://.godot/imported/right_track_up.png-a63f64921def263a77365aade11ebe0e.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steam/right_track_up.png"
+dest_files=["res://.godot/imported/right_track_up.png-a63f64921def263a77365aade11ebe0e.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/source/addons/controller_icons/assets/steam/rt.png b/source/addons/controller_icons/assets/steam/rt.png
new file mode 100644
index 0000000..ee4d7de
Binary files /dev/null and b/source/addons/controller_icons/assets/steam/rt.png differ
diff --git a/source/addons/controller_icons/assets/steam/rt.png.import b/source/addons/controller_icons/assets/steam/rt.png.import
new file mode 100644
index 0000000..8b8e209
--- /dev/null
+++ b/source/addons/controller_icons/assets/steam/rt.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b1uyj0ms44f7a"
+path="res://.godot/imported/rt.png-8456a9d9c814b2bb104bbf016d2f7055.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steam/rt.png"
+dest_files=["res://.godot/imported/rt.png-8456a9d9c814b2bb104bbf016d2f7055.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/source/addons/controller_icons/assets/steam/start.png b/source/addons/controller_icons/assets/steam/start.png
new file mode 100644
index 0000000..a088743
Binary files /dev/null and b/source/addons/controller_icons/assets/steam/start.png differ
diff --git a/source/addons/controller_icons/assets/steam/start.png.import b/source/addons/controller_icons/assets/steam/start.png.import
new file mode 100644
index 0000000..e1e1f61
--- /dev/null
+++ b/source/addons/controller_icons/assets/steam/start.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cq6gu6ntaoy72"
+path="res://.godot/imported/start.png-4e7d6471e6786617e56feb859488c243.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steam/start.png"
+dest_files=["res://.godot/imported/start.png-4e7d6471e6786617e56feb859488c243.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/source/addons/controller_icons/assets/steam/stick.png b/source/addons/controller_icons/assets/steam/stick.png
new file mode 100644
index 0000000..182e661
Binary files /dev/null and b/source/addons/controller_icons/assets/steam/stick.png differ
diff --git a/source/addons/controller_icons/assets/steam/stick.png.import b/source/addons/controller_icons/assets/steam/stick.png.import
new file mode 100644
index 0000000..f402c0e
--- /dev/null
+++ b/source/addons/controller_icons/assets/steam/stick.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dbu6uiegjwfk0"
+path="res://.godot/imported/stick.png-17e9bd91c5d9ae40a3c941ea3acd764a.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steam/stick.png"
+dest_files=["res://.godot/imported/stick.png-17e9bd91c5d9ae40a3c941ea3acd764a.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/source/addons/controller_icons/assets/steam/system.png b/source/addons/controller_icons/assets/steam/system.png
new file mode 100644
index 0000000..52e02ba
Binary files /dev/null and b/source/addons/controller_icons/assets/steam/system.png differ
diff --git a/source/addons/controller_icons/assets/steam/system.png.import b/source/addons/controller_icons/assets/steam/system.png.import
new file mode 100644
index 0000000..358ba3b
--- /dev/null
+++ b/source/addons/controller_icons/assets/steam/system.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cktlmub0jxllb"
+path="res://.godot/imported/system.png-bec343c70122880763d1f63339dd840d.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steam/system.png"
+dest_files=["res://.godot/imported/system.png-bec343c70122880763d1f63339dd840d.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/source/addons/controller_icons/assets/steam/tilt_pitch.png b/source/addons/controller_icons/assets/steam/tilt_pitch.png
new file mode 100644
index 0000000..3b4b312
Binary files /dev/null and b/source/addons/controller_icons/assets/steam/tilt_pitch.png differ
diff --git a/source/addons/controller_icons/assets/steam/tilt_pitch.png.import b/source/addons/controller_icons/assets/steam/tilt_pitch.png.import
new file mode 100644
index 0000000..3d17a3d
--- /dev/null
+++ b/source/addons/controller_icons/assets/steam/tilt_pitch.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cv6n77eif3i54"
+path="res://.godot/imported/tilt_pitch.png-52a2dbe5ce0955cb0ff9dd622e114796.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steam/tilt_pitch.png"
+dest_files=["res://.godot/imported/tilt_pitch.png-52a2dbe5ce0955cb0ff9dd622e114796.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/source/addons/controller_icons/assets/steam/tilt_roll.png b/source/addons/controller_icons/assets/steam/tilt_roll.png
new file mode 100644
index 0000000..f452d1b
Binary files /dev/null and b/source/addons/controller_icons/assets/steam/tilt_roll.png differ
diff --git a/source/addons/controller_icons/assets/steam/tilt_roll.png.import b/source/addons/controller_icons/assets/steam/tilt_roll.png.import
new file mode 100644
index 0000000..c035913
--- /dev/null
+++ b/source/addons/controller_icons/assets/steam/tilt_roll.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c5jepr1r4ux60"
+path="res://.godot/imported/tilt_roll.png-8c1f5b0ec6a270dd46dec3045007bf83.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steam/tilt_roll.png"
+dest_files=["res://.godot/imported/tilt_roll.png-8c1f5b0ec6a270dd46dec3045007bf83.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/source/addons/controller_icons/assets/steam/tilt_yaw.png b/source/addons/controller_icons/assets/steam/tilt_yaw.png
new file mode 100644
index 0000000..7d40a29
Binary files /dev/null and b/source/addons/controller_icons/assets/steam/tilt_yaw.png differ
diff --git a/source/addons/controller_icons/assets/steam/tilt_yaw.png.import b/source/addons/controller_icons/assets/steam/tilt_yaw.png.import
new file mode 100644
index 0000000..6601c2f
--- /dev/null
+++ b/source/addons/controller_icons/assets/steam/tilt_yaw.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cr34wwbk1o65k"
+path="res://.godot/imported/tilt_yaw.png-49f6b72eb854329b5fd5a72dafa4ff48.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steam/tilt_yaw.png"
+dest_files=["res://.godot/imported/tilt_yaw.png-49f6b72eb854329b5fd5a72dafa4ff48.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/source/addons/controller_icons/assets/steam/x.png b/source/addons/controller_icons/assets/steam/x.png
new file mode 100644
index 0000000..a8e9df1
Binary files /dev/null and b/source/addons/controller_icons/assets/steam/x.png differ
diff --git a/source/addons/controller_icons/assets/steam/x.png.import b/source/addons/controller_icons/assets/steam/x.png.import
new file mode 100644
index 0000000..930acaa
--- /dev/null
+++ b/source/addons/controller_icons/assets/steam/x.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b1c54vo541jof"
+path="res://.godot/imported/x.png-65afc159d12dab8e4f940e8f4090bba5.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steam/x.png"
+dest_files=["res://.godot/imported/x.png-65afc159d12dab8e4f940e8f4090bba5.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/source/addons/controller_icons/assets/steam/y.png b/source/addons/controller_icons/assets/steam/y.png
new file mode 100644
index 0000000..16c2fc7
Binary files /dev/null and b/source/addons/controller_icons/assets/steam/y.png differ
diff --git a/source/addons/controller_icons/assets/steam/y.png.import b/source/addons/controller_icons/assets/steam/y.png.import
new file mode 100644
index 0000000..c3b44e5
--- /dev/null
+++ b/source/addons/controller_icons/assets/steam/y.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://br3am8umaitfn"
+path="res://.godot/imported/y.png-639b49c4b58a0c38b43d864b4dc01ea7.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steam/y.png"
+dest_files=["res://.godot/imported/y.png-639b49c4b58a0c38b43d864b4dc01ea7.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/source/addons/controller_icons/assets/steamdeck/a.png b/source/addons/controller_icons/assets/steamdeck/a.png
new file mode 100644
index 0000000..36e4867
Binary files /dev/null and b/source/addons/controller_icons/assets/steamdeck/a.png differ
diff --git a/source/addons/controller_icons/assets/steamdeck/a.png.import b/source/addons/controller_icons/assets/steamdeck/a.png.import
new file mode 100644
index 0000000..327770e
--- /dev/null
+++ b/source/addons/controller_icons/assets/steamdeck/a.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://poaovfu3n5rj"
+path="res://.godot/imported/a.png-2f73dad70aca5a9b5fac65559366eb25.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steamdeck/a.png"
+dest_files=["res://.godot/imported/a.png-2f73dad70aca5a9b5fac65559366eb25.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/source/addons/controller_icons/assets/steamdeck/b.png b/source/addons/controller_icons/assets/steamdeck/b.png
new file mode 100644
index 0000000..aa94303
Binary files /dev/null and b/source/addons/controller_icons/assets/steamdeck/b.png differ
diff --git a/source/addons/controller_icons/assets/steamdeck/b.png.import b/source/addons/controller_icons/assets/steamdeck/b.png.import
new file mode 100644
index 0000000..7cdad43
--- /dev/null
+++ b/source/addons/controller_icons/assets/steamdeck/b.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cbrsrgvgujiul"
+path="res://.godot/imported/b.png-3c47dd47fd7d251b208246d9fb5dea18.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steamdeck/b.png"
+dest_files=["res://.godot/imported/b.png-3c47dd47fd7d251b208246d9fb5dea18.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/source/addons/controller_icons/assets/steamdeck/dots.png b/source/addons/controller_icons/assets/steamdeck/dots.png
new file mode 100644
index 0000000..fb04073
Binary files /dev/null and b/source/addons/controller_icons/assets/steamdeck/dots.png differ
diff --git a/source/addons/controller_icons/assets/steamdeck/dots.png.import b/source/addons/controller_icons/assets/steamdeck/dots.png.import
new file mode 100644
index 0000000..5f28ee6
--- /dev/null
+++ b/source/addons/controller_icons/assets/steamdeck/dots.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://drfc61g2mgowu"
+path="res://.godot/imported/dots.png-5aab7f77e51edbb5da9af6d242a7a1a8.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steamdeck/dots.png"
+dest_files=["res://.godot/imported/dots.png-5aab7f77e51edbb5da9af6d242a7a1a8.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/source/addons/controller_icons/assets/steamdeck/dpad.png b/source/addons/controller_icons/assets/steamdeck/dpad.png
new file mode 100644
index 0000000..e79effa
Binary files /dev/null and b/source/addons/controller_icons/assets/steamdeck/dpad.png differ
diff --git a/source/addons/controller_icons/assets/steamdeck/dpad.png.import b/source/addons/controller_icons/assets/steamdeck/dpad.png.import
new file mode 100644
index 0000000..6629727
--- /dev/null
+++ b/source/addons/controller_icons/assets/steamdeck/dpad.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dm4e2w2a8r1l4"
+path="res://.godot/imported/dpad.png-d91578cac829c1bcc2a8d54711ef3af1.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steamdeck/dpad.png"
+dest_files=["res://.godot/imported/dpad.png-d91578cac829c1bcc2a8d54711ef3af1.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/source/addons/controller_icons/assets/steamdeck/dpad_down.png b/source/addons/controller_icons/assets/steamdeck/dpad_down.png
new file mode 100644
index 0000000..f6976e4
Binary files /dev/null and b/source/addons/controller_icons/assets/steamdeck/dpad_down.png differ
diff --git a/source/addons/controller_icons/assets/steamdeck/dpad_down.png.import b/source/addons/controller_icons/assets/steamdeck/dpad_down.png.import
new file mode 100644
index 0000000..82c1777
--- /dev/null
+++ b/source/addons/controller_icons/assets/steamdeck/dpad_down.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cynouax7vxg20"
+path="res://.godot/imported/dpad_down.png-5cf905f451a185208b146c90cbae918d.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steamdeck/dpad_down.png"
+dest_files=["res://.godot/imported/dpad_down.png-5cf905f451a185208b146c90cbae918d.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/source/addons/controller_icons/assets/steamdeck/dpad_left.png b/source/addons/controller_icons/assets/steamdeck/dpad_left.png
new file mode 100644
index 0000000..80b5647
Binary files /dev/null and b/source/addons/controller_icons/assets/steamdeck/dpad_left.png differ
diff --git a/source/addons/controller_icons/assets/steamdeck/dpad_left.png.import b/source/addons/controller_icons/assets/steamdeck/dpad_left.png.import
new file mode 100644
index 0000000..5d140f3
--- /dev/null
+++ b/source/addons/controller_icons/assets/steamdeck/dpad_left.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dkkrtakt17c56"
+path="res://.godot/imported/dpad_left.png-32c007ed76ab3f913ca919c3845014b1.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steamdeck/dpad_left.png"
+dest_files=["res://.godot/imported/dpad_left.png-32c007ed76ab3f913ca919c3845014b1.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/source/addons/controller_icons/assets/steamdeck/dpad_right.png b/source/addons/controller_icons/assets/steamdeck/dpad_right.png
new file mode 100644
index 0000000..37953ea
Binary files /dev/null and b/source/addons/controller_icons/assets/steamdeck/dpad_right.png differ
diff --git a/source/addons/controller_icons/assets/steamdeck/dpad_right.png.import b/source/addons/controller_icons/assets/steamdeck/dpad_right.png.import
new file mode 100644
index 0000000..35d32f9
--- /dev/null
+++ b/source/addons/controller_icons/assets/steamdeck/dpad_right.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://ccjjrpx72dn2r"
+path="res://.godot/imported/dpad_right.png-828c1fa323dfa47ac18628cf2c8ec764.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steamdeck/dpad_right.png"
+dest_files=["res://.godot/imported/dpad_right.png-828c1fa323dfa47ac18628cf2c8ec764.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/source/addons/controller_icons/assets/steamdeck/dpad_up.png b/source/addons/controller_icons/assets/steamdeck/dpad_up.png
new file mode 100644
index 0000000..6fa4a6b
Binary files /dev/null and b/source/addons/controller_icons/assets/steamdeck/dpad_up.png differ
diff --git a/source/addons/controller_icons/assets/steamdeck/dpad_up.png.import b/source/addons/controller_icons/assets/steamdeck/dpad_up.png.import
new file mode 100644
index 0000000..75016c1
--- /dev/null
+++ b/source/addons/controller_icons/assets/steamdeck/dpad_up.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bw0h2x4m0g7b8"
+path="res://.godot/imported/dpad_up.png-fa8e0d391699c07f5447f418411e4aaf.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steamdeck/dpad_up.png"
+dest_files=["res://.godot/imported/dpad_up.png-fa8e0d391699c07f5447f418411e4aaf.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/source/addons/controller_icons/assets/steamdeck/gyro.png b/source/addons/controller_icons/assets/steamdeck/gyro.png
new file mode 100644
index 0000000..4db3d2e
Binary files /dev/null and b/source/addons/controller_icons/assets/steamdeck/gyro.png differ
diff --git a/source/addons/controller_icons/assets/steamdeck/gyro.png.import b/source/addons/controller_icons/assets/steamdeck/gyro.png.import
new file mode 100644
index 0000000..72cbe43
--- /dev/null
+++ b/source/addons/controller_icons/assets/steamdeck/gyro.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://brtnyias3061u"
+path="res://.godot/imported/gyro.png-069596f609be7f7b726934d7d8c01f58.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steamdeck/gyro.png"
+dest_files=["res://.godot/imported/gyro.png-069596f609be7f7b726934d7d8c01f58.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/source/addons/controller_icons/assets/steamdeck/l1.png b/source/addons/controller_icons/assets/steamdeck/l1.png
new file mode 100644
index 0000000..25e2562
Binary files /dev/null and b/source/addons/controller_icons/assets/steamdeck/l1.png differ
diff --git a/source/addons/controller_icons/assets/steamdeck/l1.png.import b/source/addons/controller_icons/assets/steamdeck/l1.png.import
new file mode 100644
index 0000000..abf64ad
--- /dev/null
+++ b/source/addons/controller_icons/assets/steamdeck/l1.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dichmao6k03i6"
+path="res://.godot/imported/l1.png-cd4c173e49cfddf9d9538a804894a5b9.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steamdeck/l1.png"
+dest_files=["res://.godot/imported/l1.png-cd4c173e49cfddf9d9538a804894a5b9.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/source/addons/controller_icons/assets/steamdeck/l2.png b/source/addons/controller_icons/assets/steamdeck/l2.png
new file mode 100644
index 0000000..399ffb4
Binary files /dev/null and b/source/addons/controller_icons/assets/steamdeck/l2.png differ
diff --git a/source/addons/controller_icons/assets/steamdeck/l2.png.import b/source/addons/controller_icons/assets/steamdeck/l2.png.import
new file mode 100644
index 0000000..059c50e
--- /dev/null
+++ b/source/addons/controller_icons/assets/steamdeck/l2.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bd1ipt1urb7xw"
+path="res://.godot/imported/l2.png-c7dea6858612a3a7e6b18684a3fc641c.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steamdeck/l2.png"
+dest_files=["res://.godot/imported/l2.png-c7dea6858612a3a7e6b18684a3fc641c.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/source/addons/controller_icons/assets/steamdeck/l4.png b/source/addons/controller_icons/assets/steamdeck/l4.png
new file mode 100644
index 0000000..3a2b4be
Binary files /dev/null and b/source/addons/controller_icons/assets/steamdeck/l4.png differ
diff --git a/source/addons/controller_icons/assets/steamdeck/l4.png.import b/source/addons/controller_icons/assets/steamdeck/l4.png.import
new file mode 100644
index 0000000..a33fdf9
--- /dev/null
+++ b/source/addons/controller_icons/assets/steamdeck/l4.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bn4k3f2g4pwet"
+path="res://.godot/imported/l4.png-53e1f2dd49fd7211ca90847235d09280.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steamdeck/l4.png"
+dest_files=["res://.godot/imported/l4.png-53e1f2dd49fd7211ca90847235d09280.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/source/addons/controller_icons/assets/steamdeck/l5.png b/source/addons/controller_icons/assets/steamdeck/l5.png
new file mode 100644
index 0000000..507fc01
Binary files /dev/null and b/source/addons/controller_icons/assets/steamdeck/l5.png differ
diff --git a/source/addons/controller_icons/assets/steamdeck/l5.png.import b/source/addons/controller_icons/assets/steamdeck/l5.png.import
new file mode 100644
index 0000000..53954a2
--- /dev/null
+++ b/source/addons/controller_icons/assets/steamdeck/l5.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://w6iao807c7k0"
+path="res://.godot/imported/l5.png-c7872767816e4050da362fd348778e96.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steamdeck/l5.png"
+dest_files=["res://.godot/imported/l5.png-c7872767816e4050da362fd348778e96.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/source/addons/controller_icons/assets/steamdeck/l_stick.png b/source/addons/controller_icons/assets/steamdeck/l_stick.png
new file mode 100644
index 0000000..e006d0a
Binary files /dev/null and b/source/addons/controller_icons/assets/steamdeck/l_stick.png differ
diff --git a/source/addons/controller_icons/assets/steamdeck/l_stick.png.import b/source/addons/controller_icons/assets/steamdeck/l_stick.png.import
new file mode 100644
index 0000000..26ad195
--- /dev/null
+++ b/source/addons/controller_icons/assets/steamdeck/l_stick.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b322wp72ljvjx"
+path="res://.godot/imported/l_stick.png-b82870d1d471bcee24379dc170fff1d5.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steamdeck/l_stick.png"
+dest_files=["res://.godot/imported/l_stick.png-b82870d1d471bcee24379dc170fff1d5.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/source/addons/controller_icons/assets/steamdeck/l_stick_click.png b/source/addons/controller_icons/assets/steamdeck/l_stick_click.png
new file mode 100644
index 0000000..d7e2029
Binary files /dev/null and b/source/addons/controller_icons/assets/steamdeck/l_stick_click.png differ
diff --git a/source/addons/controller_icons/assets/steamdeck/l_stick_click.png.import b/source/addons/controller_icons/assets/steamdeck/l_stick_click.png.import
new file mode 100644
index 0000000..3af3d3f
--- /dev/null
+++ b/source/addons/controller_icons/assets/steamdeck/l_stick_click.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://lholv28i3ycm"
+path="res://.godot/imported/l_stick_click.png-4b0e50bec61ff1c33620527a89d6ea79.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steamdeck/l_stick_click.png"
+dest_files=["res://.godot/imported/l_stick_click.png-4b0e50bec61ff1c33620527a89d6ea79.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/source/addons/controller_icons/assets/steamdeck/left_track.png b/source/addons/controller_icons/assets/steamdeck/left_track.png
new file mode 100644
index 0000000..d1596fa
Binary files /dev/null and b/source/addons/controller_icons/assets/steamdeck/left_track.png differ
diff --git a/source/addons/controller_icons/assets/steamdeck/left_track.png.import b/source/addons/controller_icons/assets/steamdeck/left_track.png.import
new file mode 100644
index 0000000..525f791
--- /dev/null
+++ b/source/addons/controller_icons/assets/steamdeck/left_track.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dhq248yp0aa52"
+path="res://.godot/imported/left_track.png-a3f6b83f0eb656760c4e50b38378b0d2.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steamdeck/left_track.png"
+dest_files=["res://.godot/imported/left_track.png-a3f6b83f0eb656760c4e50b38378b0d2.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/source/addons/controller_icons/assets/steamdeck/menu.png b/source/addons/controller_icons/assets/steamdeck/menu.png
new file mode 100644
index 0000000..39c5d17
Binary files /dev/null and b/source/addons/controller_icons/assets/steamdeck/menu.png differ
diff --git a/source/addons/controller_icons/assets/steamdeck/menu.png.import b/source/addons/controller_icons/assets/steamdeck/menu.png.import
new file mode 100644
index 0000000..b02b4af
--- /dev/null
+++ b/source/addons/controller_icons/assets/steamdeck/menu.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://tmna4yvo038t"
+path="res://.godot/imported/menu.png-15b5ed82914c030a3d664fc292ecda62.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steamdeck/menu.png"
+dest_files=["res://.godot/imported/menu.png-15b5ed82914c030a3d664fc292ecda62.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/source/addons/controller_icons/assets/steamdeck/minus.png b/source/addons/controller_icons/assets/steamdeck/minus.png
new file mode 100644
index 0000000..1347872
Binary files /dev/null and b/source/addons/controller_icons/assets/steamdeck/minus.png differ
diff --git a/source/addons/controller_icons/assets/steamdeck/minus.png.import b/source/addons/controller_icons/assets/steamdeck/minus.png.import
new file mode 100644
index 0000000..1658e75
--- /dev/null
+++ b/source/addons/controller_icons/assets/steamdeck/minus.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b64ckrex6trq0"
+path="res://.godot/imported/minus.png-6b6a5c0a0c6b9d79b43a9ba17509b6c2.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steamdeck/minus.png"
+dest_files=["res://.godot/imported/minus.png-6b6a5c0a0c6b9d79b43a9ba17509b6c2.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/source/addons/controller_icons/assets/steamdeck/plus.png b/source/addons/controller_icons/assets/steamdeck/plus.png
new file mode 100644
index 0000000..394d5bb
Binary files /dev/null and b/source/addons/controller_icons/assets/steamdeck/plus.png differ
diff --git a/source/addons/controller_icons/assets/steamdeck/plus.png.import b/source/addons/controller_icons/assets/steamdeck/plus.png.import
new file mode 100644
index 0000000..7e815b6
--- /dev/null
+++ b/source/addons/controller_icons/assets/steamdeck/plus.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dg1tbg6cnlkit"
+path="res://.godot/imported/plus.png-c4d8729eb667b48905d0e19119750025.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steamdeck/plus.png"
+dest_files=["res://.godot/imported/plus.png-c4d8729eb667b48905d0e19119750025.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/source/addons/controller_icons/assets/steamdeck/power.png b/source/addons/controller_icons/assets/steamdeck/power.png
new file mode 100644
index 0000000..13bfec5
Binary files /dev/null and b/source/addons/controller_icons/assets/steamdeck/power.png differ
diff --git a/source/addons/controller_icons/assets/steamdeck/power.png.import b/source/addons/controller_icons/assets/steamdeck/power.png.import
new file mode 100644
index 0000000..1baec3b
--- /dev/null
+++ b/source/addons/controller_icons/assets/steamdeck/power.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bck8srkobqvi3"
+path="res://.godot/imported/power.png-0830cc8bf011276d1ca084df938e9bfe.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steamdeck/power.png"
+dest_files=["res://.godot/imported/power.png-0830cc8bf011276d1ca084df938e9bfe.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/source/addons/controller_icons/assets/steamdeck/r1.png b/source/addons/controller_icons/assets/steamdeck/r1.png
new file mode 100644
index 0000000..4d7ce77
Binary files /dev/null and b/source/addons/controller_icons/assets/steamdeck/r1.png differ
diff --git a/source/addons/controller_icons/assets/steamdeck/r1.png.import b/source/addons/controller_icons/assets/steamdeck/r1.png.import
new file mode 100644
index 0000000..637e601
--- /dev/null
+++ b/source/addons/controller_icons/assets/steamdeck/r1.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://druiq1x5t40vi"
+path="res://.godot/imported/r1.png-e7ea343bd2a09ffc81d7115c3dec0af9.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steamdeck/r1.png"
+dest_files=["res://.godot/imported/r1.png-e7ea343bd2a09ffc81d7115c3dec0af9.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/source/addons/controller_icons/assets/steamdeck/r2.png b/source/addons/controller_icons/assets/steamdeck/r2.png
new file mode 100644
index 0000000..bb4787a
Binary files /dev/null and b/source/addons/controller_icons/assets/steamdeck/r2.png differ
diff --git a/source/addons/controller_icons/assets/steamdeck/r2.png.import b/source/addons/controller_icons/assets/steamdeck/r2.png.import
new file mode 100644
index 0000000..cda9fff
--- /dev/null
+++ b/source/addons/controller_icons/assets/steamdeck/r2.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://0h2bsoykgxw7"
+path="res://.godot/imported/r2.png-9fb695385a2811dece0b0d347dbebc92.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steamdeck/r2.png"
+dest_files=["res://.godot/imported/r2.png-9fb695385a2811dece0b0d347dbebc92.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/source/addons/controller_icons/assets/steamdeck/r4.png b/source/addons/controller_icons/assets/steamdeck/r4.png
new file mode 100644
index 0000000..07f6110
Binary files /dev/null and b/source/addons/controller_icons/assets/steamdeck/r4.png differ
diff --git a/source/addons/controller_icons/assets/steamdeck/r4.png.import b/source/addons/controller_icons/assets/steamdeck/r4.png.import
new file mode 100644
index 0000000..d6e68ce
--- /dev/null
+++ b/source/addons/controller_icons/assets/steamdeck/r4.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://43513ycpgkfk"
+path="res://.godot/imported/r4.png-9218f4075b2a63414563818f0c8ce0a1.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steamdeck/r4.png"
+dest_files=["res://.godot/imported/r4.png-9218f4075b2a63414563818f0c8ce0a1.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/source/addons/controller_icons/assets/steamdeck/r5.png b/source/addons/controller_icons/assets/steamdeck/r5.png
new file mode 100644
index 0000000..d5659cb
Binary files /dev/null and b/source/addons/controller_icons/assets/steamdeck/r5.png differ
diff --git a/source/addons/controller_icons/assets/steamdeck/r5.png.import b/source/addons/controller_icons/assets/steamdeck/r5.png.import
new file mode 100644
index 0000000..55950b2
--- /dev/null
+++ b/source/addons/controller_icons/assets/steamdeck/r5.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cxcwenhrruil7"
+path="res://.godot/imported/r5.png-3e555104eee0b287d143d58b74f3713b.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steamdeck/r5.png"
+dest_files=["res://.godot/imported/r5.png-3e555104eee0b287d143d58b74f3713b.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/source/addons/controller_icons/assets/steamdeck/r_stick.png b/source/addons/controller_icons/assets/steamdeck/r_stick.png
new file mode 100644
index 0000000..a2fc9db
Binary files /dev/null and b/source/addons/controller_icons/assets/steamdeck/r_stick.png differ
diff --git a/source/addons/controller_icons/assets/steamdeck/r_stick.png.import b/source/addons/controller_icons/assets/steamdeck/r_stick.png.import
new file mode 100644
index 0000000..3657015
--- /dev/null
+++ b/source/addons/controller_icons/assets/steamdeck/r_stick.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://fwbk65op52yk"
+path="res://.godot/imported/r_stick.png-1c05d894dc78be25f4a49ccf8bd0d050.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steamdeck/r_stick.png"
+dest_files=["res://.godot/imported/r_stick.png-1c05d894dc78be25f4a49ccf8bd0d050.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/source/addons/controller_icons/assets/steamdeck/r_stick_click.png b/source/addons/controller_icons/assets/steamdeck/r_stick_click.png
new file mode 100644
index 0000000..2236e57
Binary files /dev/null and b/source/addons/controller_icons/assets/steamdeck/r_stick_click.png differ
diff --git a/source/addons/controller_icons/assets/steamdeck/r_stick_click.png.import b/source/addons/controller_icons/assets/steamdeck/r_stick_click.png.import
new file mode 100644
index 0000000..b49e988
--- /dev/null
+++ b/source/addons/controller_icons/assets/steamdeck/r_stick_click.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://ba04a0ql4pg6s"
+path="res://.godot/imported/r_stick_click.png-65cb2bed7b9da43cbe790342cd7869f7.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steamdeck/r_stick_click.png"
+dest_files=["res://.godot/imported/r_stick_click.png-65cb2bed7b9da43cbe790342cd7869f7.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/source/addons/controller_icons/assets/steamdeck/right_track.png b/source/addons/controller_icons/assets/steamdeck/right_track.png
new file mode 100644
index 0000000..0628aba
Binary files /dev/null and b/source/addons/controller_icons/assets/steamdeck/right_track.png differ
diff --git a/source/addons/controller_icons/assets/steamdeck/right_track.png.import b/source/addons/controller_icons/assets/steamdeck/right_track.png.import
new file mode 100644
index 0000000..6b28705
--- /dev/null
+++ b/source/addons/controller_icons/assets/steamdeck/right_track.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dpobf2qdnwicd"
+path="res://.godot/imported/right_track.png-b11cdb4f73a4064c5e82947c3a833f04.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steamdeck/right_track.png"
+dest_files=["res://.godot/imported/right_track.png-b11cdb4f73a4064c5e82947c3a833f04.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/source/addons/controller_icons/assets/steamdeck/square.png b/source/addons/controller_icons/assets/steamdeck/square.png
new file mode 100644
index 0000000..d87ae38
Binary files /dev/null and b/source/addons/controller_icons/assets/steamdeck/square.png differ
diff --git a/source/addons/controller_icons/assets/steamdeck/square.png.import b/source/addons/controller_icons/assets/steamdeck/square.png.import
new file mode 100644
index 0000000..9a9be55
--- /dev/null
+++ b/source/addons/controller_icons/assets/steamdeck/square.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b33u6kf0emyhw"
+path="res://.godot/imported/square.png-aa97e4ebdd5168be792d22b9d19b86fb.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steamdeck/square.png"
+dest_files=["res://.godot/imported/square.png-aa97e4ebdd5168be792d22b9d19b86fb.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/source/addons/controller_icons/assets/steamdeck/steam.png b/source/addons/controller_icons/assets/steamdeck/steam.png
new file mode 100644
index 0000000..af63f7f
Binary files /dev/null and b/source/addons/controller_icons/assets/steamdeck/steam.png differ
diff --git a/source/addons/controller_icons/assets/steamdeck/steam.png.import b/source/addons/controller_icons/assets/steamdeck/steam.png.import
new file mode 100644
index 0000000..396a708
--- /dev/null
+++ b/source/addons/controller_icons/assets/steamdeck/steam.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dterkny3mjiu3"
+path="res://.godot/imported/steam.png-cb3e0e8febfbcab936503086b0f14183.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steamdeck/steam.png"
+dest_files=["res://.godot/imported/steam.png-cb3e0e8febfbcab936503086b0f14183.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/source/addons/controller_icons/assets/steamdeck/x.png b/source/addons/controller_icons/assets/steamdeck/x.png
new file mode 100644
index 0000000..606739b
Binary files /dev/null and b/source/addons/controller_icons/assets/steamdeck/x.png differ
diff --git a/source/addons/controller_icons/assets/steamdeck/x.png.import b/source/addons/controller_icons/assets/steamdeck/x.png.import
new file mode 100644
index 0000000..14a81d0
--- /dev/null
+++ b/source/addons/controller_icons/assets/steamdeck/x.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bv6ggn8weqf6r"
+path="res://.godot/imported/x.png-7c5b0135e3b23190b7a1d19198c8d796.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steamdeck/x.png"
+dest_files=["res://.godot/imported/x.png-7c5b0135e3b23190b7a1d19198c8d796.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/source/addons/controller_icons/assets/steamdeck/y.png b/source/addons/controller_icons/assets/steamdeck/y.png
new file mode 100644
index 0000000..4a0423f
Binary files /dev/null and b/source/addons/controller_icons/assets/steamdeck/y.png differ
diff --git a/source/addons/controller_icons/assets/steamdeck/y.png.import b/source/addons/controller_icons/assets/steamdeck/y.png.import
new file mode 100644
index 0000000..383025e
--- /dev/null
+++ b/source/addons/controller_icons/assets/steamdeck/y.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://ccoqqcubm3xnx"
+path="res://.godot/imported/y.png-ef1586ba97c51e445fce86a950a27af1.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/steamdeck/y.png"
+dest_files=["res://.godot/imported/y.png-ef1586ba97c51e445fce86a950a27af1.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/source/addons/controller_icons/assets/switch/a.png b/source/addons/controller_icons/assets/switch/a.png
new file mode 100644
index 0000000..df756ef
Binary files /dev/null and b/source/addons/controller_icons/assets/switch/a.png differ
diff --git a/source/addons/controller_icons/assets/switch/a.png.import b/source/addons/controller_icons/assets/switch/a.png.import
new file mode 100644
index 0000000..ac5bf36
--- /dev/null
+++ b/source/addons/controller_icons/assets/switch/a.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bahjel775ngf"
+path="res://.godot/imported/a.png-fc163e1211ed8de66a60ec99285d248f.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/switch/a.png"
+dest_files=["res://.godot/imported/a.png-fc163e1211ed8de66a60ec99285d248f.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/source/addons/controller_icons/assets/switch/b.png b/source/addons/controller_icons/assets/switch/b.png
new file mode 100644
index 0000000..ea7e743
Binary files /dev/null and b/source/addons/controller_icons/assets/switch/b.png differ
diff --git a/source/addons/controller_icons/assets/switch/b.png.import b/source/addons/controller_icons/assets/switch/b.png.import
new file mode 100644
index 0000000..e6b860d
--- /dev/null
+++ b/source/addons/controller_icons/assets/switch/b.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bt7tcdk3d020l"
+path="res://.godot/imported/b.png-c6f0b440af26e7f51533807a83f12c3e.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/switch/b.png"
+dest_files=["res://.godot/imported/b.png-c6f0b440af26e7f51533807a83f12c3e.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/source/addons/controller_icons/assets/switch/controller_left.png b/source/addons/controller_icons/assets/switch/controller_left.png
new file mode 100644
index 0000000..f90a244
Binary files /dev/null and b/source/addons/controller_icons/assets/switch/controller_left.png differ
diff --git a/source/addons/controller_icons/assets/switch/controller_left.png.import b/source/addons/controller_icons/assets/switch/controller_left.png.import
new file mode 100644
index 0000000..62fc628
--- /dev/null
+++ b/source/addons/controller_icons/assets/switch/controller_left.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://1mmspbd2eh0p"
+path="res://.godot/imported/controller_left.png-ce1b649371fd1088c46c4a7d0d9ebeab.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/switch/controller_left.png"
+dest_files=["res://.godot/imported/controller_left.png-ce1b649371fd1088c46c4a7d0d9ebeab.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/source/addons/controller_icons/assets/switch/controller_right.png b/source/addons/controller_icons/assets/switch/controller_right.png
new file mode 100644
index 0000000..873da7e
Binary files /dev/null and b/source/addons/controller_icons/assets/switch/controller_right.png differ
diff --git a/source/addons/controller_icons/assets/switch/controller_right.png.import b/source/addons/controller_icons/assets/switch/controller_right.png.import
new file mode 100644
index 0000000..c078b05
--- /dev/null
+++ b/source/addons/controller_icons/assets/switch/controller_right.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://tkexjj22svc"
+path="res://.godot/imported/controller_right.png-1809d0ffa0e37e642089b8a03caeec7e.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/switch/controller_right.png"
+dest_files=["res://.godot/imported/controller_right.png-1809d0ffa0e37e642089b8a03caeec7e.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/source/addons/controller_icons/assets/switch/controllers.png b/source/addons/controller_icons/assets/switch/controllers.png
new file mode 100644
index 0000000..b6ee54d
Binary files /dev/null and b/source/addons/controller_icons/assets/switch/controllers.png differ
diff --git a/source/addons/controller_icons/assets/switch/controllers.png.import b/source/addons/controller_icons/assets/switch/controllers.png.import
new file mode 100644
index 0000000..814e32f
--- /dev/null
+++ b/source/addons/controller_icons/assets/switch/controllers.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cy1dluupdemuv"
+path="res://.godot/imported/controllers.png-7712b49e533d621799a7a9a3bbf3ae1a.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/switch/controllers.png"
+dest_files=["res://.godot/imported/controllers.png-7712b49e533d621799a7a9a3bbf3ae1a.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/source/addons/controller_icons/assets/switch/controllers_separate.png b/source/addons/controller_icons/assets/switch/controllers_separate.png
new file mode 100644
index 0000000..0c019da
Binary files /dev/null and b/source/addons/controller_icons/assets/switch/controllers_separate.png differ
diff --git a/source/addons/controller_icons/assets/switch/controllers_separate.png.import b/source/addons/controller_icons/assets/switch/controllers_separate.png.import
new file mode 100644
index 0000000..1a65d91
--- /dev/null
+++ b/source/addons/controller_icons/assets/switch/controllers_separate.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bluvevys04kfi"
+path="res://.godot/imported/controllers_separate.png-1060f3b60202e8596c5e2b6cb4ab7773.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/switch/controllers_separate.png"
+dest_files=["res://.godot/imported/controllers_separate.png-1060f3b60202e8596c5e2b6cb4ab7773.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/source/addons/controller_icons/assets/switch/down.png b/source/addons/controller_icons/assets/switch/down.png
new file mode 100644
index 0000000..7b7b2b2
Binary files /dev/null and b/source/addons/controller_icons/assets/switch/down.png differ
diff --git a/source/addons/controller_icons/assets/switch/down.png.import b/source/addons/controller_icons/assets/switch/down.png.import
new file mode 100644
index 0000000..6092eac
--- /dev/null
+++ b/source/addons/controller_icons/assets/switch/down.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://br2bweafcdeyx"
+path="res://.godot/imported/down.png-a90d78a51af3fbb8a21316a6086e4112.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/switch/down.png"
+dest_files=["res://.godot/imported/down.png-a90d78a51af3fbb8a21316a6086e4112.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/source/addons/controller_icons/assets/switch/dpad.png b/source/addons/controller_icons/assets/switch/dpad.png
new file mode 100644
index 0000000..12f01eb
Binary files /dev/null and b/source/addons/controller_icons/assets/switch/dpad.png differ
diff --git a/source/addons/controller_icons/assets/switch/dpad.png.import b/source/addons/controller_icons/assets/switch/dpad.png.import
new file mode 100644
index 0000000..64f6164
--- /dev/null
+++ b/source/addons/controller_icons/assets/switch/dpad.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c42ruyvdah1bg"
+path="res://.godot/imported/dpad.png-a9f4cd306092d2081b92f100afab13ce.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/switch/dpad.png"
+dest_files=["res://.godot/imported/dpad.png-a9f4cd306092d2081b92f100afab13ce.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/source/addons/controller_icons/assets/switch/dpad_down.png b/source/addons/controller_icons/assets/switch/dpad_down.png
new file mode 100644
index 0000000..37f6d5b
Binary files /dev/null and b/source/addons/controller_icons/assets/switch/dpad_down.png differ
diff --git a/source/addons/controller_icons/assets/switch/dpad_down.png.import b/source/addons/controller_icons/assets/switch/dpad_down.png.import
new file mode 100644
index 0000000..9d9f836
--- /dev/null
+++ b/source/addons/controller_icons/assets/switch/dpad_down.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://daup2v6e8kpa5"
+path="res://.godot/imported/dpad_down.png-d2e040caf2a8553667e08295ebb08db5.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/switch/dpad_down.png"
+dest_files=["res://.godot/imported/dpad_down.png-d2e040caf2a8553667e08295ebb08db5.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/source/addons/controller_icons/assets/switch/dpad_left.png b/source/addons/controller_icons/assets/switch/dpad_left.png
new file mode 100644
index 0000000..8efd7a4
Binary files /dev/null and b/source/addons/controller_icons/assets/switch/dpad_left.png differ
diff --git a/source/addons/controller_icons/assets/switch/dpad_left.png.import b/source/addons/controller_icons/assets/switch/dpad_left.png.import
new file mode 100644
index 0000000..beb1277
--- /dev/null
+++ b/source/addons/controller_icons/assets/switch/dpad_left.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b8828wfao1bpj"
+path="res://.godot/imported/dpad_left.png-e63de4ccf41738e35d2777f505c2be2d.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/switch/dpad_left.png"
+dest_files=["res://.godot/imported/dpad_left.png-e63de4ccf41738e35d2777f505c2be2d.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/source/addons/controller_icons/assets/switch/dpad_right.png b/source/addons/controller_icons/assets/switch/dpad_right.png
new file mode 100644
index 0000000..8b5411d
Binary files /dev/null and b/source/addons/controller_icons/assets/switch/dpad_right.png differ
diff --git a/source/addons/controller_icons/assets/switch/dpad_right.png.import b/source/addons/controller_icons/assets/switch/dpad_right.png.import
new file mode 100644
index 0000000..bc64052
--- /dev/null
+++ b/source/addons/controller_icons/assets/switch/dpad_right.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dlmdkgq67fcis"
+path="res://.godot/imported/dpad_right.png-3007471fdc53a106f529d115b546b760.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/switch/dpad_right.png"
+dest_files=["res://.godot/imported/dpad_right.png-3007471fdc53a106f529d115b546b760.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/source/addons/controller_icons/assets/switch/dpad_up.png b/source/addons/controller_icons/assets/switch/dpad_up.png
new file mode 100644
index 0000000..700a8ba
Binary files /dev/null and b/source/addons/controller_icons/assets/switch/dpad_up.png differ
diff --git a/source/addons/controller_icons/assets/switch/dpad_up.png.import b/source/addons/controller_icons/assets/switch/dpad_up.png.import
new file mode 100644
index 0000000..f81b819
--- /dev/null
+++ b/source/addons/controller_icons/assets/switch/dpad_up.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cskxuv3f6lf61"
+path="res://.godot/imported/dpad_up.png-4c4285851ec1cd038443f47583df3666.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/switch/dpad_up.png"
+dest_files=["res://.godot/imported/dpad_up.png-4c4285851ec1cd038443f47583df3666.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/source/addons/controller_icons/assets/switch/home.png b/source/addons/controller_icons/assets/switch/home.png
new file mode 100644
index 0000000..9b6733c
Binary files /dev/null and b/source/addons/controller_icons/assets/switch/home.png differ
diff --git a/source/addons/controller_icons/assets/switch/home.png.import b/source/addons/controller_icons/assets/switch/home.png.import
new file mode 100644
index 0000000..aac45d3
--- /dev/null
+++ b/source/addons/controller_icons/assets/switch/home.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://r710p2bjr6ul"
+path="res://.godot/imported/home.png-5064b33e1525213704fd7e54a238d89e.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/switch/home.png"
+dest_files=["res://.godot/imported/home.png-5064b33e1525213704fd7e54a238d89e.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/source/addons/controller_icons/assets/switch/l.png b/source/addons/controller_icons/assets/switch/l.png
new file mode 100644
index 0000000..ddfa3b9
Binary files /dev/null and b/source/addons/controller_icons/assets/switch/l.png differ
diff --git a/source/addons/controller_icons/assets/switch/l.png.import b/source/addons/controller_icons/assets/switch/l.png.import
new file mode 100644
index 0000000..899ed63
--- /dev/null
+++ b/source/addons/controller_icons/assets/switch/l.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cwqvqq3urrj7o"
+path="res://.godot/imported/l.png-e3d1358307fb6c1e5f233a556e232e14.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/switch/l.png"
+dest_files=["res://.godot/imported/l.png-e3d1358307fb6c1e5f233a556e232e14.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/source/addons/controller_icons/assets/switch/l_stick.png b/source/addons/controller_icons/assets/switch/l_stick.png
new file mode 100644
index 0000000..d861ca5
Binary files /dev/null and b/source/addons/controller_icons/assets/switch/l_stick.png differ
diff --git a/source/addons/controller_icons/assets/switch/l_stick.png.import b/source/addons/controller_icons/assets/switch/l_stick.png.import
new file mode 100644
index 0000000..a7d2682
--- /dev/null
+++ b/source/addons/controller_icons/assets/switch/l_stick.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b4hjauro4m0qy"
+path="res://.godot/imported/l_stick.png-ca22952e4f56ee820836a9a2a4efa9a5.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/switch/l_stick.png"
+dest_files=["res://.godot/imported/l_stick.png-ca22952e4f56ee820836a9a2a4efa9a5.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/source/addons/controller_icons/assets/switch/left.png b/source/addons/controller_icons/assets/switch/left.png
new file mode 100644
index 0000000..fd58439
Binary files /dev/null and b/source/addons/controller_icons/assets/switch/left.png differ
diff --git a/source/addons/controller_icons/assets/switch/left.png.import b/source/addons/controller_icons/assets/switch/left.png.import
new file mode 100644
index 0000000..10d9b5e
--- /dev/null
+++ b/source/addons/controller_icons/assets/switch/left.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b4m2fe1kt7frh"
+path="res://.godot/imported/left.png-c1516db77a1bd37214295e4fa38ff2d8.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/switch/left.png"
+dest_files=["res://.godot/imported/left.png-c1516db77a1bd37214295e4fa38ff2d8.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/source/addons/controller_icons/assets/switch/minus.png b/source/addons/controller_icons/assets/switch/minus.png
new file mode 100644
index 0000000..d32608e
Binary files /dev/null and b/source/addons/controller_icons/assets/switch/minus.png differ
diff --git a/source/addons/controller_icons/assets/switch/minus.png.import b/source/addons/controller_icons/assets/switch/minus.png.import
new file mode 100644
index 0000000..899d3c8
--- /dev/null
+++ b/source/addons/controller_icons/assets/switch/minus.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://3y7roswe12hw"
+path="res://.godot/imported/minus.png-51777051e1934ff00687c799a7c1a259.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/switch/minus.png"
+dest_files=["res://.godot/imported/minus.png-51777051e1934ff00687c799a7c1a259.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/source/addons/controller_icons/assets/switch/plus.png b/source/addons/controller_icons/assets/switch/plus.png
new file mode 100644
index 0000000..f1b0dc4
Binary files /dev/null and b/source/addons/controller_icons/assets/switch/plus.png differ
diff --git a/source/addons/controller_icons/assets/switch/plus.png.import b/source/addons/controller_icons/assets/switch/plus.png.import
new file mode 100644
index 0000000..83474cd
--- /dev/null
+++ b/source/addons/controller_icons/assets/switch/plus.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cyfb3pxcb7wwp"
+path="res://.godot/imported/plus.png-4390752258f8416f7d20ed3058b9a73d.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/switch/plus.png"
+dest_files=["res://.godot/imported/plus.png-4390752258f8416f7d20ed3058b9a73d.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/source/addons/controller_icons/assets/switch/r.png b/source/addons/controller_icons/assets/switch/r.png
new file mode 100644
index 0000000..01f137a
Binary files /dev/null and b/source/addons/controller_icons/assets/switch/r.png differ
diff --git a/source/addons/controller_icons/assets/switch/r.png.import b/source/addons/controller_icons/assets/switch/r.png.import
new file mode 100644
index 0000000..26a77be
--- /dev/null
+++ b/source/addons/controller_icons/assets/switch/r.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bol28l20uvyth"
+path="res://.godot/imported/r.png-5ff5051242ce222b42f687a41d922ea1.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/switch/r.png"
+dest_files=["res://.godot/imported/r.png-5ff5051242ce222b42f687a41d922ea1.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/source/addons/controller_icons/assets/switch/r_stick.png b/source/addons/controller_icons/assets/switch/r_stick.png
new file mode 100644
index 0000000..f2c605b
Binary files /dev/null and b/source/addons/controller_icons/assets/switch/r_stick.png differ
diff --git a/source/addons/controller_icons/assets/switch/r_stick.png.import b/source/addons/controller_icons/assets/switch/r_stick.png.import
new file mode 100644
index 0000000..b4c242e
--- /dev/null
+++ b/source/addons/controller_icons/assets/switch/r_stick.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://d4kfa5jikbh6e"
+path="res://.godot/imported/r_stick.png-8336fb8720a1ed38bfe5dd6386d21f1b.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/switch/r_stick.png"
+dest_files=["res://.godot/imported/r_stick.png-8336fb8720a1ed38bfe5dd6386d21f1b.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/source/addons/controller_icons/assets/switch/right.png b/source/addons/controller_icons/assets/switch/right.png
new file mode 100644
index 0000000..f524c6c
Binary files /dev/null and b/source/addons/controller_icons/assets/switch/right.png differ
diff --git a/source/addons/controller_icons/assets/switch/right.png.import b/source/addons/controller_icons/assets/switch/right.png.import
new file mode 100644
index 0000000..4cb0666
--- /dev/null
+++ b/source/addons/controller_icons/assets/switch/right.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://clv4i78euervw"
+path="res://.godot/imported/right.png-4a1a0df486de8574bd3643a98f0f445e.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/switch/right.png"
+dest_files=["res://.godot/imported/right.png-4a1a0df486de8574bd3643a98f0f445e.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/source/addons/controller_icons/assets/switch/square.png b/source/addons/controller_icons/assets/switch/square.png
new file mode 100644
index 0000000..d0fd432
Binary files /dev/null and b/source/addons/controller_icons/assets/switch/square.png differ
diff --git a/source/addons/controller_icons/assets/switch/square.png.import b/source/addons/controller_icons/assets/switch/square.png.import
new file mode 100644
index 0000000..b156533
--- /dev/null
+++ b/source/addons/controller_icons/assets/switch/square.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b68npgglyuic1"
+path="res://.godot/imported/square.png-120b0a09bb5b62e1b7896639e6416c45.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/switch/square.png"
+dest_files=["res://.godot/imported/square.png-120b0a09bb5b62e1b7896639e6416c45.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/source/addons/controller_icons/assets/switch/up.png b/source/addons/controller_icons/assets/switch/up.png
new file mode 100644
index 0000000..352f890
Binary files /dev/null and b/source/addons/controller_icons/assets/switch/up.png differ
diff --git a/source/addons/controller_icons/assets/switch/up.png.import b/source/addons/controller_icons/assets/switch/up.png.import
new file mode 100644
index 0000000..445cd8e
--- /dev/null
+++ b/source/addons/controller_icons/assets/switch/up.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b54pfsyyoekci"
+path="res://.godot/imported/up.png-935181649d7a0f7c750c95b1b3828c64.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/switch/up.png"
+dest_files=["res://.godot/imported/up.png-935181649d7a0f7c750c95b1b3828c64.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/source/addons/controller_icons/assets/switch/x.png b/source/addons/controller_icons/assets/switch/x.png
new file mode 100644
index 0000000..bdf86ba
Binary files /dev/null and b/source/addons/controller_icons/assets/switch/x.png differ
diff --git a/source/addons/controller_icons/assets/switch/x.png.import b/source/addons/controller_icons/assets/switch/x.png.import
new file mode 100644
index 0000000..f787d20
--- /dev/null
+++ b/source/addons/controller_icons/assets/switch/x.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b50wnctwb7d4y"
+path="res://.godot/imported/x.png-c0b79e607f24c770e5e6082d203a8f2c.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/switch/x.png"
+dest_files=["res://.godot/imported/x.png-c0b79e607f24c770e5e6082d203a8f2c.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/source/addons/controller_icons/assets/switch/y.png b/source/addons/controller_icons/assets/switch/y.png
new file mode 100644
index 0000000..46ac216
Binary files /dev/null and b/source/addons/controller_icons/assets/switch/y.png differ
diff --git a/source/addons/controller_icons/assets/switch/y.png.import b/source/addons/controller_icons/assets/switch/y.png.import
new file mode 100644
index 0000000..0d53b2d
--- /dev/null
+++ b/source/addons/controller_icons/assets/switch/y.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://buc72djpve48f"
+path="res://.godot/imported/y.png-93b1223c824009cc6b4dc6d04216c5d5.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/switch/y.png"
+dest_files=["res://.godot/imported/y.png-93b1223c824009cc6b4dc6d04216c5d5.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/source/addons/controller_icons/assets/switch/zl.png b/source/addons/controller_icons/assets/switch/zl.png
new file mode 100644
index 0000000..6942e1f
Binary files /dev/null and b/source/addons/controller_icons/assets/switch/zl.png differ
diff --git a/source/addons/controller_icons/assets/switch/zl.png.import b/source/addons/controller_icons/assets/switch/zl.png.import
new file mode 100644
index 0000000..88b508e
--- /dev/null
+++ b/source/addons/controller_icons/assets/switch/zl.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://ck2key5t2ql5n"
+path="res://.godot/imported/zl.png-d3401c26a4f6e21389cc91a045e78bbc.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/switch/zl.png"
+dest_files=["res://.godot/imported/zl.png-d3401c26a4f6e21389cc91a045e78bbc.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/source/addons/controller_icons/assets/switch/zr.png b/source/addons/controller_icons/assets/switch/zr.png
new file mode 100644
index 0000000..6aef3cb
Binary files /dev/null and b/source/addons/controller_icons/assets/switch/zr.png differ
diff --git a/source/addons/controller_icons/assets/switch/zr.png.import b/source/addons/controller_icons/assets/switch/zr.png.import
new file mode 100644
index 0000000..57b46a5
--- /dev/null
+++ b/source/addons/controller_icons/assets/switch/zr.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c6b1xw0oivd8a"
+path="res://.godot/imported/zr.png-773c45f72efa58594d2c296f7bcf98ad.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/switch/zr.png"
+dest_files=["res://.godot/imported/zr.png-773c45f72efa58594d2c296f7bcf98ad.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/source/addons/controller_icons/assets/xbox360/a.png b/source/addons/controller_icons/assets/xbox360/a.png
new file mode 100644
index 0000000..cd716d1
Binary files /dev/null and b/source/addons/controller_icons/assets/xbox360/a.png differ
diff --git a/source/addons/controller_icons/assets/xbox360/a.png.import b/source/addons/controller_icons/assets/xbox360/a.png.import
new file mode 100644
index 0000000..adad213
--- /dev/null
+++ b/source/addons/controller_icons/assets/xbox360/a.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://d284wkmo0vqfk"
+path="res://.godot/imported/a.png-35cb6a74789d7796b5f5833c3c67ffde.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xbox360/a.png"
+dest_files=["res://.godot/imported/a.png-35cb6a74789d7796b5f5833c3c67ffde.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/source/addons/controller_icons/assets/xbox360/b.png b/source/addons/controller_icons/assets/xbox360/b.png
new file mode 100644
index 0000000..73bcb6e
Binary files /dev/null and b/source/addons/controller_icons/assets/xbox360/b.png differ
diff --git a/source/addons/controller_icons/assets/xbox360/b.png.import b/source/addons/controller_icons/assets/xbox360/b.png.import
new file mode 100644
index 0000000..b841c1e
--- /dev/null
+++ b/source/addons/controller_icons/assets/xbox360/b.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bufx8lu1tny4o"
+path="res://.godot/imported/b.png-80e4c32ae4527fdcb995a9e786adbdbf.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xbox360/b.png"
+dest_files=["res://.godot/imported/b.png-80e4c32ae4527fdcb995a9e786adbdbf.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/source/addons/controller_icons/assets/xbox360/back.png b/source/addons/controller_icons/assets/xbox360/back.png
new file mode 100644
index 0000000..bfb10db
Binary files /dev/null and b/source/addons/controller_icons/assets/xbox360/back.png differ
diff --git a/source/addons/controller_icons/assets/xbox360/back.png.import b/source/addons/controller_icons/assets/xbox360/back.png.import
new file mode 100644
index 0000000..a006cd4
--- /dev/null
+++ b/source/addons/controller_icons/assets/xbox360/back.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cdjnpcxgnxrxb"
+path="res://.godot/imported/back.png-ce88a25195b2a2fbe762bda6ff222b5b.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xbox360/back.png"
+dest_files=["res://.godot/imported/back.png-ce88a25195b2a2fbe762bda6ff222b5b.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/source/addons/controller_icons/assets/xbox360/back_alt.png b/source/addons/controller_icons/assets/xbox360/back_alt.png
new file mode 100644
index 0000000..900705b
Binary files /dev/null and b/source/addons/controller_icons/assets/xbox360/back_alt.png differ
diff --git a/source/addons/controller_icons/assets/xbox360/back_alt.png.import b/source/addons/controller_icons/assets/xbox360/back_alt.png.import
new file mode 100644
index 0000000..a3d9d86
--- /dev/null
+++ b/source/addons/controller_icons/assets/xbox360/back_alt.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://de4v68g8x5ygf"
+path="res://.godot/imported/back_alt.png-a7a979f712d8115fc34a8ae66d914049.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xbox360/back_alt.png"
+dest_files=["res://.godot/imported/back_alt.png-a7a979f712d8115fc34a8ae66d914049.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/source/addons/controller_icons/assets/xbox360/dpad.png b/source/addons/controller_icons/assets/xbox360/dpad.png
new file mode 100644
index 0000000..93e90de
Binary files /dev/null and b/source/addons/controller_icons/assets/xbox360/dpad.png differ
diff --git a/source/addons/controller_icons/assets/xbox360/dpad.png.import b/source/addons/controller_icons/assets/xbox360/dpad.png.import
new file mode 100644
index 0000000..270fd21
--- /dev/null
+++ b/source/addons/controller_icons/assets/xbox360/dpad.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cuds8v7pvi4tj"
+path="res://.godot/imported/dpad.png-4b640d96766e8faba6142c2eff13caea.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xbox360/dpad.png"
+dest_files=["res://.godot/imported/dpad.png-4b640d96766e8faba6142c2eff13caea.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/source/addons/controller_icons/assets/xbox360/dpad_down.png b/source/addons/controller_icons/assets/xbox360/dpad_down.png
new file mode 100644
index 0000000..944d59b
Binary files /dev/null and b/source/addons/controller_icons/assets/xbox360/dpad_down.png differ
diff --git a/source/addons/controller_icons/assets/xbox360/dpad_down.png.import b/source/addons/controller_icons/assets/xbox360/dpad_down.png.import
new file mode 100644
index 0000000..71b07d5
--- /dev/null
+++ b/source/addons/controller_icons/assets/xbox360/dpad_down.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dt4m6u4nau82r"
+path="res://.godot/imported/dpad_down.png-fdbc136940849193face1912c9965e6f.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xbox360/dpad_down.png"
+dest_files=["res://.godot/imported/dpad_down.png-fdbc136940849193face1912c9965e6f.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/source/addons/controller_icons/assets/xbox360/dpad_left.png b/source/addons/controller_icons/assets/xbox360/dpad_left.png
new file mode 100644
index 0000000..6091cf2
Binary files /dev/null and b/source/addons/controller_icons/assets/xbox360/dpad_left.png differ
diff --git a/source/addons/controller_icons/assets/xbox360/dpad_left.png.import b/source/addons/controller_icons/assets/xbox360/dpad_left.png.import
new file mode 100644
index 0000000..f266439
--- /dev/null
+++ b/source/addons/controller_icons/assets/xbox360/dpad_left.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://7r70kxgen0mv"
+path="res://.godot/imported/dpad_left.png-34112701ebe2a783358ffaf13cae755e.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xbox360/dpad_left.png"
+dest_files=["res://.godot/imported/dpad_left.png-34112701ebe2a783358ffaf13cae755e.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/source/addons/controller_icons/assets/xbox360/dpad_right.png b/source/addons/controller_icons/assets/xbox360/dpad_right.png
new file mode 100644
index 0000000..d099719
Binary files /dev/null and b/source/addons/controller_icons/assets/xbox360/dpad_right.png differ
diff --git a/source/addons/controller_icons/assets/xbox360/dpad_right.png.import b/source/addons/controller_icons/assets/xbox360/dpad_right.png.import
new file mode 100644
index 0000000..cab6ae5
--- /dev/null
+++ b/source/addons/controller_icons/assets/xbox360/dpad_right.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://7qkn2dva6jv"
+path="res://.godot/imported/dpad_right.png-208422152fd0c75c3b1e040c016ba742.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xbox360/dpad_right.png"
+dest_files=["res://.godot/imported/dpad_right.png-208422152fd0c75c3b1e040c016ba742.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/source/addons/controller_icons/assets/xbox360/dpad_up.png b/source/addons/controller_icons/assets/xbox360/dpad_up.png
new file mode 100644
index 0000000..8939669
Binary files /dev/null and b/source/addons/controller_icons/assets/xbox360/dpad_up.png differ
diff --git a/source/addons/controller_icons/assets/xbox360/dpad_up.png.import b/source/addons/controller_icons/assets/xbox360/dpad_up.png.import
new file mode 100644
index 0000000..0c4a9bd
--- /dev/null
+++ b/source/addons/controller_icons/assets/xbox360/dpad_up.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bh66fibu352gl"
+path="res://.godot/imported/dpad_up.png-f534a7e9efd4b904c87b93f717d8ec4f.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xbox360/dpad_up.png"
+dest_files=["res://.godot/imported/dpad_up.png-f534a7e9efd4b904c87b93f717d8ec4f.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/source/addons/controller_icons/assets/xbox360/l_stick.png b/source/addons/controller_icons/assets/xbox360/l_stick.png
new file mode 100644
index 0000000..8139be2
Binary files /dev/null and b/source/addons/controller_icons/assets/xbox360/l_stick.png differ
diff --git a/source/addons/controller_icons/assets/xbox360/l_stick.png.import b/source/addons/controller_icons/assets/xbox360/l_stick.png.import
new file mode 100644
index 0000000..4e34d36
--- /dev/null
+++ b/source/addons/controller_icons/assets/xbox360/l_stick.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://fxgoiilpipsd"
+path="res://.godot/imported/l_stick.png-b5ed993555606d8da48a1c310a3cbd0d.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xbox360/l_stick.png"
+dest_files=["res://.godot/imported/l_stick.png-b5ed993555606d8da48a1c310a3cbd0d.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/source/addons/controller_icons/assets/xbox360/l_stick_click.png b/source/addons/controller_icons/assets/xbox360/l_stick_click.png
new file mode 100644
index 0000000..21a4ee7
Binary files /dev/null and b/source/addons/controller_icons/assets/xbox360/l_stick_click.png differ
diff --git a/source/addons/controller_icons/assets/xbox360/l_stick_click.png.import b/source/addons/controller_icons/assets/xbox360/l_stick_click.png.import
new file mode 100644
index 0000000..b3edd5e
--- /dev/null
+++ b/source/addons/controller_icons/assets/xbox360/l_stick_click.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://mh6if65g6eob"
+path="res://.godot/imported/l_stick_click.png-2ae341247067b8165d18d20822dfa07d.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xbox360/l_stick_click.png"
+dest_files=["res://.godot/imported/l_stick_click.png-2ae341247067b8165d18d20822dfa07d.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/source/addons/controller_icons/assets/xbox360/lb.png b/source/addons/controller_icons/assets/xbox360/lb.png
new file mode 100644
index 0000000..d83f418
Binary files /dev/null and b/source/addons/controller_icons/assets/xbox360/lb.png differ
diff --git a/source/addons/controller_icons/assets/xbox360/lb.png.import b/source/addons/controller_icons/assets/xbox360/lb.png.import
new file mode 100644
index 0000000..1fe7bcf
--- /dev/null
+++ b/source/addons/controller_icons/assets/xbox360/lb.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bamrmda3in3qq"
+path="res://.godot/imported/lb.png-976dbb55daa9f796254f583420e70b4e.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xbox360/lb.png"
+dest_files=["res://.godot/imported/lb.png-976dbb55daa9f796254f583420e70b4e.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/source/addons/controller_icons/assets/xbox360/lt.png b/source/addons/controller_icons/assets/xbox360/lt.png
new file mode 100644
index 0000000..84fc6f8
Binary files /dev/null and b/source/addons/controller_icons/assets/xbox360/lt.png differ
diff --git a/source/addons/controller_icons/assets/xbox360/lt.png.import b/source/addons/controller_icons/assets/xbox360/lt.png.import
new file mode 100644
index 0000000..a57e4ab
--- /dev/null
+++ b/source/addons/controller_icons/assets/xbox360/lt.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dhhjoq01cc2oh"
+path="res://.godot/imported/lt.png-5d538474526e2412135a268d6c53dd5b.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xbox360/lt.png"
+dest_files=["res://.godot/imported/lt.png-5d538474526e2412135a268d6c53dd5b.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/source/addons/controller_icons/assets/xbox360/r_stick.png b/source/addons/controller_icons/assets/xbox360/r_stick.png
new file mode 100644
index 0000000..dde08c0
Binary files /dev/null and b/source/addons/controller_icons/assets/xbox360/r_stick.png differ
diff --git a/source/addons/controller_icons/assets/xbox360/r_stick.png.import b/source/addons/controller_icons/assets/xbox360/r_stick.png.import
new file mode 100644
index 0000000..d53ae8f
--- /dev/null
+++ b/source/addons/controller_icons/assets/xbox360/r_stick.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://d6jwqg6mq8dk"
+path="res://.godot/imported/r_stick.png-2a7b966ef19b6a873dd423ca70dafc2c.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xbox360/r_stick.png"
+dest_files=["res://.godot/imported/r_stick.png-2a7b966ef19b6a873dd423ca70dafc2c.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/source/addons/controller_icons/assets/xbox360/r_stick_click.png b/source/addons/controller_icons/assets/xbox360/r_stick_click.png
new file mode 100644
index 0000000..bb321d2
Binary files /dev/null and b/source/addons/controller_icons/assets/xbox360/r_stick_click.png differ
diff --git a/source/addons/controller_icons/assets/xbox360/r_stick_click.png.import b/source/addons/controller_icons/assets/xbox360/r_stick_click.png.import
new file mode 100644
index 0000000..a557eaa
--- /dev/null
+++ b/source/addons/controller_icons/assets/xbox360/r_stick_click.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://db7d0vqnfyuin"
+path="res://.godot/imported/r_stick_click.png-89d0df3f4f9a91691c03fb1afca8b3ae.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xbox360/r_stick_click.png"
+dest_files=["res://.godot/imported/r_stick_click.png-89d0df3f4f9a91691c03fb1afca8b3ae.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/source/addons/controller_icons/assets/xbox360/rb.png b/source/addons/controller_icons/assets/xbox360/rb.png
new file mode 100644
index 0000000..7735e4c
Binary files /dev/null and b/source/addons/controller_icons/assets/xbox360/rb.png differ
diff --git a/source/addons/controller_icons/assets/xbox360/rb.png.import b/source/addons/controller_icons/assets/xbox360/rb.png.import
new file mode 100644
index 0000000..a7949ff
--- /dev/null
+++ b/source/addons/controller_icons/assets/xbox360/rb.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cw2jo5xbteqdu"
+path="res://.godot/imported/rb.png-1161a3ee4faa1b6a0f9a32ae97dda6fd.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xbox360/rb.png"
+dest_files=["res://.godot/imported/rb.png-1161a3ee4faa1b6a0f9a32ae97dda6fd.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/source/addons/controller_icons/assets/xbox360/rt.png b/source/addons/controller_icons/assets/xbox360/rt.png
new file mode 100644
index 0000000..1ea785c
Binary files /dev/null and b/source/addons/controller_icons/assets/xbox360/rt.png differ
diff --git a/source/addons/controller_icons/assets/xbox360/rt.png.import b/source/addons/controller_icons/assets/xbox360/rt.png.import
new file mode 100644
index 0000000..ed854b0
--- /dev/null
+++ b/source/addons/controller_icons/assets/xbox360/rt.png.import
@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://d2qha4gd4x604"
+path.s3tc="res://.godot/imported/rt.png-75a73c0618bfa934f1c3030385092590.s3tc.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc"],
+"vram_texture": true
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xbox360/rt.png"
+dest_files=["res://.godot/imported/rt.png-75a73c0618bfa934f1c3030385092590.s3tc.ctex"]
+
+[params]
+
+compress/mode=2
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=true
+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=0
diff --git a/source/addons/controller_icons/assets/xbox360/start.png b/source/addons/controller_icons/assets/xbox360/start.png
new file mode 100644
index 0000000..4c62434
Binary files /dev/null and b/source/addons/controller_icons/assets/xbox360/start.png differ
diff --git a/source/addons/controller_icons/assets/xbox360/start.png.import b/source/addons/controller_icons/assets/xbox360/start.png.import
new file mode 100644
index 0000000..23cfb1c
--- /dev/null
+++ b/source/addons/controller_icons/assets/xbox360/start.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://coxp4sapp4g8n"
+path="res://.godot/imported/start.png-4da2d3336d3215602b774e12f03ad8d1.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xbox360/start.png"
+dest_files=["res://.godot/imported/start.png-4da2d3336d3215602b774e12f03ad8d1.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/source/addons/controller_icons/assets/xbox360/start_alt.png b/source/addons/controller_icons/assets/xbox360/start_alt.png
new file mode 100644
index 0000000..7a10fcd
Binary files /dev/null and b/source/addons/controller_icons/assets/xbox360/start_alt.png differ
diff --git a/source/addons/controller_icons/assets/xbox360/start_alt.png.import b/source/addons/controller_icons/assets/xbox360/start_alt.png.import
new file mode 100644
index 0000000..5febd05
--- /dev/null
+++ b/source/addons/controller_icons/assets/xbox360/start_alt.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dq0eirc22li66"
+path="res://.godot/imported/start_alt.png-a28c5fa4e3559e75e7db8f34ccfbd03a.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xbox360/start_alt.png"
+dest_files=["res://.godot/imported/start_alt.png-a28c5fa4e3559e75e7db8f34ccfbd03a.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/source/addons/controller_icons/assets/xbox360/x.png b/source/addons/controller_icons/assets/xbox360/x.png
new file mode 100644
index 0000000..4b8cec1
Binary files /dev/null and b/source/addons/controller_icons/assets/xbox360/x.png differ
diff --git a/source/addons/controller_icons/assets/xbox360/x.png.import b/source/addons/controller_icons/assets/xbox360/x.png.import
new file mode 100644
index 0000000..937a985
--- /dev/null
+++ b/source/addons/controller_icons/assets/xbox360/x.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://jcc3t88rfxh0"
+path="res://.godot/imported/x.png-9b708a5be93b17b1baa7773f17e3502f.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xbox360/x.png"
+dest_files=["res://.godot/imported/x.png-9b708a5be93b17b1baa7773f17e3502f.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/source/addons/controller_icons/assets/xbox360/y.png b/source/addons/controller_icons/assets/xbox360/y.png
new file mode 100644
index 0000000..e32b04a
Binary files /dev/null and b/source/addons/controller_icons/assets/xbox360/y.png differ
diff --git a/source/addons/controller_icons/assets/xbox360/y.png.import b/source/addons/controller_icons/assets/xbox360/y.png.import
new file mode 100644
index 0000000..54bf8c1
--- /dev/null
+++ b/source/addons/controller_icons/assets/xbox360/y.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bva4iswwvta5d"
+path="res://.godot/imported/y.png-570a5281cfcc83b747da0fa451e494b7.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xbox360/y.png"
+dest_files=["res://.godot/imported/y.png-570a5281cfcc83b747da0fa451e494b7.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/source/addons/controller_icons/assets/xboxone/a.png b/source/addons/controller_icons/assets/xboxone/a.png
new file mode 100644
index 0000000..28c3b60
Binary files /dev/null and b/source/addons/controller_icons/assets/xboxone/a.png differ
diff --git a/source/addons/controller_icons/assets/xboxone/a.png.import b/source/addons/controller_icons/assets/xboxone/a.png.import
new file mode 100644
index 0000000..7fafeb3
--- /dev/null
+++ b/source/addons/controller_icons/assets/xboxone/a.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dwwgf5g11galy"
+path="res://.godot/imported/a.png-df37d09ebc89d866cdbfffbbf8f73ee9.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xboxone/a.png"
+dest_files=["res://.godot/imported/a.png-df37d09ebc89d866cdbfffbbf8f73ee9.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/source/addons/controller_icons/assets/xboxone/b.png b/source/addons/controller_icons/assets/xboxone/b.png
new file mode 100644
index 0000000..2a4d9b6
Binary files /dev/null and b/source/addons/controller_icons/assets/xboxone/b.png differ
diff --git a/source/addons/controller_icons/assets/xboxone/b.png.import b/source/addons/controller_icons/assets/xboxone/b.png.import
new file mode 100644
index 0000000..2e3b44b
--- /dev/null
+++ b/source/addons/controller_icons/assets/xboxone/b.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://21k6orfpjxk5"
+path="res://.godot/imported/b.png-ba65adfa94f146e55646f29fd6dae977.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xboxone/b.png"
+dest_files=["res://.godot/imported/b.png-ba65adfa94f146e55646f29fd6dae977.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/source/addons/controller_icons/assets/xboxone/diagram.png b/source/addons/controller_icons/assets/xboxone/diagram.png
new file mode 100644
index 0000000..9b79c5d
Binary files /dev/null and b/source/addons/controller_icons/assets/xboxone/diagram.png differ
diff --git a/source/addons/controller_icons/assets/xboxone/diagram.png.import b/source/addons/controller_icons/assets/xboxone/diagram.png.import
new file mode 100644
index 0000000..c2c5e6f
--- /dev/null
+++ b/source/addons/controller_icons/assets/xboxone/diagram.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://ds7amy38mqxe7"
+path="res://.godot/imported/diagram.png-0f2706ce47fa6085377e14e95b171dea.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xboxone/diagram.png"
+dest_files=["res://.godot/imported/diagram.png-0f2706ce47fa6085377e14e95b171dea.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/source/addons/controller_icons/assets/xboxone/diagram_simple.png b/source/addons/controller_icons/assets/xboxone/diagram_simple.png
new file mode 100644
index 0000000..7e3a1d9
Binary files /dev/null and b/source/addons/controller_icons/assets/xboxone/diagram_simple.png differ
diff --git a/source/addons/controller_icons/assets/xboxone/diagram_simple.png.import b/source/addons/controller_icons/assets/xboxone/diagram_simple.png.import
new file mode 100644
index 0000000..e120005
--- /dev/null
+++ b/source/addons/controller_icons/assets/xboxone/diagram_simple.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dtttbuwyio14v"
+path="res://.godot/imported/diagram_simple.png-6f075f06332bedee75e8a5dc798ddf0a.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xboxone/diagram_simple.png"
+dest_files=["res://.godot/imported/diagram_simple.png-6f075f06332bedee75e8a5dc798ddf0a.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/source/addons/controller_icons/assets/xboxone/dpad.png b/source/addons/controller_icons/assets/xboxone/dpad.png
new file mode 100644
index 0000000..9c04c85
Binary files /dev/null and b/source/addons/controller_icons/assets/xboxone/dpad.png differ
diff --git a/source/addons/controller_icons/assets/xboxone/dpad.png.import b/source/addons/controller_icons/assets/xboxone/dpad.png.import
new file mode 100644
index 0000000..19549cb
--- /dev/null
+++ b/source/addons/controller_icons/assets/xboxone/dpad.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b3iafdmclhdit"
+path="res://.godot/imported/dpad.png-19ecbd13049552e45dedb0cb27cf0f1b.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xboxone/dpad.png"
+dest_files=["res://.godot/imported/dpad.png-19ecbd13049552e45dedb0cb27cf0f1b.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/source/addons/controller_icons/assets/xboxone/dpad_down.png b/source/addons/controller_icons/assets/xboxone/dpad_down.png
new file mode 100644
index 0000000..8c1134c
Binary files /dev/null and b/source/addons/controller_icons/assets/xboxone/dpad_down.png differ
diff --git a/source/addons/controller_icons/assets/xboxone/dpad_down.png.import b/source/addons/controller_icons/assets/xboxone/dpad_down.png.import
new file mode 100644
index 0000000..1e9f10f
--- /dev/null
+++ b/source/addons/controller_icons/assets/xboxone/dpad_down.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bxseb4ccmfktr"
+path="res://.godot/imported/dpad_down.png-0c9ca40e693b569f2fccd07829ce2ce5.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xboxone/dpad_down.png"
+dest_files=["res://.godot/imported/dpad_down.png-0c9ca40e693b569f2fccd07829ce2ce5.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/source/addons/controller_icons/assets/xboxone/dpad_left.png b/source/addons/controller_icons/assets/xboxone/dpad_left.png
new file mode 100644
index 0000000..45ddb16
Binary files /dev/null and b/source/addons/controller_icons/assets/xboxone/dpad_left.png differ
diff --git a/source/addons/controller_icons/assets/xboxone/dpad_left.png.import b/source/addons/controller_icons/assets/xboxone/dpad_left.png.import
new file mode 100644
index 0000000..f15bb3c
--- /dev/null
+++ b/source/addons/controller_icons/assets/xboxone/dpad_left.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dv1dkaue3ow3r"
+path="res://.godot/imported/dpad_left.png-92254da17371396d0d47d28719f0e609.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xboxone/dpad_left.png"
+dest_files=["res://.godot/imported/dpad_left.png-92254da17371396d0d47d28719f0e609.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/source/addons/controller_icons/assets/xboxone/dpad_right.png b/source/addons/controller_icons/assets/xboxone/dpad_right.png
new file mode 100644
index 0000000..a1fbc2c
Binary files /dev/null and b/source/addons/controller_icons/assets/xboxone/dpad_right.png differ
diff --git a/source/addons/controller_icons/assets/xboxone/dpad_right.png.import b/source/addons/controller_icons/assets/xboxone/dpad_right.png.import
new file mode 100644
index 0000000..ba23af8
--- /dev/null
+++ b/source/addons/controller_icons/assets/xboxone/dpad_right.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cepfb3dgv2lhf"
+path="res://.godot/imported/dpad_right.png-df952148b3d372909267f78c1b09e03b.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xboxone/dpad_right.png"
+dest_files=["res://.godot/imported/dpad_right.png-df952148b3d372909267f78c1b09e03b.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/source/addons/controller_icons/assets/xboxone/dpad_up.png b/source/addons/controller_icons/assets/xboxone/dpad_up.png
new file mode 100644
index 0000000..e8eab7d
Binary files /dev/null and b/source/addons/controller_icons/assets/xboxone/dpad_up.png differ
diff --git a/source/addons/controller_icons/assets/xboxone/dpad_up.png.import b/source/addons/controller_icons/assets/xboxone/dpad_up.png.import
new file mode 100644
index 0000000..25ec7d9
--- /dev/null
+++ b/source/addons/controller_icons/assets/xboxone/dpad_up.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cxx27mcrkop34"
+path="res://.godot/imported/dpad_up.png-d8fa0f50e9f7bf8b9172cecc962850ac.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xboxone/dpad_up.png"
+dest_files=["res://.godot/imported/dpad_up.png-d8fa0f50e9f7bf8b9172cecc962850ac.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/source/addons/controller_icons/assets/xboxone/l_stick.png b/source/addons/controller_icons/assets/xboxone/l_stick.png
new file mode 100644
index 0000000..9c5ca5c
Binary files /dev/null and b/source/addons/controller_icons/assets/xboxone/l_stick.png differ
diff --git a/source/addons/controller_icons/assets/xboxone/l_stick.png.import b/source/addons/controller_icons/assets/xboxone/l_stick.png.import
new file mode 100644
index 0000000..684f525
--- /dev/null
+++ b/source/addons/controller_icons/assets/xboxone/l_stick.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bfxo2jdawkbxl"
+path="res://.godot/imported/l_stick.png-0d3026b5b0f374950eb21b41723d35cc.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xboxone/l_stick.png"
+dest_files=["res://.godot/imported/l_stick.png-0d3026b5b0f374950eb21b41723d35cc.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/source/addons/controller_icons/assets/xboxone/l_stick_click.png b/source/addons/controller_icons/assets/xboxone/l_stick_click.png
new file mode 100644
index 0000000..ad0428f
Binary files /dev/null and b/source/addons/controller_icons/assets/xboxone/l_stick_click.png differ
diff --git a/source/addons/controller_icons/assets/xboxone/l_stick_click.png.import b/source/addons/controller_icons/assets/xboxone/l_stick_click.png.import
new file mode 100644
index 0000000..2dac9db
--- /dev/null
+++ b/source/addons/controller_icons/assets/xboxone/l_stick_click.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b4wnmpco87lk2"
+path="res://.godot/imported/l_stick_click.png-f6ed1c56bfd385576764a1e11f9f28b4.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xboxone/l_stick_click.png"
+dest_files=["res://.godot/imported/l_stick_click.png-f6ed1c56bfd385576764a1e11f9f28b4.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/source/addons/controller_icons/assets/xboxone/lb.png b/source/addons/controller_icons/assets/xboxone/lb.png
new file mode 100644
index 0000000..f6c414b
Binary files /dev/null and b/source/addons/controller_icons/assets/xboxone/lb.png differ
diff --git a/source/addons/controller_icons/assets/xboxone/lb.png.import b/source/addons/controller_icons/assets/xboxone/lb.png.import
new file mode 100644
index 0000000..d239fd0
--- /dev/null
+++ b/source/addons/controller_icons/assets/xboxone/lb.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dp2y22fkfbsyu"
+path="res://.godot/imported/lb.png-bd9829412dab8895ecddec9847e04e30.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xboxone/lb.png"
+dest_files=["res://.godot/imported/lb.png-bd9829412dab8895ecddec9847e04e30.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/source/addons/controller_icons/assets/xboxone/lt.png b/source/addons/controller_icons/assets/xboxone/lt.png
new file mode 100644
index 0000000..e9681c9
Binary files /dev/null and b/source/addons/controller_icons/assets/xboxone/lt.png differ
diff --git a/source/addons/controller_icons/assets/xboxone/lt.png.import b/source/addons/controller_icons/assets/xboxone/lt.png.import
new file mode 100644
index 0000000..88f0223
--- /dev/null
+++ b/source/addons/controller_icons/assets/xboxone/lt.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://pxfeij36kho8"
+path="res://.godot/imported/lt.png-e5cbcc6dfd86517f8b6df37ab212f728.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xboxone/lt.png"
+dest_files=["res://.godot/imported/lt.png-e5cbcc6dfd86517f8b6df37ab212f728.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/source/addons/controller_icons/assets/xboxone/menu.png b/source/addons/controller_icons/assets/xboxone/menu.png
new file mode 100644
index 0000000..2cbfb08
Binary files /dev/null and b/source/addons/controller_icons/assets/xboxone/menu.png differ
diff --git a/source/addons/controller_icons/assets/xboxone/menu.png.import b/source/addons/controller_icons/assets/xboxone/menu.png.import
new file mode 100644
index 0000000..f461052
--- /dev/null
+++ b/source/addons/controller_icons/assets/xboxone/menu.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://ddoiw1qbo1nqo"
+path="res://.godot/imported/menu.png-90302e9e2a81667c60beb62716dd216f.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xboxone/menu.png"
+dest_files=["res://.godot/imported/menu.png-90302e9e2a81667c60beb62716dd216f.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/source/addons/controller_icons/assets/xboxone/r_stick.png b/source/addons/controller_icons/assets/xboxone/r_stick.png
new file mode 100644
index 0000000..3d83a22
Binary files /dev/null and b/source/addons/controller_icons/assets/xboxone/r_stick.png differ
diff --git a/source/addons/controller_icons/assets/xboxone/r_stick.png.import b/source/addons/controller_icons/assets/xboxone/r_stick.png.import
new file mode 100644
index 0000000..895da77
--- /dev/null
+++ b/source/addons/controller_icons/assets/xboxone/r_stick.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://gxvdjyj5ur2w"
+path="res://.godot/imported/r_stick.png-3aeee5aa9939c501687f510e0be1f354.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xboxone/r_stick.png"
+dest_files=["res://.godot/imported/r_stick.png-3aeee5aa9939c501687f510e0be1f354.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/source/addons/controller_icons/assets/xboxone/r_stick_click.png b/source/addons/controller_icons/assets/xboxone/r_stick_click.png
new file mode 100644
index 0000000..de08508
Binary files /dev/null and b/source/addons/controller_icons/assets/xboxone/r_stick_click.png differ
diff --git a/source/addons/controller_icons/assets/xboxone/r_stick_click.png.import b/source/addons/controller_icons/assets/xboxone/r_stick_click.png.import
new file mode 100644
index 0000000..4cbec07
--- /dev/null
+++ b/source/addons/controller_icons/assets/xboxone/r_stick_click.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dx7no3wmbkt3s"
+path="res://.godot/imported/r_stick_click.png-0bcdf518623b525d9f31b8a5a49e91e4.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xboxone/r_stick_click.png"
+dest_files=["res://.godot/imported/r_stick_click.png-0bcdf518623b525d9f31b8a5a49e91e4.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/source/addons/controller_icons/assets/xboxone/rb.png b/source/addons/controller_icons/assets/xboxone/rb.png
new file mode 100644
index 0000000..5dcfc6d
Binary files /dev/null and b/source/addons/controller_icons/assets/xboxone/rb.png differ
diff --git a/source/addons/controller_icons/assets/xboxone/rb.png.import b/source/addons/controller_icons/assets/xboxone/rb.png.import
new file mode 100644
index 0000000..a55fb0e
--- /dev/null
+++ b/source/addons/controller_icons/assets/xboxone/rb.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cbor273q2fdp3"
+path="res://.godot/imported/rb.png-c02637559fb689b9cd61df07ff2fefdd.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xboxone/rb.png"
+dest_files=["res://.godot/imported/rb.png-c02637559fb689b9cd61df07ff2fefdd.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/source/addons/controller_icons/assets/xboxone/rt.png b/source/addons/controller_icons/assets/xboxone/rt.png
new file mode 100644
index 0000000..7bf27f4
Binary files /dev/null and b/source/addons/controller_icons/assets/xboxone/rt.png differ
diff --git a/source/addons/controller_icons/assets/xboxone/rt.png.import b/source/addons/controller_icons/assets/xboxone/rt.png.import
new file mode 100644
index 0000000..5adee99
--- /dev/null
+++ b/source/addons/controller_icons/assets/xboxone/rt.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://nqv3xt52o1e"
+path="res://.godot/imported/rt.png-6a132dc7aae10f49a3d0c4c557cad22e.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xboxone/rt.png"
+dest_files=["res://.godot/imported/rt.png-6a132dc7aae10f49a3d0c4c557cad22e.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/source/addons/controller_icons/assets/xboxone/view.png b/source/addons/controller_icons/assets/xboxone/view.png
new file mode 100644
index 0000000..3756d29
Binary files /dev/null and b/source/addons/controller_icons/assets/xboxone/view.png differ
diff --git a/source/addons/controller_icons/assets/xboxone/view.png.import b/source/addons/controller_icons/assets/xboxone/view.png.import
new file mode 100644
index 0000000..a6d3dd3
--- /dev/null
+++ b/source/addons/controller_icons/assets/xboxone/view.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://tgpcpple5h2q"
+path="res://.godot/imported/view.png-ab4efd6aa8e0bf2549b9e03f65032d18.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xboxone/view.png"
+dest_files=["res://.godot/imported/view.png-ab4efd6aa8e0bf2549b9e03f65032d18.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/source/addons/controller_icons/assets/xboxone/x.png b/source/addons/controller_icons/assets/xboxone/x.png
new file mode 100644
index 0000000..a0f0ac1
Binary files /dev/null and b/source/addons/controller_icons/assets/xboxone/x.png differ
diff --git a/source/addons/controller_icons/assets/xboxone/x.png.import b/source/addons/controller_icons/assets/xboxone/x.png.import
new file mode 100644
index 0000000..b95a49d
--- /dev/null
+++ b/source/addons/controller_icons/assets/xboxone/x.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cna0glvxuuco"
+path="res://.godot/imported/x.png-3a51ef6e3dd538a024aafb793c6f0ecc.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xboxone/x.png"
+dest_files=["res://.godot/imported/x.png-3a51ef6e3dd538a024aafb793c6f0ecc.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/source/addons/controller_icons/assets/xboxone/y.png b/source/addons/controller_icons/assets/xboxone/y.png
new file mode 100644
index 0000000..4e31627
Binary files /dev/null and b/source/addons/controller_icons/assets/xboxone/y.png differ
diff --git a/source/addons/controller_icons/assets/xboxone/y.png.import b/source/addons/controller_icons/assets/xboxone/y.png.import
new file mode 100644
index 0000000..4249142
--- /dev/null
+++ b/source/addons/controller_icons/assets/xboxone/y.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c3lkr5o5sqj06"
+path="res://.godot/imported/y.png-d67d0b4f521ce9df38869ef9f4c11bdf.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xboxone/y.png"
+dest_files=["res://.godot/imported/y.png-d67d0b4f521ce9df38869ef9f4c11bdf.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/source/addons/controller_icons/assets/xboxseries/a.png b/source/addons/controller_icons/assets/xboxseries/a.png
new file mode 100644
index 0000000..e22bb29
Binary files /dev/null and b/source/addons/controller_icons/assets/xboxseries/a.png differ
diff --git a/source/addons/controller_icons/assets/xboxseries/a.png.import b/source/addons/controller_icons/assets/xboxseries/a.png.import
new file mode 100644
index 0000000..9d25930
--- /dev/null
+++ b/source/addons/controller_icons/assets/xboxseries/a.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cn8ot71as8p80"
+path="res://.godot/imported/a.png-bc565aef96969cf9c64e8d7ede25217e.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xboxseries/a.png"
+dest_files=["res://.godot/imported/a.png-bc565aef96969cf9c64e8d7ede25217e.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/source/addons/controller_icons/assets/xboxseries/b.png b/source/addons/controller_icons/assets/xboxseries/b.png
new file mode 100644
index 0000000..9312c26
Binary files /dev/null and b/source/addons/controller_icons/assets/xboxseries/b.png differ
diff --git a/source/addons/controller_icons/assets/xboxseries/b.png.import b/source/addons/controller_icons/assets/xboxseries/b.png.import
new file mode 100644
index 0000000..4d321e2
--- /dev/null
+++ b/source/addons/controller_icons/assets/xboxseries/b.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dibsukmxabd6a"
+path="res://.godot/imported/b.png-0a4b27ee9783e34ddc4cc390b98123f4.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xboxseries/b.png"
+dest_files=["res://.godot/imported/b.png-0a4b27ee9783e34ddc4cc390b98123f4.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/source/addons/controller_icons/assets/xboxseries/diagram.png b/source/addons/controller_icons/assets/xboxseries/diagram.png
new file mode 100644
index 0000000..ff29b45
Binary files /dev/null and b/source/addons/controller_icons/assets/xboxseries/diagram.png differ
diff --git a/source/addons/controller_icons/assets/xboxseries/diagram.png.import b/source/addons/controller_icons/assets/xboxseries/diagram.png.import
new file mode 100644
index 0000000..c60f478
--- /dev/null
+++ b/source/addons/controller_icons/assets/xboxseries/diagram.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://botd0wxjewxqw"
+path="res://.godot/imported/diagram.png-cda8327502f46405c0cc1aef02bdfafa.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xboxseries/diagram.png"
+dest_files=["res://.godot/imported/diagram.png-cda8327502f46405c0cc1aef02bdfafa.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/source/addons/controller_icons/assets/xboxseries/diagram_simple.png b/source/addons/controller_icons/assets/xboxseries/diagram_simple.png
new file mode 100644
index 0000000..bf23d73
Binary files /dev/null and b/source/addons/controller_icons/assets/xboxseries/diagram_simple.png differ
diff --git a/source/addons/controller_icons/assets/xboxseries/diagram_simple.png.import b/source/addons/controller_icons/assets/xboxseries/diagram_simple.png.import
new file mode 100644
index 0000000..27798e9
--- /dev/null
+++ b/source/addons/controller_icons/assets/xboxseries/diagram_simple.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://g85advbc1vrw"
+path="res://.godot/imported/diagram_simple.png-5942ec7e4d666fdc7c53542bb4328581.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xboxseries/diagram_simple.png"
+dest_files=["res://.godot/imported/diagram_simple.png-5942ec7e4d666fdc7c53542bb4328581.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/source/addons/controller_icons/assets/xboxseries/dpad.png b/source/addons/controller_icons/assets/xboxseries/dpad.png
new file mode 100644
index 0000000..d66bd81
Binary files /dev/null and b/source/addons/controller_icons/assets/xboxseries/dpad.png differ
diff --git a/source/addons/controller_icons/assets/xboxseries/dpad.png.import b/source/addons/controller_icons/assets/xboxseries/dpad.png.import
new file mode 100644
index 0000000..fa3599d
--- /dev/null
+++ b/source/addons/controller_icons/assets/xboxseries/dpad.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://6fgfguvcu861"
+path="res://.godot/imported/dpad.png-fe09e7551d7ac8f419ce4e7ea4555393.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xboxseries/dpad.png"
+dest_files=["res://.godot/imported/dpad.png-fe09e7551d7ac8f419ce4e7ea4555393.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/source/addons/controller_icons/assets/xboxseries/dpad_down.png b/source/addons/controller_icons/assets/xboxseries/dpad_down.png
new file mode 100644
index 0000000..93478ee
Binary files /dev/null and b/source/addons/controller_icons/assets/xboxseries/dpad_down.png differ
diff --git a/source/addons/controller_icons/assets/xboxseries/dpad_down.png.import b/source/addons/controller_icons/assets/xboxseries/dpad_down.png.import
new file mode 100644
index 0000000..cef1b96
--- /dev/null
+++ b/source/addons/controller_icons/assets/xboxseries/dpad_down.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bd2rj8doekapn"
+path="res://.godot/imported/dpad_down.png-73c90acd2c18f3d773119570fce2af56.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xboxseries/dpad_down.png"
+dest_files=["res://.godot/imported/dpad_down.png-73c90acd2c18f3d773119570fce2af56.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/source/addons/controller_icons/assets/xboxseries/dpad_left.png b/source/addons/controller_icons/assets/xboxseries/dpad_left.png
new file mode 100644
index 0000000..e1e3dfd
Binary files /dev/null and b/source/addons/controller_icons/assets/xboxseries/dpad_left.png differ
diff --git a/source/addons/controller_icons/assets/xboxseries/dpad_left.png.import b/source/addons/controller_icons/assets/xboxseries/dpad_left.png.import
new file mode 100644
index 0000000..2dc4195
--- /dev/null
+++ b/source/addons/controller_icons/assets/xboxseries/dpad_left.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://diw08d6ryyymo"
+path="res://.godot/imported/dpad_left.png-af11db941f9b47bf339826c87d74dcdf.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xboxseries/dpad_left.png"
+dest_files=["res://.godot/imported/dpad_left.png-af11db941f9b47bf339826c87d74dcdf.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/source/addons/controller_icons/assets/xboxseries/dpad_right.png b/source/addons/controller_icons/assets/xboxseries/dpad_right.png
new file mode 100644
index 0000000..2cabaef
Binary files /dev/null and b/source/addons/controller_icons/assets/xboxseries/dpad_right.png differ
diff --git a/source/addons/controller_icons/assets/xboxseries/dpad_right.png.import b/source/addons/controller_icons/assets/xboxseries/dpad_right.png.import
new file mode 100644
index 0000000..84133a3
--- /dev/null
+++ b/source/addons/controller_icons/assets/xboxseries/dpad_right.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://6jrs4rfwt2ex"
+path="res://.godot/imported/dpad_right.png-52c3a89482849bc7aaf7e05cf8266718.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xboxseries/dpad_right.png"
+dest_files=["res://.godot/imported/dpad_right.png-52c3a89482849bc7aaf7e05cf8266718.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/source/addons/controller_icons/assets/xboxseries/dpad_up.png b/source/addons/controller_icons/assets/xboxseries/dpad_up.png
new file mode 100644
index 0000000..a466bad
Binary files /dev/null and b/source/addons/controller_icons/assets/xboxseries/dpad_up.png differ
diff --git a/source/addons/controller_icons/assets/xboxseries/dpad_up.png.import b/source/addons/controller_icons/assets/xboxseries/dpad_up.png.import
new file mode 100644
index 0000000..f259a29
--- /dev/null
+++ b/source/addons/controller_icons/assets/xboxseries/dpad_up.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cjh6ihpgo3c53"
+path="res://.godot/imported/dpad_up.png-d7e305c753c393073bb2bd7d5238de99.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xboxseries/dpad_up.png"
+dest_files=["res://.godot/imported/dpad_up.png-d7e305c753c393073bb2bd7d5238de99.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/source/addons/controller_icons/assets/xboxseries/l_stick.png b/source/addons/controller_icons/assets/xboxseries/l_stick.png
new file mode 100644
index 0000000..de49dc6
Binary files /dev/null and b/source/addons/controller_icons/assets/xboxseries/l_stick.png differ
diff --git a/source/addons/controller_icons/assets/xboxseries/l_stick.png.import b/source/addons/controller_icons/assets/xboxseries/l_stick.png.import
new file mode 100644
index 0000000..5ca81fe
--- /dev/null
+++ b/source/addons/controller_icons/assets/xboxseries/l_stick.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bhat3ss1rwdjb"
+path="res://.godot/imported/l_stick.png-a6fed6ac47ed59f94e2af2105409fe51.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xboxseries/l_stick.png"
+dest_files=["res://.godot/imported/l_stick.png-a6fed6ac47ed59f94e2af2105409fe51.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/source/addons/controller_icons/assets/xboxseries/l_stick_click.png b/source/addons/controller_icons/assets/xboxseries/l_stick_click.png
new file mode 100644
index 0000000..ad0428f
Binary files /dev/null and b/source/addons/controller_icons/assets/xboxseries/l_stick_click.png differ
diff --git a/source/addons/controller_icons/assets/xboxseries/l_stick_click.png.import b/source/addons/controller_icons/assets/xboxseries/l_stick_click.png.import
new file mode 100644
index 0000000..277083e
--- /dev/null
+++ b/source/addons/controller_icons/assets/xboxseries/l_stick_click.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bok8g0m4puta8"
+path="res://.godot/imported/l_stick_click.png-30ca75232db7697e2b3808c77ba8b6e7.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xboxseries/l_stick_click.png"
+dest_files=["res://.godot/imported/l_stick_click.png-30ca75232db7697e2b3808c77ba8b6e7.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/source/addons/controller_icons/assets/xboxseries/lb.png b/source/addons/controller_icons/assets/xboxseries/lb.png
new file mode 100644
index 0000000..f6c414b
Binary files /dev/null and b/source/addons/controller_icons/assets/xboxseries/lb.png differ
diff --git a/source/addons/controller_icons/assets/xboxseries/lb.png.import b/source/addons/controller_icons/assets/xboxseries/lb.png.import
new file mode 100644
index 0000000..e129f35
--- /dev/null
+++ b/source/addons/controller_icons/assets/xboxseries/lb.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://daelou54xassi"
+path="res://.godot/imported/lb.png-b6bcbd6efbe8fa69292c8649a6623d1f.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xboxseries/lb.png"
+dest_files=["res://.godot/imported/lb.png-b6bcbd6efbe8fa69292c8649a6623d1f.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/source/addons/controller_icons/assets/xboxseries/lt.png b/source/addons/controller_icons/assets/xboxseries/lt.png
new file mode 100644
index 0000000..526816c
Binary files /dev/null and b/source/addons/controller_icons/assets/xboxseries/lt.png differ
diff --git a/source/addons/controller_icons/assets/xboxseries/lt.png.import b/source/addons/controller_icons/assets/xboxseries/lt.png.import
new file mode 100644
index 0000000..f168747
--- /dev/null
+++ b/source/addons/controller_icons/assets/xboxseries/lt.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bnbmkaqynud4u"
+path="res://.godot/imported/lt.png-3050b62cca663463c11e3bdc7f3a4aa7.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xboxseries/lt.png"
+dest_files=["res://.godot/imported/lt.png-3050b62cca663463c11e3bdc7f3a4aa7.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/source/addons/controller_icons/assets/xboxseries/menu.png b/source/addons/controller_icons/assets/xboxseries/menu.png
new file mode 100644
index 0000000..190780e
Binary files /dev/null and b/source/addons/controller_icons/assets/xboxseries/menu.png differ
diff --git a/source/addons/controller_icons/assets/xboxseries/menu.png.import b/source/addons/controller_icons/assets/xboxseries/menu.png.import
new file mode 100644
index 0000000..ea8e143
--- /dev/null
+++ b/source/addons/controller_icons/assets/xboxseries/menu.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://wa2ghqrikdkw"
+path="res://.godot/imported/menu.png-79f99c8816ac6c83883ba4cad7e5b68c.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xboxseries/menu.png"
+dest_files=["res://.godot/imported/menu.png-79f99c8816ac6c83883ba4cad7e5b68c.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/source/addons/controller_icons/assets/xboxseries/r_stick.png b/source/addons/controller_icons/assets/xboxseries/r_stick.png
new file mode 100644
index 0000000..866be1c
Binary files /dev/null and b/source/addons/controller_icons/assets/xboxseries/r_stick.png differ
diff --git a/source/addons/controller_icons/assets/xboxseries/r_stick.png.import b/source/addons/controller_icons/assets/xboxseries/r_stick.png.import
new file mode 100644
index 0000000..60df805
--- /dev/null
+++ b/source/addons/controller_icons/assets/xboxseries/r_stick.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://gr6lwufu681b"
+path="res://.godot/imported/r_stick.png-e61fa6910f07053c126f86598fcaaa20.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xboxseries/r_stick.png"
+dest_files=["res://.godot/imported/r_stick.png-e61fa6910f07053c126f86598fcaaa20.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/source/addons/controller_icons/assets/xboxseries/r_stick_click.png b/source/addons/controller_icons/assets/xboxseries/r_stick_click.png
new file mode 100644
index 0000000..de08508
Binary files /dev/null and b/source/addons/controller_icons/assets/xboxseries/r_stick_click.png differ
diff --git a/source/addons/controller_icons/assets/xboxseries/r_stick_click.png.import b/source/addons/controller_icons/assets/xboxseries/r_stick_click.png.import
new file mode 100644
index 0000000..4476fac
--- /dev/null
+++ b/source/addons/controller_icons/assets/xboxseries/r_stick_click.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://2nwocgbye434"
+path="res://.godot/imported/r_stick_click.png-702c338f12817cfb325db5536410be0e.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xboxseries/r_stick_click.png"
+dest_files=["res://.godot/imported/r_stick_click.png-702c338f12817cfb325db5536410be0e.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/source/addons/controller_icons/assets/xboxseries/rb.png b/source/addons/controller_icons/assets/xboxseries/rb.png
new file mode 100644
index 0000000..5dcfc6d
Binary files /dev/null and b/source/addons/controller_icons/assets/xboxseries/rb.png differ
diff --git a/source/addons/controller_icons/assets/xboxseries/rb.png.import b/source/addons/controller_icons/assets/xboxseries/rb.png.import
new file mode 100644
index 0000000..0cdd94e
--- /dev/null
+++ b/source/addons/controller_icons/assets/xboxseries/rb.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cr2abv6e5m5k1"
+path="res://.godot/imported/rb.png-a4855ae927f833312b505a249eb91a96.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xboxseries/rb.png"
+dest_files=["res://.godot/imported/rb.png-a4855ae927f833312b505a249eb91a96.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/source/addons/controller_icons/assets/xboxseries/rt.png b/source/addons/controller_icons/assets/xboxseries/rt.png
new file mode 100644
index 0000000..8004286
Binary files /dev/null and b/source/addons/controller_icons/assets/xboxseries/rt.png differ
diff --git a/source/addons/controller_icons/assets/xboxseries/rt.png.import b/source/addons/controller_icons/assets/xboxseries/rt.png.import
new file mode 100644
index 0000000..53fda48
--- /dev/null
+++ b/source/addons/controller_icons/assets/xboxseries/rt.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cpogtfphr1txi"
+path="res://.godot/imported/rt.png-25031a1e1e4e0504ac44029211345b06.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xboxseries/rt.png"
+dest_files=["res://.godot/imported/rt.png-25031a1e1e4e0504ac44029211345b06.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/source/addons/controller_icons/assets/xboxseries/share.png b/source/addons/controller_icons/assets/xboxseries/share.png
new file mode 100644
index 0000000..66d9f95
Binary files /dev/null and b/source/addons/controller_icons/assets/xboxseries/share.png differ
diff --git a/source/addons/controller_icons/assets/xboxseries/share.png.import b/source/addons/controller_icons/assets/xboxseries/share.png.import
new file mode 100644
index 0000000..7f2175a
--- /dev/null
+++ b/source/addons/controller_icons/assets/xboxseries/share.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dqnxpbbjc2ovh"
+path="res://.godot/imported/share.png-e1f729c99714825f909dba3cb0e0e669.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xboxseries/share.png"
+dest_files=["res://.godot/imported/share.png-e1f729c99714825f909dba3cb0e0e669.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/source/addons/controller_icons/assets/xboxseries/view.png b/source/addons/controller_icons/assets/xboxseries/view.png
new file mode 100644
index 0000000..066086a
Binary files /dev/null and b/source/addons/controller_icons/assets/xboxseries/view.png differ
diff --git a/source/addons/controller_icons/assets/xboxseries/view.png.import b/source/addons/controller_icons/assets/xboxseries/view.png.import
new file mode 100644
index 0000000..c289612
--- /dev/null
+++ b/source/addons/controller_icons/assets/xboxseries/view.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bklxch7dnwpf4"
+path="res://.godot/imported/view.png-fcdde74b941c2199eb232715d50c63e7.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xboxseries/view.png"
+dest_files=["res://.godot/imported/view.png-fcdde74b941c2199eb232715d50c63e7.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/source/addons/controller_icons/assets/xboxseries/x.png b/source/addons/controller_icons/assets/xboxseries/x.png
new file mode 100644
index 0000000..e944b3e
Binary files /dev/null and b/source/addons/controller_icons/assets/xboxseries/x.png differ
diff --git a/source/addons/controller_icons/assets/xboxseries/x.png.import b/source/addons/controller_icons/assets/xboxseries/x.png.import
new file mode 100644
index 0000000..822c681
--- /dev/null
+++ b/source/addons/controller_icons/assets/xboxseries/x.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c0pojbar77pcl"
+path="res://.godot/imported/x.png-2a06a0fa9f7b5bda854780cb000422eb.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xboxseries/x.png"
+dest_files=["res://.godot/imported/x.png-2a06a0fa9f7b5bda854780cb000422eb.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/source/addons/controller_icons/assets/xboxseries/y.png b/source/addons/controller_icons/assets/xboxseries/y.png
new file mode 100644
index 0000000..cf4a997
Binary files /dev/null and b/source/addons/controller_icons/assets/xboxseries/y.png differ
diff --git a/source/addons/controller_icons/assets/xboxseries/y.png.import b/source/addons/controller_icons/assets/xboxseries/y.png.import
new file mode 100644
index 0000000..09a0454
--- /dev/null
+++ b/source/addons/controller_icons/assets/xboxseries/y.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c06i3deebkd3k"
+path="res://.godot/imported/y.png-533355212ca9b20e674b9dbd240aa9ad.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/controller_icons/assets/xboxseries/y.png"
+dest_files=["res://.godot/imported/y.png-533355212ca9b20e674b9dbd240aa9ad.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/source/addons/controller_icons/demo/IconRemapper.gd b/source/addons/controller_icons/demo/IconRemapper.gd
new file mode 100644
index 0000000..c3e00cb
--- /dev/null
+++ b/source/addons/controller_icons/demo/IconRemapper.gd
@@ -0,0 +1,102 @@
+extends Control
+
+@onready var nodes := [
+ %A, %B, %X, %Y,
+ %LB, %RB, %LT, %RT,
+ %L_Stick_Click, %R_Stick_Click,
+ %Select, %Start, %DPAD,
+ %DPAD_Up, %DPAD_Down,
+ %DPAD_Left, %DPAD_Right,
+ %Home, %Share,
+ %LStick, %RStick,
+]
+
+var base_names := []
+
+# Called when the node enters the scene tree for the first time.
+func _ready() -> void:
+ for child: Node in nodes:
+ base_names.push_back(child.get_child(0).texture.path)
+
+
+func _on_Auto_pressed() -> void:
+ for i in range(nodes.size()):
+ nodes[i].get_child(0).texture.path = base_names[i]
+
+
+func _on_Luna_pressed() -> void:
+ for i in range(nodes.size()):
+ var control_text: String = ControllerIcons.Mapper._convert_joypad_to_luna(base_names[i])
+ nodes[i].get_child(0).texture.path = control_text
+
+
+func _on_PS3_pressed() -> void:
+ for i in range(nodes.size()):
+ var control_text: String = ControllerIcons.Mapper._convert_joypad_to_ps3(base_names[i])
+ nodes[i].get_child(0).texture.path = control_text
+
+
+func _on_PS4_pressed() -> void:
+ for i in range(nodes.size()):
+ var control_text: String = ControllerIcons.Mapper._convert_joypad_to_ps4(base_names[i])
+ nodes[i].get_child(0).texture.path = control_text
+
+
+func _on_PS5_pressed() -> void:
+ for i in range(nodes.size()):
+ var control_text: String = ControllerIcons.Mapper._convert_joypad_to_ps5(base_names[i])
+ nodes[i].get_child(0).texture.path = control_text
+
+
+func _on_Stadia_pressed() -> void:
+ for i in range(nodes.size()):
+ var control_text: String = ControllerIcons.Mapper._convert_joypad_to_stadia(base_names[i])
+ nodes[i].get_child(0).texture.path = control_text
+
+
+func _on_Steam_pressed() -> void:
+ for i in range(nodes.size()):
+ var control_text: String = ControllerIcons.Mapper._convert_joypad_to_steam(base_names[i])
+ nodes[i].get_child(0).texture.path = control_text
+
+
+func _on_Switch_pressed() -> void:
+ for i in range(nodes.size()):
+ var control_text: String = ControllerIcons.Mapper._convert_joypad_to_switch(base_names[i])
+ nodes[i].get_child(0).texture.path = control_text
+
+
+func _on_Joycon_pressed() -> void:
+ for i in range(nodes.size()):
+ var control_text: String = ControllerIcons.Mapper._convert_joypad_to_joycon(base_names[i])
+ nodes[i].get_child(0).texture.path = control_text
+
+
+func _on_Xbox360_pressed() -> void:
+ for i in range(nodes.size()):
+ var control_text: String = ControllerIcons.Mapper._convert_joypad_to_xbox360(base_names[i])
+ nodes[i].get_child(0).texture.path = control_text
+
+
+func _on_XboxOne_pressed() -> void:
+ for i in range(nodes.size()):
+ var control_text: String = ControllerIcons.Mapper._convert_joypad_to_xboxone(base_names[i])
+ nodes[i].get_child(0).texture.path = control_text
+
+
+func _on_XboxSeries_pressed() -> void:
+ for i in range(nodes.size()):
+ var control_text: String = ControllerIcons.Mapper._convert_joypad_to_xboxseries(base_names[i])
+ nodes[i].get_child(0).texture.path = control_text
+
+
+func _on_SteamDeck_pressed() -> void:
+ for i in range(nodes.size()):
+ var control_text: String = ControllerIcons.Mapper._convert_joypad_to_steamdeck(base_names[i])
+ nodes[i].get_child(0).texture.path = control_text
+
+
+func _on_ouya_pressed() -> void:
+ for i in range(nodes.size()):
+ var control_text: String = ControllerIcons.Mapper._convert_joypad_to_ouya(base_names[i])
+ nodes[i].get_child(0).texture.path = control_text
diff --git a/source/addons/controller_icons/demo/IconRemapper.gd.uid b/source/addons/controller_icons/demo/IconRemapper.gd.uid
new file mode 100644
index 0000000..436a931
--- /dev/null
+++ b/source/addons/controller_icons/demo/IconRemapper.gd.uid
@@ -0,0 +1 @@
+uid://dka86u1f7d6j3
diff --git a/source/addons/controller_icons/demo/IconRemapper.tscn b/source/addons/controller_icons/demo/IconRemapper.tscn
new file mode 100644
index 0000000..91fa96e
--- /dev/null
+++ b/source/addons/controller_icons/demo/IconRemapper.tscn
@@ -0,0 +1,587 @@
+[gd_scene load_steps=24 format=3 uid="uid://cmopiwmgjwjb8"]
+
+[ext_resource type="Script" uid="uid://dka86u1f7d6j3" path="res://addons/controller_icons/demo/IconRemapper.gd" id="2"]
+[ext_resource type="Script" uid="uid://c2w177bb5r70x" path="res://addons/controller_icons/objects/ControllerIconTexture.gd" id="2_ww1q8"]
+
+[sub_resource type="Texture2D" id="Texture2D_oaqcv"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_ww1q8")
+path = "joypad/a"
+show_mode = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_julos"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_ww1q8")
+path = "joypad/b"
+show_mode = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_p7fj8"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_ww1q8")
+path = "joypad/x"
+show_mode = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_e65pp"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_ww1q8")
+path = "joypad/y"
+show_mode = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_drwxf"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_ww1q8")
+path = "joypad/lb"
+show_mode = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_lpg8q"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_ww1q8")
+path = "joypad/rb"
+show_mode = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_tqj64"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_ww1q8")
+path = "joypad/lt"
+show_mode = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_g8v8u"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_ww1q8")
+path = "joypad/rt"
+show_mode = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_uqh53"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_ww1q8")
+path = "joypad/l_stick_click"
+show_mode = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_jt7n0"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_ww1q8")
+path = "joypad/r_stick_click"
+show_mode = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_jmm2v"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_ww1q8")
+path = "joypad/select"
+show_mode = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_2w7la"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_ww1q8")
+path = "joypad/start"
+show_mode = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_rhnqu"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_ww1q8")
+path = "joypad/dpad"
+show_mode = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_vr4j2"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_ww1q8")
+path = "joypad/dpad_up"
+show_mode = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_hp6k2"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_ww1q8")
+path = "joypad/dpad_down"
+show_mode = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_4trym"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_ww1q8")
+path = "joypad/dpad_left"
+show_mode = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_61h51"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_ww1q8")
+path = "joypad/dpad_right"
+show_mode = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_adhf2"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_ww1q8")
+path = "joypad/home"
+show_mode = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_dl7nm"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_ww1q8")
+path = "joypad/share"
+show_mode = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_3ry3e"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_ww1q8")
+path = "joypad/l_stick"
+show_mode = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_t68xw"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_ww1q8")
+path = "joypad/r_stick"
+show_mode = 0
+force_type = 0
+
+[node name="Control" type="MarginContainer"]
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+size_flags_horizontal = 3
+size_flags_vertical = 3
+theme_override_constants/margin_left = 50
+theme_override_constants/margin_top = 50
+theme_override_constants/margin_right = 50
+theme_override_constants/margin_bottom = 50
+script = ExtResource("2")
+
+[node name="HBoxContainer" type="HBoxContainer" parent="."]
+layout_mode = 2
+size_flags_vertical = 4
+
+[node name="Icons" type="HBoxContainer" parent="HBoxContainer"]
+layout_mode = 2
+size_flags_horizontal = 3
+
+[node name="VBoxContainer" type="VBoxContainer" parent="HBoxContainer/Icons"]
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 3
+
+[node name="A" type="HBoxContainer" parent="HBoxContainer/Icons/VBoxContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+
+[node name="ControllerTextureRect" type="TextureRect" parent="HBoxContainer/Icons/VBoxContainer/A"]
+custom_minimum_size = Vector2(40, 40)
+layout_mode = 2
+texture = SubResource("Texture2D_oaqcv")
+expand_mode = 1
+
+[node name="Label" type="Label" parent="HBoxContainer/Icons/VBoxContainer/A"]
+layout_mode = 2
+text = " A"
+
+[node name="B" type="HBoxContainer" parent="HBoxContainer/Icons/VBoxContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+
+[node name="ControllerTextureRect" type="TextureRect" parent="HBoxContainer/Icons/VBoxContainer/B"]
+custom_minimum_size = Vector2(40, 40)
+layout_mode = 2
+texture = SubResource("Texture2D_julos")
+expand_mode = 1
+
+[node name="Label" type="Label" parent="HBoxContainer/Icons/VBoxContainer/B"]
+layout_mode = 2
+text = " B"
+
+[node name="X" type="HBoxContainer" parent="HBoxContainer/Icons/VBoxContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+
+[node name="ControllerTextureRect" type="TextureRect" parent="HBoxContainer/Icons/VBoxContainer/X"]
+custom_minimum_size = Vector2(40, 40)
+layout_mode = 2
+texture = SubResource("Texture2D_p7fj8")
+expand_mode = 1
+
+[node name="Label" type="Label" parent="HBoxContainer/Icons/VBoxContainer/X"]
+layout_mode = 2
+text = " X"
+
+[node name="Y" type="HBoxContainer" parent="HBoxContainer/Icons/VBoxContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+
+[node name="ControllerTextureRect" type="TextureRect" parent="HBoxContainer/Icons/VBoxContainer/Y"]
+custom_minimum_size = Vector2(40, 40)
+layout_mode = 2
+texture = SubResource("Texture2D_e65pp")
+expand_mode = 1
+
+[node name="Label" type="Label" parent="HBoxContainer/Icons/VBoxContainer/Y"]
+layout_mode = 2
+text = " Y"
+
+[node name="LB" type="HBoxContainer" parent="HBoxContainer/Icons/VBoxContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+
+[node name="ControllerTextureRect" type="TextureRect" parent="HBoxContainer/Icons/VBoxContainer/LB"]
+custom_minimum_size = Vector2(40, 40)
+layout_mode = 2
+texture = SubResource("Texture2D_drwxf")
+expand_mode = 1
+
+[node name="Label" type="Label" parent="HBoxContainer/Icons/VBoxContainer/LB"]
+layout_mode = 2
+text = " Left Button"
+
+[node name="RB" type="HBoxContainer" parent="HBoxContainer/Icons/VBoxContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+
+[node name="ControllerTextureRect" type="TextureRect" parent="HBoxContainer/Icons/VBoxContainer/RB"]
+custom_minimum_size = Vector2(40, 40)
+layout_mode = 2
+texture = SubResource("Texture2D_lpg8q")
+expand_mode = 1
+
+[node name="Label" type="Label" parent="HBoxContainer/Icons/VBoxContainer/RB"]
+layout_mode = 2
+text = " Right Button"
+
+[node name="LT" type="HBoxContainer" parent="HBoxContainer/Icons/VBoxContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+
+[node name="ControllerTextureRect" type="TextureRect" parent="HBoxContainer/Icons/VBoxContainer/LT"]
+custom_minimum_size = Vector2(40, 40)
+layout_mode = 2
+texture = SubResource("Texture2D_tqj64")
+expand_mode = 1
+
+[node name="Label" type="Label" parent="HBoxContainer/Icons/VBoxContainer/LT"]
+layout_mode = 2
+text = " Left Trigger"
+
+[node name="RT" type="HBoxContainer" parent="HBoxContainer/Icons/VBoxContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+
+[node name="ControllerTextureRect" type="TextureRect" parent="HBoxContainer/Icons/VBoxContainer/RT"]
+custom_minimum_size = Vector2(40, 40)
+layout_mode = 2
+texture = SubResource("Texture2D_g8v8u")
+expand_mode = 1
+
+[node name="Label" type="Label" parent="HBoxContainer/Icons/VBoxContainer/RT"]
+layout_mode = 2
+text = " Right Trigger"
+
+[node name="L_Stick_Click" type="HBoxContainer" parent="HBoxContainer/Icons/VBoxContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+
+[node name="ControllerTextureRect" type="TextureRect" parent="HBoxContainer/Icons/VBoxContainer/L_Stick_Click"]
+custom_minimum_size = Vector2(40, 40)
+layout_mode = 2
+texture = SubResource("Texture2D_uqh53")
+expand_mode = 1
+
+[node name="Label" type="Label" parent="HBoxContainer/Icons/VBoxContainer/L_Stick_Click"]
+layout_mode = 2
+text = " Left Stick Click"
+
+[node name="R_Stick_Click" type="HBoxContainer" parent="HBoxContainer/Icons/VBoxContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+
+[node name="ControllerTextureRect" type="TextureRect" parent="HBoxContainer/Icons/VBoxContainer/R_Stick_Click"]
+custom_minimum_size = Vector2(40, 40)
+layout_mode = 2
+texture = SubResource("Texture2D_jt7n0")
+expand_mode = 1
+
+[node name="Label" type="Label" parent="HBoxContainer/Icons/VBoxContainer/R_Stick_Click"]
+layout_mode = 2
+text = " Right Stick Click"
+
+[node name="Select" type="HBoxContainer" parent="HBoxContainer/Icons/VBoxContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+
+[node name="ControllerTextureRect" type="TextureRect" parent="HBoxContainer/Icons/VBoxContainer/Select"]
+custom_minimum_size = Vector2(40, 40)
+layout_mode = 2
+texture = SubResource("Texture2D_jmm2v")
+expand_mode = 1
+
+[node name="Label" type="Label" parent="HBoxContainer/Icons/VBoxContainer/Select"]
+layout_mode = 2
+text = " Select"
+
+[node name="VBoxContainer2" type="VBoxContainer" parent="HBoxContainer/Icons"]
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 3
+
+[node name="Start" type="HBoxContainer" parent="HBoxContainer/Icons/VBoxContainer2"]
+unique_name_in_owner = true
+layout_mode = 2
+
+[node name="ControllerTextureRect" type="TextureRect" parent="HBoxContainer/Icons/VBoxContainer2/Start"]
+custom_minimum_size = Vector2(40, 40)
+layout_mode = 2
+texture = SubResource("Texture2D_2w7la")
+expand_mode = 1
+
+[node name="Label" type="Label" parent="HBoxContainer/Icons/VBoxContainer2/Start"]
+layout_mode = 2
+text = " Start"
+
+[node name="DPAD" type="HBoxContainer" parent="HBoxContainer/Icons/VBoxContainer2"]
+unique_name_in_owner = true
+layout_mode = 2
+
+[node name="ControllerTextureRect" type="TextureRect" parent="HBoxContainer/Icons/VBoxContainer2/DPAD"]
+custom_minimum_size = Vector2(40, 40)
+layout_mode = 2
+texture = SubResource("Texture2D_rhnqu")
+expand_mode = 1
+
+[node name="Label" type="Label" parent="HBoxContainer/Icons/VBoxContainer2/DPAD"]
+layout_mode = 2
+text = " DPAD"
+
+[node name="DPAD_Up" type="HBoxContainer" parent="HBoxContainer/Icons/VBoxContainer2"]
+unique_name_in_owner = true
+layout_mode = 2
+
+[node name="ControllerTextureRect" type="TextureRect" parent="HBoxContainer/Icons/VBoxContainer2/DPAD_Up"]
+custom_minimum_size = Vector2(40, 40)
+layout_mode = 2
+texture = SubResource("Texture2D_vr4j2")
+expand_mode = 1
+
+[node name="Label" type="Label" parent="HBoxContainer/Icons/VBoxContainer2/DPAD_Up"]
+layout_mode = 2
+text = " DPAD Up"
+
+[node name="DPAD_Down" type="HBoxContainer" parent="HBoxContainer/Icons/VBoxContainer2"]
+unique_name_in_owner = true
+layout_mode = 2
+
+[node name="ControllerTextureRect" type="TextureRect" parent="HBoxContainer/Icons/VBoxContainer2/DPAD_Down"]
+custom_minimum_size = Vector2(40, 40)
+layout_mode = 2
+texture = SubResource("Texture2D_hp6k2")
+expand_mode = 1
+
+[node name="Label" type="Label" parent="HBoxContainer/Icons/VBoxContainer2/DPAD_Down"]
+layout_mode = 2
+text = " DPAD Down"
+
+[node name="DPAD_Left" type="HBoxContainer" parent="HBoxContainer/Icons/VBoxContainer2"]
+unique_name_in_owner = true
+layout_mode = 2
+
+[node name="ControllerTextureRect" type="TextureRect" parent="HBoxContainer/Icons/VBoxContainer2/DPAD_Left"]
+custom_minimum_size = Vector2(40, 40)
+layout_mode = 2
+texture = SubResource("Texture2D_4trym")
+expand_mode = 1
+
+[node name="Label" type="Label" parent="HBoxContainer/Icons/VBoxContainer2/DPAD_Left"]
+layout_mode = 2
+text = " DPAD Left"
+
+[node name="DPAD_Right" type="HBoxContainer" parent="HBoxContainer/Icons/VBoxContainer2"]
+unique_name_in_owner = true
+layout_mode = 2
+
+[node name="ControllerTextureRect" type="TextureRect" parent="HBoxContainer/Icons/VBoxContainer2/DPAD_Right"]
+custom_minimum_size = Vector2(40, 40)
+layout_mode = 2
+texture = SubResource("Texture2D_61h51")
+expand_mode = 1
+
+[node name="Label" type="Label" parent="HBoxContainer/Icons/VBoxContainer2/DPAD_Right"]
+layout_mode = 2
+text = " DPAD Right"
+
+[node name="Home" type="HBoxContainer" parent="HBoxContainer/Icons/VBoxContainer2"]
+unique_name_in_owner = true
+layout_mode = 2
+
+[node name="ControllerTextureRect" type="TextureRect" parent="HBoxContainer/Icons/VBoxContainer2/Home"]
+custom_minimum_size = Vector2(40, 40)
+layout_mode = 2
+texture = SubResource("Texture2D_adhf2")
+expand_mode = 1
+
+[node name="Label" type="Label" parent="HBoxContainer/Icons/VBoxContainer2/Home"]
+layout_mode = 2
+text = " Home"
+
+[node name="Share" type="HBoxContainer" parent="HBoxContainer/Icons/VBoxContainer2"]
+unique_name_in_owner = true
+layout_mode = 2
+
+[node name="ControllerTextureRect" type="TextureRect" parent="HBoxContainer/Icons/VBoxContainer2/Share"]
+custom_minimum_size = Vector2(40, 40)
+layout_mode = 2
+texture = SubResource("Texture2D_dl7nm")
+expand_mode = 1
+
+[node name="Label" type="Label" parent="HBoxContainer/Icons/VBoxContainer2/Share"]
+layout_mode = 2
+text = " Share"
+
+[node name="LStick" type="HBoxContainer" parent="HBoxContainer/Icons/VBoxContainer2"]
+unique_name_in_owner = true
+layout_mode = 2
+
+[node name="ControllerTextureRect" type="TextureRect" parent="HBoxContainer/Icons/VBoxContainer2/LStick"]
+custom_minimum_size = Vector2(40, 40)
+layout_mode = 2
+texture = SubResource("Texture2D_3ry3e")
+expand_mode = 1
+
+[node name="Label" type="Label" parent="HBoxContainer/Icons/VBoxContainer2/LStick"]
+layout_mode = 2
+text = " Left Stick"
+
+[node name="RStick" type="HBoxContainer" parent="HBoxContainer/Icons/VBoxContainer2"]
+unique_name_in_owner = true
+layout_mode = 2
+
+[node name="ControllerTextureRect" type="TextureRect" parent="HBoxContainer/Icons/VBoxContainer2/RStick"]
+custom_minimum_size = Vector2(40, 40)
+layout_mode = 2
+texture = SubResource("Texture2D_t68xw")
+expand_mode = 1
+
+[node name="Label" type="Label" parent="HBoxContainer/Icons/VBoxContainer2/RStick"]
+layout_mode = 2
+text = " Right Stick"
+
+[node name="Buttons" type="VBoxContainer" parent="HBoxContainer"]
+layout_mode = 2
+size_flags_horizontal = 3
+
+[node name="Auto" type="Button" parent="HBoxContainer/Buttons"]
+layout_mode = 2
+size_flags_vertical = 3
+text = "[ Set to automatic ]"
+
+[node name="Luna" type="Button" parent="HBoxContainer/Buttons"]
+layout_mode = 2
+size_flags_vertical = 3
+text = "Amazon Luna"
+
+[node name="PS3" type="Button" parent="HBoxContainer/Buttons"]
+layout_mode = 2
+size_flags_vertical = 3
+text = "PlayStation 3"
+
+[node name="PS4" type="Button" parent="HBoxContainer/Buttons"]
+layout_mode = 2
+size_flags_vertical = 3
+text = "PlayStation 4"
+
+[node name="PS5" type="Button" parent="HBoxContainer/Buttons"]
+layout_mode = 2
+size_flags_vertical = 3
+text = "PlayStation 5"
+
+[node name="Stadia" type="Button" parent="HBoxContainer/Buttons"]
+layout_mode = 2
+size_flags_vertical = 3
+text = "Google Stadia"
+
+[node name="Steam" type="Button" parent="HBoxContainer/Buttons"]
+layout_mode = 2
+size_flags_vertical = 3
+text = "Steam Controller"
+
+[node name="SteamDeck" type="Button" parent="HBoxContainer/Buttons"]
+layout_mode = 2
+size_flags_vertical = 3
+text = "Steam Deck"
+
+[node name="Switch" type="Button" parent="HBoxContainer/Buttons"]
+layout_mode = 2
+size_flags_vertical = 3
+text = "Nintendo Switch Controller"
+
+[node name="Joycon" type="Button" parent="HBoxContainer/Buttons"]
+layout_mode = 2
+size_flags_vertical = 3
+text = "Nintendo Switch JoyCon"
+
+[node name="OUYA" type="Button" parent="HBoxContainer/Buttons"]
+layout_mode = 2
+size_flags_vertical = 3
+text = "OUYA"
+
+[node name="Xbox360" type="Button" parent="HBoxContainer/Buttons"]
+layout_mode = 2
+size_flags_vertical = 3
+text = "Xbox 360"
+
+[node name="XboxOne" type="Button" parent="HBoxContainer/Buttons"]
+layout_mode = 2
+size_flags_vertical = 3
+text = "Xbox One"
+
+[node name="XboxSeries" type="Button" parent="HBoxContainer/Buttons"]
+layout_mode = 2
+size_flags_vertical = 3
+text = "Xbox Series"
+
+[connection signal="pressed" from="HBoxContainer/Buttons/Auto" to="." method="_on_Auto_pressed"]
+[connection signal="pressed" from="HBoxContainer/Buttons/Luna" to="." method="_on_Luna_pressed"]
+[connection signal="pressed" from="HBoxContainer/Buttons/PS3" to="." method="_on_PS3_pressed"]
+[connection signal="pressed" from="HBoxContainer/Buttons/PS4" to="." method="_on_PS4_pressed"]
+[connection signal="pressed" from="HBoxContainer/Buttons/PS5" to="." method="_on_PS5_pressed"]
+[connection signal="pressed" from="HBoxContainer/Buttons/Stadia" to="." method="_on_Stadia_pressed"]
+[connection signal="pressed" from="HBoxContainer/Buttons/Steam" to="." method="_on_Steam_pressed"]
+[connection signal="pressed" from="HBoxContainer/Buttons/SteamDeck" to="." method="_on_SteamDeck_pressed"]
+[connection signal="pressed" from="HBoxContainer/Buttons/Switch" to="." method="_on_Switch_pressed"]
+[connection signal="pressed" from="HBoxContainer/Buttons/Joycon" to="." method="_on_Joycon_pressed"]
+[connection signal="pressed" from="HBoxContainer/Buttons/OUYA" to="." method="_on_ouya_pressed"]
+[connection signal="pressed" from="HBoxContainer/Buttons/Xbox360" to="." method="_on_Xbox360_pressed"]
+[connection signal="pressed" from="HBoxContainer/Buttons/XboxOne" to="." method="_on_XboxOne_pressed"]
+[connection signal="pressed" from="HBoxContainer/Buttons/XboxSeries" to="." method="_on_XboxSeries_pressed"]
diff --git a/source/addons/controller_icons/demo/IconRemapper.tscn84384211.tmp b/source/addons/controller_icons/demo/IconRemapper.tscn84384211.tmp
new file mode 100644
index 0000000..0f16f10
--- /dev/null
+++ b/source/addons/controller_icons/demo/IconRemapper.tscn84384211.tmp
@@ -0,0 +1,587 @@
+[gd_scene load_steps=24 format=3 uid="uid://cmopiwmgjwjb8"]
+
+[ext_resource type="Script" uid="uid://dka86u1f7d6j3" path="res://demo/IconRemapper.gd" id="2"]
+[ext_resource type="Script" uid="uid://c2w177bb5r70x" path="res://addons/controller_icons/objects/ControllerIconTexture.gd" id="2_ww1q8"]
+
+[sub_resource type="Texture2D" id="Texture2D_oaqcv"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_ww1q8")
+path = "joypad/a"
+show_mode = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_julos"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_ww1q8")
+path = "joypad/b"
+show_mode = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_p7fj8"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_ww1q8")
+path = "joypad/x"
+show_mode = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_e65pp"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_ww1q8")
+path = "joypad/y"
+show_mode = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_drwxf"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_ww1q8")
+path = "joypad/lb"
+show_mode = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_lpg8q"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_ww1q8")
+path = "joypad/rb"
+show_mode = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_tqj64"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_ww1q8")
+path = "joypad/lt"
+show_mode = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_g8v8u"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_ww1q8")
+path = "joypad/rt"
+show_mode = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_uqh53"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_ww1q8")
+path = "joypad/l_stick_click"
+show_mode = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_jt7n0"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_ww1q8")
+path = "joypad/r_stick_click"
+show_mode = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_jmm2v"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_ww1q8")
+path = "joypad/select"
+show_mode = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_2w7la"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_ww1q8")
+path = "joypad/start"
+show_mode = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_rhnqu"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_ww1q8")
+path = "joypad/dpad"
+show_mode = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_vr4j2"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_ww1q8")
+path = "joypad/dpad_up"
+show_mode = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_hp6k2"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_ww1q8")
+path = "joypad/dpad_down"
+show_mode = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_4trym"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_ww1q8")
+path = "joypad/dpad_left"
+show_mode = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_61h51"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_ww1q8")
+path = "joypad/dpad_right"
+show_mode = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_adhf2"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_ww1q8")
+path = "joypad/home"
+show_mode = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_dl7nm"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_ww1q8")
+path = "joypad/share"
+show_mode = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_3ry3e"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_ww1q8")
+path = "joypad/l_stick"
+show_mode = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_t68xw"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_ww1q8")
+path = "joypad/r_stick"
+show_mode = 0
+force_type = 0
+
+[node name="Control" type="MarginContainer"]
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+size_flags_horizontal = 3
+size_flags_vertical = 3
+theme_override_constants/margin_left = 50
+theme_override_constants/margin_top = 50
+theme_override_constants/margin_right = 50
+theme_override_constants/margin_bottom = 50
+script = ExtResource("2")
+
+[node name="HBoxContainer" type="HBoxContainer" parent="."]
+layout_mode = 2
+size_flags_vertical = 4
+
+[node name="Icons" type="HBoxContainer" parent="HBoxContainer"]
+layout_mode = 2
+size_flags_horizontal = 3
+
+[node name="VBoxContainer" type="VBoxContainer" parent="HBoxContainer/Icons"]
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 3
+
+[node name="A" type="HBoxContainer" parent="HBoxContainer/Icons/VBoxContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+
+[node name="ControllerTextureRect" type="TextureRect" parent="HBoxContainer/Icons/VBoxContainer/A"]
+custom_minimum_size = Vector2(40, 40)
+layout_mode = 2
+texture = SubResource("Texture2D_oaqcv")
+expand_mode = 1
+
+[node name="Label" type="Label" parent="HBoxContainer/Icons/VBoxContainer/A"]
+layout_mode = 2
+text = " A"
+
+[node name="B" type="HBoxContainer" parent="HBoxContainer/Icons/VBoxContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+
+[node name="ControllerTextureRect" type="TextureRect" parent="HBoxContainer/Icons/VBoxContainer/B"]
+custom_minimum_size = Vector2(40, 40)
+layout_mode = 2
+texture = SubResource("Texture2D_julos")
+expand_mode = 1
+
+[node name="Label" type="Label" parent="HBoxContainer/Icons/VBoxContainer/B"]
+layout_mode = 2
+text = " B"
+
+[node name="X" type="HBoxContainer" parent="HBoxContainer/Icons/VBoxContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+
+[node name="ControllerTextureRect" type="TextureRect" parent="HBoxContainer/Icons/VBoxContainer/X"]
+custom_minimum_size = Vector2(40, 40)
+layout_mode = 2
+texture = SubResource("Texture2D_p7fj8")
+expand_mode = 1
+
+[node name="Label" type="Label" parent="HBoxContainer/Icons/VBoxContainer/X"]
+layout_mode = 2
+text = " X"
+
+[node name="Y" type="HBoxContainer" parent="HBoxContainer/Icons/VBoxContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+
+[node name="ControllerTextureRect" type="TextureRect" parent="HBoxContainer/Icons/VBoxContainer/Y"]
+custom_minimum_size = Vector2(40, 40)
+layout_mode = 2
+texture = SubResource("Texture2D_e65pp")
+expand_mode = 1
+
+[node name="Label" type="Label" parent="HBoxContainer/Icons/VBoxContainer/Y"]
+layout_mode = 2
+text = " Y"
+
+[node name="LB" type="HBoxContainer" parent="HBoxContainer/Icons/VBoxContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+
+[node name="ControllerTextureRect" type="TextureRect" parent="HBoxContainer/Icons/VBoxContainer/LB"]
+custom_minimum_size = Vector2(40, 40)
+layout_mode = 2
+texture = SubResource("Texture2D_drwxf")
+expand_mode = 1
+
+[node name="Label" type="Label" parent="HBoxContainer/Icons/VBoxContainer/LB"]
+layout_mode = 2
+text = " Left Button"
+
+[node name="RB" type="HBoxContainer" parent="HBoxContainer/Icons/VBoxContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+
+[node name="ControllerTextureRect" type="TextureRect" parent="HBoxContainer/Icons/VBoxContainer/RB"]
+custom_minimum_size = Vector2(40, 40)
+layout_mode = 2
+texture = SubResource("Texture2D_lpg8q")
+expand_mode = 1
+
+[node name="Label" type="Label" parent="HBoxContainer/Icons/VBoxContainer/RB"]
+layout_mode = 2
+text = " Right Button"
+
+[node name="LT" type="HBoxContainer" parent="HBoxContainer/Icons/VBoxContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+
+[node name="ControllerTextureRect" type="TextureRect" parent="HBoxContainer/Icons/VBoxContainer/LT"]
+custom_minimum_size = Vector2(40, 40)
+layout_mode = 2
+texture = SubResource("Texture2D_tqj64")
+expand_mode = 1
+
+[node name="Label" type="Label" parent="HBoxContainer/Icons/VBoxContainer/LT"]
+layout_mode = 2
+text = " Left Trigger"
+
+[node name="RT" type="HBoxContainer" parent="HBoxContainer/Icons/VBoxContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+
+[node name="ControllerTextureRect" type="TextureRect" parent="HBoxContainer/Icons/VBoxContainer/RT"]
+custom_minimum_size = Vector2(40, 40)
+layout_mode = 2
+texture = SubResource("Texture2D_g8v8u")
+expand_mode = 1
+
+[node name="Label" type="Label" parent="HBoxContainer/Icons/VBoxContainer/RT"]
+layout_mode = 2
+text = " Right Trigger"
+
+[node name="L_Stick_Click" type="HBoxContainer" parent="HBoxContainer/Icons/VBoxContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+
+[node name="ControllerTextureRect" type="TextureRect" parent="HBoxContainer/Icons/VBoxContainer/L_Stick_Click"]
+custom_minimum_size = Vector2(40, 40)
+layout_mode = 2
+texture = SubResource("Texture2D_uqh53")
+expand_mode = 1
+
+[node name="Label" type="Label" parent="HBoxContainer/Icons/VBoxContainer/L_Stick_Click"]
+layout_mode = 2
+text = " Left Stick Click"
+
+[node name="R_Stick_Click" type="HBoxContainer" parent="HBoxContainer/Icons/VBoxContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+
+[node name="ControllerTextureRect" type="TextureRect" parent="HBoxContainer/Icons/VBoxContainer/R_Stick_Click"]
+custom_minimum_size = Vector2(40, 40)
+layout_mode = 2
+texture = SubResource("Texture2D_jt7n0")
+expand_mode = 1
+
+[node name="Label" type="Label" parent="HBoxContainer/Icons/VBoxContainer/R_Stick_Click"]
+layout_mode = 2
+text = " Right Stick Click"
+
+[node name="Select" type="HBoxContainer" parent="HBoxContainer/Icons/VBoxContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+
+[node name="ControllerTextureRect" type="TextureRect" parent="HBoxContainer/Icons/VBoxContainer/Select"]
+custom_minimum_size = Vector2(40, 40)
+layout_mode = 2
+texture = SubResource("Texture2D_jmm2v")
+expand_mode = 1
+
+[node name="Label" type="Label" parent="HBoxContainer/Icons/VBoxContainer/Select"]
+layout_mode = 2
+text = " Select"
+
+[node name="VBoxContainer2" type="VBoxContainer" parent="HBoxContainer/Icons"]
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 3
+
+[node name="Start" type="HBoxContainer" parent="HBoxContainer/Icons/VBoxContainer2"]
+unique_name_in_owner = true
+layout_mode = 2
+
+[node name="ControllerTextureRect" type="TextureRect" parent="HBoxContainer/Icons/VBoxContainer2/Start"]
+custom_minimum_size = Vector2(40, 40)
+layout_mode = 2
+texture = SubResource("Texture2D_2w7la")
+expand_mode = 1
+
+[node name="Label" type="Label" parent="HBoxContainer/Icons/VBoxContainer2/Start"]
+layout_mode = 2
+text = " Start"
+
+[node name="DPAD" type="HBoxContainer" parent="HBoxContainer/Icons/VBoxContainer2"]
+unique_name_in_owner = true
+layout_mode = 2
+
+[node name="ControllerTextureRect" type="TextureRect" parent="HBoxContainer/Icons/VBoxContainer2/DPAD"]
+custom_minimum_size = Vector2(40, 40)
+layout_mode = 2
+texture = SubResource("Texture2D_rhnqu")
+expand_mode = 1
+
+[node name="Label" type="Label" parent="HBoxContainer/Icons/VBoxContainer2/DPAD"]
+layout_mode = 2
+text = " DPAD"
+
+[node name="DPAD_Up" type="HBoxContainer" parent="HBoxContainer/Icons/VBoxContainer2"]
+unique_name_in_owner = true
+layout_mode = 2
+
+[node name="ControllerTextureRect" type="TextureRect" parent="HBoxContainer/Icons/VBoxContainer2/DPAD_Up"]
+custom_minimum_size = Vector2(40, 40)
+layout_mode = 2
+texture = SubResource("Texture2D_vr4j2")
+expand_mode = 1
+
+[node name="Label" type="Label" parent="HBoxContainer/Icons/VBoxContainer2/DPAD_Up"]
+layout_mode = 2
+text = " DPAD Up"
+
+[node name="DPAD_Down" type="HBoxContainer" parent="HBoxContainer/Icons/VBoxContainer2"]
+unique_name_in_owner = true
+layout_mode = 2
+
+[node name="ControllerTextureRect" type="TextureRect" parent="HBoxContainer/Icons/VBoxContainer2/DPAD_Down"]
+custom_minimum_size = Vector2(40, 40)
+layout_mode = 2
+texture = SubResource("Texture2D_hp6k2")
+expand_mode = 1
+
+[node name="Label" type="Label" parent="HBoxContainer/Icons/VBoxContainer2/DPAD_Down"]
+layout_mode = 2
+text = " DPAD Down"
+
+[node name="DPAD_Left" type="HBoxContainer" parent="HBoxContainer/Icons/VBoxContainer2"]
+unique_name_in_owner = true
+layout_mode = 2
+
+[node name="ControllerTextureRect" type="TextureRect" parent="HBoxContainer/Icons/VBoxContainer2/DPAD_Left"]
+custom_minimum_size = Vector2(40, 40)
+layout_mode = 2
+texture = SubResource("Texture2D_4trym")
+expand_mode = 1
+
+[node name="Label" type="Label" parent="HBoxContainer/Icons/VBoxContainer2/DPAD_Left"]
+layout_mode = 2
+text = " DPAD Left"
+
+[node name="DPAD_Right" type="HBoxContainer" parent="HBoxContainer/Icons/VBoxContainer2"]
+unique_name_in_owner = true
+layout_mode = 2
+
+[node name="ControllerTextureRect" type="TextureRect" parent="HBoxContainer/Icons/VBoxContainer2/DPAD_Right"]
+custom_minimum_size = Vector2(40, 40)
+layout_mode = 2
+texture = SubResource("Texture2D_61h51")
+expand_mode = 1
+
+[node name="Label" type="Label" parent="HBoxContainer/Icons/VBoxContainer2/DPAD_Right"]
+layout_mode = 2
+text = " DPAD Right"
+
+[node name="Home" type="HBoxContainer" parent="HBoxContainer/Icons/VBoxContainer2"]
+unique_name_in_owner = true
+layout_mode = 2
+
+[node name="ControllerTextureRect" type="TextureRect" parent="HBoxContainer/Icons/VBoxContainer2/Home"]
+custom_minimum_size = Vector2(40, 40)
+layout_mode = 2
+texture = SubResource("Texture2D_adhf2")
+expand_mode = 1
+
+[node name="Label" type="Label" parent="HBoxContainer/Icons/VBoxContainer2/Home"]
+layout_mode = 2
+text = " Home"
+
+[node name="Share" type="HBoxContainer" parent="HBoxContainer/Icons/VBoxContainer2"]
+unique_name_in_owner = true
+layout_mode = 2
+
+[node name="ControllerTextureRect" type="TextureRect" parent="HBoxContainer/Icons/VBoxContainer2/Share"]
+custom_minimum_size = Vector2(40, 40)
+layout_mode = 2
+texture = SubResource("Texture2D_dl7nm")
+expand_mode = 1
+
+[node name="Label" type="Label" parent="HBoxContainer/Icons/VBoxContainer2/Share"]
+layout_mode = 2
+text = " Share"
+
+[node name="LStick" type="HBoxContainer" parent="HBoxContainer/Icons/VBoxContainer2"]
+unique_name_in_owner = true
+layout_mode = 2
+
+[node name="ControllerTextureRect" type="TextureRect" parent="HBoxContainer/Icons/VBoxContainer2/LStick"]
+custom_minimum_size = Vector2(40, 40)
+layout_mode = 2
+texture = SubResource("Texture2D_3ry3e")
+expand_mode = 1
+
+[node name="Label" type="Label" parent="HBoxContainer/Icons/VBoxContainer2/LStick"]
+layout_mode = 2
+text = " Left Stick"
+
+[node name="RStick" type="HBoxContainer" parent="HBoxContainer/Icons/VBoxContainer2"]
+unique_name_in_owner = true
+layout_mode = 2
+
+[node name="ControllerTextureRect" type="TextureRect" parent="HBoxContainer/Icons/VBoxContainer2/RStick"]
+custom_minimum_size = Vector2(40, 40)
+layout_mode = 2
+texture = SubResource("Texture2D_t68xw")
+expand_mode = 1
+
+[node name="Label" type="Label" parent="HBoxContainer/Icons/VBoxContainer2/RStick"]
+layout_mode = 2
+text = " Right Stick"
+
+[node name="Buttons" type="VBoxContainer" parent="HBoxContainer"]
+layout_mode = 2
+size_flags_horizontal = 3
+
+[node name="Auto" type="Button" parent="HBoxContainer/Buttons"]
+layout_mode = 2
+size_flags_vertical = 3
+text = "[ Set to automatic ]"
+
+[node name="Luna" type="Button" parent="HBoxContainer/Buttons"]
+layout_mode = 2
+size_flags_vertical = 3
+text = "Amazon Luna"
+
+[node name="PS3" type="Button" parent="HBoxContainer/Buttons"]
+layout_mode = 2
+size_flags_vertical = 3
+text = "PlayStation 3"
+
+[node name="PS4" type="Button" parent="HBoxContainer/Buttons"]
+layout_mode = 2
+size_flags_vertical = 3
+text = "PlayStation 4"
+
+[node name="PS5" type="Button" parent="HBoxContainer/Buttons"]
+layout_mode = 2
+size_flags_vertical = 3
+text = "PlayStation 5"
+
+[node name="Stadia" type="Button" parent="HBoxContainer/Buttons"]
+layout_mode = 2
+size_flags_vertical = 3
+text = "Google Stadia"
+
+[node name="Steam" type="Button" parent="HBoxContainer/Buttons"]
+layout_mode = 2
+size_flags_vertical = 3
+text = "Steam Controller"
+
+[node name="SteamDeck" type="Button" parent="HBoxContainer/Buttons"]
+layout_mode = 2
+size_flags_vertical = 3
+text = "Steam Deck"
+
+[node name="Switch" type="Button" parent="HBoxContainer/Buttons"]
+layout_mode = 2
+size_flags_vertical = 3
+text = "Nintendo Switch Controller"
+
+[node name="Joycon" type="Button" parent="HBoxContainer/Buttons"]
+layout_mode = 2
+size_flags_vertical = 3
+text = "Nintendo Switch JoyCon"
+
+[node name="OUYA" type="Button" parent="HBoxContainer/Buttons"]
+layout_mode = 2
+size_flags_vertical = 3
+text = "OUYA"
+
+[node name="Xbox360" type="Button" parent="HBoxContainer/Buttons"]
+layout_mode = 2
+size_flags_vertical = 3
+text = "Xbox 360"
+
+[node name="XboxOne" type="Button" parent="HBoxContainer/Buttons"]
+layout_mode = 2
+size_flags_vertical = 3
+text = "Xbox One"
+
+[node name="XboxSeries" type="Button" parent="HBoxContainer/Buttons"]
+layout_mode = 2
+size_flags_vertical = 3
+text = "Xbox Series"
+
+[connection signal="pressed" from="HBoxContainer/Buttons/Auto" to="." method="_on_Auto_pressed"]
+[connection signal="pressed" from="HBoxContainer/Buttons/Luna" to="." method="_on_Luna_pressed"]
+[connection signal="pressed" from="HBoxContainer/Buttons/PS3" to="." method="_on_PS3_pressed"]
+[connection signal="pressed" from="HBoxContainer/Buttons/PS4" to="." method="_on_PS4_pressed"]
+[connection signal="pressed" from="HBoxContainer/Buttons/PS5" to="." method="_on_PS5_pressed"]
+[connection signal="pressed" from="HBoxContainer/Buttons/Stadia" to="." method="_on_Stadia_pressed"]
+[connection signal="pressed" from="HBoxContainer/Buttons/Steam" to="." method="_on_Steam_pressed"]
+[connection signal="pressed" from="HBoxContainer/Buttons/SteamDeck" to="." method="_on_SteamDeck_pressed"]
+[connection signal="pressed" from="HBoxContainer/Buttons/Switch" to="." method="_on_Switch_pressed"]
+[connection signal="pressed" from="HBoxContainer/Buttons/Joycon" to="." method="_on_Joycon_pressed"]
+[connection signal="pressed" from="HBoxContainer/Buttons/OUYA" to="." method="_on_ouya_pressed"]
+[connection signal="pressed" from="HBoxContainer/Buttons/Xbox360" to="." method="_on_Xbox360_pressed"]
+[connection signal="pressed" from="HBoxContainer/Buttons/XboxOne" to="." method="_on_XboxOne_pressed"]
+[connection signal="pressed" from="HBoxContainer/Buttons/XboxSeries" to="." method="_on_XboxSeries_pressed"]
diff --git a/source/addons/controller_icons/demo/Showcase.tscn b/source/addons/controller_icons/demo/Showcase.tscn
new file mode 100644
index 0000000..3d37fc7
--- /dev/null
+++ b/source/addons/controller_icons/demo/Showcase.tscn
@@ -0,0 +1,224 @@
+[gd_scene load_steps=10 format=3 uid="uid://8ypaj35qfhyr"]
+
+[ext_resource type="Script" path="res://addons/controller_icons/objects/ControllerIconTexture.gd" id="1_vfnng"]
+
+[sub_resource type="Texture2D" id="Texture2D_s5m8q"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("1_vfnng")
+path = "ui_accept"
+show_mode = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_m553g"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("1_vfnng")
+path = "joypad/x"
+show_mode = 0
+force_type = 0
+
+[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_htjm2"]
+
+[sub_resource type="Sky" id="Sky_tf27q"]
+sky_material = SubResource("ProceduralSkyMaterial_htjm2")
+
+[sub_resource type="Environment" id="Environment_klhn5"]
+background_mode = 2
+sky = SubResource("Sky_tf27q")
+
+[sub_resource type="Texture2D" id="Texture2D_utrwd"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("1_vfnng")
+path = "joypad/a"
+show_mode = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_8wr4o"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("1_vfnng")
+path = "joypad/x"
+show_mode = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_82sge"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("1_vfnng")
+path = "switch/controllers_separate"
+show_mode = 0
+force_type = 0
+
+[node name="Showcase" type="Node"]
+
+[node name="RichTextLabel" type="RichTextLabel" parent="."]
+offset_left = 150.0
+offset_top = 25.0
+offset_right = 1002.0
+offset_bottom = 111.0
+bbcode_enabled = true
+text = "Controller Icons provides automatic icons for all major controllers, keyboard, and mouse.
+
+It provides a [b]ControllerIconTexture[/b] resource that can be set on any node that accepts a [b]Texture2D[/b], such as:"
+
+[node name="Label" type="Label" parent="."]
+offset_left = 117.0
+offset_top = 151.0
+offset_right = 292.0
+offset_bottom = 174.0
+text = "TextureRect / Sprite2D"
+horizontal_alignment = 1
+
+[node name="TextureRect" type="TextureRect" parent="."]
+offset_left = 164.0
+offset_top = 187.0
+offset_right = 235.0
+offset_bottom = 258.0
+texture = SubResource("Texture2D_s5m8q")
+expand_mode = 1
+
+[node name="Label2" type="Label" parent="."]
+offset_left = 357.0
+offset_top = 152.0
+offset_right = 451.0
+offset_bottom = 175.0
+text = "Button"
+horizontal_alignment = 1
+
+[node name="Button" type="Button" parent="."]
+offset_left = 340.0
+offset_top = 191.0
+offset_right = 468.0
+offset_bottom = 239.0
+text = "Attack"
+icon = SubResource("Texture2D_m553g")
+expand_icon = true
+
+[node name="Label3" type="Label" parent="."]
+offset_left = 571.0
+offset_top = 151.0
+offset_right = 665.0
+offset_bottom = 174.0
+text = "Sprite3D"
+horizontal_alignment = 1
+
+[node name="SubViewportContainer" type="SubViewportContainer" parent="."]
+offset_left = 546.0
+offset_top = 187.0
+offset_right = 689.0
+offset_bottom = 332.0
+stretch = true
+
+[node name="SubViewport" type="SubViewport" parent="SubViewportContainer"]
+handle_input_locally = false
+size = Vector2i(143, 145)
+render_target_update_mode = 4
+
+[node name="Camera3D" type="Camera3D" parent="SubViewportContainer/SubViewport"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.125, 0.745)
+environment = SubResource("Environment_klhn5")
+
+[node name="Sprite3D" type="Sprite3D" parent="SubViewportContainer/SubViewport"]
+texture = SubResource("Texture2D_utrwd")
+
+[node name="Label3D" type="Label3D" parent="SubViewportContainer/SubViewport"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.573528, 0)
+text = "Jump"
+
+[node name="Label4" type="Label" parent="."]
+offset_left = 826.0
+offset_top = 152.0
+offset_right = 934.0
+offset_bottom = 175.0
+text = "RichTextLabel"
+horizontal_alignment = 1
+
+[node name="RichTextLabel2" type="RichTextLabel" parent="."]
+offset_left = 775.0
+offset_top = 195.0
+offset_right = 993.0
+offset_bottom = 279.0
+bbcode_enabled = true
+text = "Press [img=40]res://demo/icon_respect.tres[/img] to pay respects"
+
+[node name="RichTextLabel3" type="RichTextLabel" parent="."]
+offset_left = 262.0
+offset_top = 389.0
+offset_right = 858.0
+offset_bottom = 421.0
+bbcode_enabled = true
+text = "You'll need to provide a [b]path[/b] indicating which icon to display, which can be:"
+
+[node name="RichTextLabel4" type="RichTextLabel" parent="."]
+offset_left = 47.0
+offset_top = 434.0
+offset_right = 373.0
+offset_bottom = 525.0
+bbcode_enabled = true
+text = "[center]An input action, switching automatically between keyboard/mouse and controller[/center]"
+
+[node name="TextureRect2" type="TextureRect" parent="."]
+offset_left = 187.0
+offset_top = 515.0
+offset_right = 258.0
+offset_bottom = 586.0
+texture = SubResource("Texture2D_s5m8q")
+expand_mode = 1
+
+[node name="RichTextLabel5" type="RichTextLabel" parent="."]
+offset_left = 181.0
+offset_top = 596.0
+offset_right = 274.0
+offset_bottom = 624.0
+bbcode_enabled = true
+text = "[i]\"ui_accept\"[/i]"
+
+[node name="RichTextLabel6" type="RichTextLabel" parent="."]
+offset_left = 417.0
+offset_top = 432.0
+offset_right = 777.0
+offset_bottom = 523.0
+bbcode_enabled = true
+text = "[center]A generic joypad path, which shows only controller icons and according to the connected controller type[/center]"
+
+[node name="TextureRect3" type="TextureRect" parent="."]
+offset_left = 567.0
+offset_top = 513.0
+offset_right = 638.0
+offset_bottom = 584.0
+texture = SubResource("Texture2D_8wr4o")
+expand_mode = 1
+
+[node name="RichTextLabel7" type="RichTextLabel" parent="."]
+offset_left = 561.0
+offset_top = 594.0
+offset_right = 654.0
+offset_bottom = 622.0
+bbcode_enabled = true
+text = "[i]\"joypad/x\"[/i]"
+
+[node name="RichTextLabel8" type="RichTextLabel" parent="."]
+offset_left = 789.0
+offset_top = 432.0
+offset_right = 1060.0
+offset_bottom = 523.0
+bbcode_enabled = true
+text = "[center]A specific path, which will always display the chosen icon[/center]"
+
+[node name="TextureRect4" type="TextureRect" parent="."]
+offset_left = 874.0
+offset_top = 513.0
+offset_right = 945.0
+offset_bottom = 584.0
+texture = SubResource("Texture2D_82sge")
+expand_mode = 1
+
+[node name="RichTextLabel9" type="RichTextLabel" parent="."]
+offset_left = 798.0
+offset_top = 594.0
+offset_right = 1031.0
+offset_bottom = 622.0
+bbcode_enabled = true
+text = "[i]\"switch/controllers_separate\"[/i]"
diff --git a/source/addons/controller_icons/demo/icon_respect.tres b/source/addons/controller_icons/demo/icon_respect.tres
new file mode 100644
index 0000000..ddc1358
--- /dev/null
+++ b/source/addons/controller_icons/demo/icon_respect.tres
@@ -0,0 +1,11 @@
+[gd_resource type="Texture2D" script_class="ControllerIconTexture" load_steps=2 format=3 uid="uid://5bh1m7kwdsah"]
+
+[ext_resource type="Script" path="res://addons/controller_icons/objects/ControllerIconTexture.gd" id="1_up1mj"]
+
+[resource]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("1_up1mj")
+path = "key/f"
+show_mode = 0
+force_type = 0
diff --git a/source/addons/controller_icons/objects/Button.gd b/source/addons/controller_icons/objects/Button.gd
new file mode 100644
index 0000000..6cc6dab
--- /dev/null
+++ b/source/addons/controller_icons/objects/Button.gd
@@ -0,0 +1,49 @@
+@tool
+extends Button
+class_name ControllerButton
+## Controller icon for Button nodes.
+##
+## [b]Deprecated[/b]: Use the new [ControllerIconTexture] texture resource and set it
+## directly in [member Button.icon].
+##
+## @deprecated
+
+func _get_configuration_warnings():
+ return ["This node is deprecated, and will be removed in a future version.\n\nRemove this script and use the new ControllerIconTexture resource\nby setting it directly in Button's icon property."]
+
+@export var path : String = "":
+ set(_path):
+ path = _path
+ if is_inside_tree():
+ if force_type > 0:
+ icon = ControllerIcons.parse_path(path, force_type - 1)
+ else:
+ icon = ControllerIcons.parse_path(path)
+
+@export_enum("Both", "Keyboard/Mouse", "Controller") var show_only : int = 0:
+ set(_show_only):
+ show_only = _show_only
+ _on_input_type_changed(ControllerIcons._last_input_type, ControllerIcons._last_controller)
+
+@export_enum("None", "Keyboard/Mouse", "Controller") var force_type : int = 0:
+ set(_force_type):
+ force_type = _force_type
+ _on_input_type_changed(ControllerIcons._last_input_type, ControllerIcons._last_controller)
+
+func _ready():
+ ControllerIcons.input_type_changed.connect(_on_input_type_changed)
+ self.path = path
+
+func _on_input_type_changed(input_type, controller):
+ if show_only == 0 or \
+ (show_only == 1 and input_type == ControllerIcons.InputType.KEYBOARD_MOUSE) or \
+ (show_only == 2 and input_type == ControllerIcons.InputType.CONTROLLER):
+ self.path = path
+ else:
+ icon = null
+
+func get_tts_string() -> String:
+ if force_type:
+ return ControllerIcons.parse_path_to_tts(path, force_type - 1, ControllerIcons._last_controller)
+ else:
+ return ControllerIcons.parse_path_to_tts(path)
diff --git a/source/addons/controller_icons/objects/Button.gd.uid b/source/addons/controller_icons/objects/Button.gd.uid
new file mode 100644
index 0000000..62f4311
--- /dev/null
+++ b/source/addons/controller_icons/objects/Button.gd.uid
@@ -0,0 +1 @@
+uid://cgd4mv8wtt7n2
diff --git a/source/addons/controller_icons/objects/ControllerIconEditorInspector.gd b/source/addons/controller_icons/objects/ControllerIconEditorInspector.gd
new file mode 100644
index 0000000..8590a9b
--- /dev/null
+++ b/source/addons/controller_icons/objects/ControllerIconEditorInspector.gd
@@ -0,0 +1,61 @@
+extends EditorInspectorPlugin
+
+var path_selector := preload("res://addons/controller_icons/objects/ControllerIconPathEditorProperty.gd")
+
+var editor_interface : EditorInterface
+
+class ControllerIcons_TexturePreview:
+ var n_root: MarginContainer
+ var n_background: TextureRect
+ var n_texture: TextureRect
+
+ var background: Texture2D
+
+ var texture: Texture2D:
+ set(_texture):
+ texture = _texture
+ n_texture.texture = texture
+
+ func _init(editor_interface: EditorInterface):
+ n_root = MarginContainer.new()
+
+ # UPGRADE: In Godot 4.2, there's no need to have an instance to
+ # EditorInterface, since it's now a static call:
+ # background = EditorInterface.get_base_control().get_theme_icon("Checkerboard", "EditorIcons")
+ background = editor_interface.get_base_control().get_theme_icon("Checkerboard", "EditorIcons")
+ n_background = TextureRect.new()
+ n_background.stretch_mode = TextureRect.STRETCH_TILE
+ n_background.texture = background
+ n_background.texture_repeat = CanvasItem.TEXTURE_REPEAT_ENABLED
+ n_background.custom_minimum_size = Vector2(0, 256)
+ n_root.add_child(n_background)
+
+ n_texture = TextureRect.new()
+ n_texture.texture_filter = CanvasItem.TEXTURE_FILTER_NEAREST_WITH_MIPMAPS
+ n_texture.set_anchors_preset(Control.PRESET_FULL_RECT)
+ n_texture.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED
+ n_texture.expand_mode = TextureRect.EXPAND_IGNORE_SIZE
+ n_root.add_child(n_texture)
+
+ func get_root():
+ return n_root
+
+var preview: ControllerIcons_TexturePreview
+
+func _can_handle(object: Object) -> bool:
+ return object is ControllerIconTexture
+
+func _parse_begin(object: Object) -> void:
+ preview = ControllerIcons_TexturePreview.new(editor_interface)
+ add_custom_control(preview.get_root())
+
+ var icon := object as ControllerIconTexture
+ if icon:
+ preview.texture = icon
+
+func _parse_property(object: Object, type, name: String, hint_type: PropertyHint, hint_string: String, usage_flags: int, wide: bool) -> bool:
+ if name == "path":
+ var path_selector_instance = path_selector.new(editor_interface)
+ add_property_editor(name, path_selector_instance)
+ return true
+ return false
diff --git a/source/addons/controller_icons/objects/ControllerIconEditorInspector.gd.uid b/source/addons/controller_icons/objects/ControllerIconEditorInspector.gd.uid
new file mode 100644
index 0000000..f38ecc2
--- /dev/null
+++ b/source/addons/controller_icons/objects/ControllerIconEditorInspector.gd.uid
@@ -0,0 +1 @@
+uid://dsnwwtbjdneaw
diff --git a/source/addons/controller_icons/objects/ControllerIconPathEditorProperty.gd b/source/addons/controller_icons/objects/ControllerIconPathEditorProperty.gd
new file mode 100644
index 0000000..b9d93a2
--- /dev/null
+++ b/source/addons/controller_icons/objects/ControllerIconPathEditorProperty.gd
@@ -0,0 +1,47 @@
+@tool
+extends EditorProperty
+
+var selector : ConfirmationDialog
+var line_edit : LineEdit
+
+func _init(editor_interface: EditorInterface):
+ add_child(build_tree(editor_interface))
+
+func build_tree(editor_interface: EditorInterface):
+ selector = preload("res://addons/controller_icons/objects/ControllerIconPathSelectorPopup.tscn").instantiate()
+ selector.editor_interface = editor_interface
+ selector.visible = false
+ selector.path_selected.connect(
+ func(path: String):
+ if not path.is_empty():
+ emit_changed(get_edited_property(), path)
+ )
+
+ var root := HBoxContainer.new()
+
+ line_edit = LineEdit.new()
+ line_edit.size_flags_horizontal = Control.SIZE_EXPAND_FILL
+ line_edit.text_changed.connect(func(text):
+ emit_changed(get_edited_property(), text)
+ )
+
+ var button := Button.new()
+ # UPGRADE: In Godot 4.2, there's no need to have an instance to
+ # EditorInterface, since it's now a static call:
+ # button.icon = EditorInterface.get_base_control().get_theme_icon("ListSelect", "EditorIcons")
+ button.icon = editor_interface.get_base_control().get_theme_icon("ListSelect", "EditorIcons")
+ button.tooltip_text = "Select an icon path"
+ button.pressed.connect(func():
+ selector.populate()
+ selector.popup_centered()
+ )
+
+ root.add_child(line_edit)
+ root.add_child(button)
+ root.add_child(selector)
+ return root
+
+func _update_property():
+ var new_text = get_edited_object()[get_edited_property()]
+ if line_edit.text != new_text:
+ line_edit.text = new_text
diff --git a/source/addons/controller_icons/objects/ControllerIconPathEditorProperty.gd.uid b/source/addons/controller_icons/objects/ControllerIconPathEditorProperty.gd.uid
new file mode 100644
index 0000000..d32ad81
--- /dev/null
+++ b/source/addons/controller_icons/objects/ControllerIconPathEditorProperty.gd.uid
@@ -0,0 +1 @@
+uid://hugieey610e4
diff --git a/source/addons/controller_icons/objects/ControllerIconPathSelector.gd b/source/addons/controller_icons/objects/ControllerIconPathSelector.gd
new file mode 100644
index 0000000..f6caf42
--- /dev/null
+++ b/source/addons/controller_icons/objects/ControllerIconPathSelector.gd
@@ -0,0 +1,58 @@
+@tool
+extends PanelContainer
+
+signal path_selected(path: String)
+
+@onready var n_tab_container := %TabContainer
+@onready var n_input_action := %"Input Action"
+@onready var n_joypad_path := %"Joypad Path"
+@onready var n_specific_path := %"Specific Path"
+
+var input_action_populated := false
+var joypad_path_populated := false
+var specific_path_populated := false
+
+var editor_interface : EditorInterface
+
+func populate(editor_interface: EditorInterface) -> void:
+ self.editor_interface = editor_interface
+
+ input_action_populated = false
+ joypad_path_populated = false
+ specific_path_populated = false
+
+ n_tab_container.current_tab = 0
+
+func get_icon_path() -> String:
+ return n_tab_container.get_current_tab_control().get_icon_path()
+
+
+func _on_tab_container_tab_selected(tab = null) -> void:
+ match n_tab_container.get_current_tab_control():
+ n_input_action:
+ if not input_action_populated:
+ input_action_populated = true
+ n_input_action.populate(editor_interface)
+ n_joypad_path:
+ if not joypad_path_populated:
+ joypad_path_populated = true
+ n_joypad_path.populate(editor_interface)
+ n_specific_path:
+ if not specific_path_populated:
+ specific_path_populated = true
+ n_specific_path.populate(editor_interface)
+
+ await get_tree().process_frame
+ n_tab_container.get_current_tab_control().grab_focus()
+
+
+func _on_input_action_done() -> void:
+ path_selected.emit(n_input_action.get_icon_path())
+
+
+func _on_joypad_path_done() -> void:
+ path_selected.emit(n_joypad_path.get_icon_path())
+
+
+func _on_specific_path_done() -> void:
+ path_selected.emit(n_specific_path.get_icon_path())
diff --git a/source/addons/controller_icons/objects/ControllerIconPathSelector.gd.uid b/source/addons/controller_icons/objects/ControllerIconPathSelector.gd.uid
new file mode 100644
index 0000000..674f3c0
--- /dev/null
+++ b/source/addons/controller_icons/objects/ControllerIconPathSelector.gd.uid
@@ -0,0 +1 @@
+uid://0iw60ctmug10
diff --git a/source/addons/controller_icons/objects/ControllerIconPathSelector.tscn b/source/addons/controller_icons/objects/ControllerIconPathSelector.tscn
new file mode 100644
index 0000000..80593c5
--- /dev/null
+++ b/source/addons/controller_icons/objects/ControllerIconPathSelector.tscn
@@ -0,0 +1,41 @@
+[gd_scene load_steps=5 format=3 uid="uid://dijn7haax0boi"]
+
+[ext_resource type="Script" path="res://addons/controller_icons/objects/ControllerIconPathSelector.gd" id="1_0ucf4"]
+[ext_resource type="PackedScene" uid="uid://bituity863qe4" path="res://addons/controller_icons/objects/path_selection/input_action.tscn" id="2_wlqmh"]
+[ext_resource type="PackedScene" uid="uid://b3lplrf2w6kh7" path="res://addons/controller_icons/objects/path_selection/joypad_path.tscn" id="3_6ffwr"]
+[ext_resource type="PackedScene" uid="uid://d2ow6e2ba86b6" path="res://addons/controller_icons/objects/path_selection/specific_path.tscn" id="4_3ai5v"]
+
+[node name="ControllerIconPathSelector" type="PanelContainer"]
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+script = ExtResource("1_0ucf4")
+
+[node name="TabContainer" type="TabContainer" parent="."]
+unique_name_in_owner = true
+custom_minimum_size = Vector2(850, 450)
+layout_mode = 2
+size_flags_horizontal = 3
+theme_override_constants/side_margin = 0
+tab_alignment = 1
+
+[node name="Input Action" parent="TabContainer" instance=ExtResource("2_wlqmh")]
+unique_name_in_owner = true
+layout_mode = 2
+
+[node name="Joypad Path" parent="TabContainer" instance=ExtResource("3_6ffwr")]
+unique_name_in_owner = true
+visible = false
+layout_mode = 2
+
+[node name="Specific Path" parent="TabContainer" instance=ExtResource("4_3ai5v")]
+unique_name_in_owner = true
+visible = false
+layout_mode = 2
+
+[connection signal="tab_selected" from="TabContainer" to="." method="_on_tab_container_tab_selected"]
+[connection signal="done" from="TabContainer/Input Action" to="." method="_on_input_action_done"]
+[connection signal="done" from="TabContainer/Joypad Path" to="." method="_on_joypad_path_done"]
+[connection signal="done" from="TabContainer/Specific Path" to="." method="_on_specific_path_done"]
diff --git a/source/addons/controller_icons/objects/ControllerIconPathSelectorPopup.gd b/source/addons/controller_icons/objects/ControllerIconPathSelectorPopup.gd
new file mode 100644
index 0000000..eef7549
--- /dev/null
+++ b/source/addons/controller_icons/objects/ControllerIconPathSelectorPopup.gd
@@ -0,0 +1,20 @@
+@tool
+extends ConfirmationDialog
+
+signal path_selected(path: String)
+
+var editor_interface : EditorInterface
+
+@onready var n_selector := $ControllerIconPathSelector
+
+func populate():
+ n_selector.populate(editor_interface)
+
+
+func _on_controller_icon_path_selector_path_selected(path) -> void:
+ path_selected.emit(path)
+ hide()
+
+
+func _on_confirmed() -> void:
+ path_selected.emit(n_selector.get_icon_path())
diff --git a/source/addons/controller_icons/objects/ControllerIconPathSelectorPopup.gd.uid b/source/addons/controller_icons/objects/ControllerIconPathSelectorPopup.gd.uid
new file mode 100644
index 0000000..3c6932d
--- /dev/null
+++ b/source/addons/controller_icons/objects/ControllerIconPathSelectorPopup.gd.uid
@@ -0,0 +1 @@
+uid://byshjka72uo8i
diff --git a/source/addons/controller_icons/objects/ControllerIconPathSelectorPopup.tscn b/source/addons/controller_icons/objects/ControllerIconPathSelectorPopup.tscn
new file mode 100644
index 0000000..b330223
--- /dev/null
+++ b/source/addons/controller_icons/objects/ControllerIconPathSelectorPopup.tscn
@@ -0,0 +1,20 @@
+[gd_scene load_steps=3 format=3 uid="uid://ib8ydhcaklwy"]
+
+[ext_resource type="Script" path="res://addons/controller_icons/objects/ControllerIconPathSelectorPopup.gd" id="1_6s0ph"]
+[ext_resource type="PackedScene" uid="uid://dijn7haax0boi" path="res://addons/controller_icons/objects/ControllerIconPathSelector.tscn" id="2_gfs7t"]
+
+[node name="ControllerIconPathSelectorPopup" type="ConfirmationDialog"]
+title = "Select an icon path"
+position = Vector2i(0, 36)
+size = Vector2i(866, 507)
+visible = true
+script = ExtResource("1_6s0ph")
+
+[node name="ControllerIconPathSelector" parent="." instance=ExtResource("2_gfs7t")]
+offset_left = 8.0
+offset_top = 8.0
+offset_right = -8.0
+offset_bottom = -49.0
+
+[connection signal="confirmed" from="." to="." method="_on_confirmed"]
+[connection signal="path_selected" from="ControllerIconPathSelector" to="." method="_on_controller_icon_path_selector_path_selected"]
diff --git a/source/addons/controller_icons/objects/ControllerIconTexture.gd b/source/addons/controller_icons/objects/ControllerIconTexture.gd
new file mode 100644
index 0000000..1af92ea
--- /dev/null
+++ b/source/addons/controller_icons/objects/ControllerIconTexture.gd
@@ -0,0 +1,391 @@
+@tool
+@icon("res://addons/controller_icons/objects/controller_texture_icon.svg")
+extends Texture2D
+class_name ControllerIconTexture
+## [Texture2D] proxy for displaying controller icons
+##
+## A 2D texture representing a controller icon. The underlying system provides
+## a [Texture2D] that may react to changes in the current input method, and also detect the user's controller type.
+## Specify the [member path] property to setup the desired icon and behavior.[br]
+## [br]
+## For a more technical overview, this resource functions as a proxy for any
+## node that accepts a [Texture2D], redefining draw commands to use an
+## underlying plain [Texture2D], which may be swapped by the remapping system.[br]
+## [br]
+## This resource works out-of-the box with many default nodes, such as [Sprite2D],
+## [Sprite3D], [TextureRect], [RichTextLabel], and others. If you are
+## integrating this resource on a custom node, you will need to connect to the
+## [signal Resource.changed] signal to properly handle changes to the underlying
+## texture. You might also need to force a redraw with methods such as
+## [method CanvasItem.queue_redraw].
+##
+## @tutorial(Online documentation): https://github.com/rsubtil/controller_icons/blob/master/DOCS.md
+
+## A path describing the desired icon. This is a generic path that can be one
+## of three different types:
+## [br][br]
+## [b]- Input Action[/b]: Specify the exact name of an existing input action. The
+## icon will be swapped automatically depending on whether the keyboard/mouse or the
+## controller is being used. When using a controller, it also changes according to
+## the controller type.[br][br]
+## [i]This is the recommended approach, as it will handle all input methods
+## automatically, and supports any input remapping done at runtime[/i].
+## [codeblock]
+## # "Enter" on keyboard, "Cross" on Sony,
+## # "A" on Xbox, "B" on Nintendo
+## path = "ui_accept"
+## [/codeblock]
+## [b]- Joypad Path[/b]: Specify a generic joypad path resembling the layout of a
+## Xbox 360 controller, starting with the [code]joypad/[/code] prefix. The icon will only
+## display controller icons, but it will still change according to the controller type.
+## [codeblock]
+## # "Square" on Sony, "X" on Xbox, "Y" on Nintendo
+## path = "joypad/x"
+## [/codeblock]
+## [b]- Specific Path[/b]: Specify a direct asset path from the addon assets.
+## With this path type, there is no dynamic remapping, and the icon will always
+## remain the same. The path to use is the path to an icon file, minus the base
+## path and extension.
+## [codeblock]
+## # res://addons/controller_icons/assets/steam/gyro.png
+## path = "steam/gyro"
+## [/codeblock]
+@export var path : String = "":
+ set(_path):
+ path = _path
+ _load_texture_path()
+
+enum ShowMode {
+ ANY, ## Icon will be display on any input method.
+ KEYBOARD_MOUSE, ## Icon will be display only when the keyboard/mouse is being used.
+ CONTROLLER ## Icon will be display only when a controller is being used.
+}
+
+## Show the icon only if a specific input method is being used. When hidden,
+## the icon will not occupy have any space (no width and height).
+@export var show_mode : ShowMode = ShowMode.ANY:
+ set(_show_mode):
+ show_mode = _show_mode
+ _load_texture_path()
+
+enum ForceType {
+ NONE, ## Icon will swap according to the used input method.
+ KEYBOARD_MOUSE, ## Icon will always show the keyboard/mouse action.
+ CONTROLLER, ## Icon will always show the controller action.
+}
+
+## Forces the icon to show either the keyboard/mouse or controller icon,
+## regardless of the currently used input method.
+##[br][br]
+## This is only relevant for paths using input actions, and has no effect on
+## other scenarios.
+@export var force_type : ForceType = ForceType.NONE:
+ set(_force_type):
+ force_type = _force_type
+ _load_texture_path()
+
+@export_subgroup("Text Rendering")
+## Custom LabelSettings. If set, overrides the addon's global label settings.
+@export var custom_label_settings : LabelSettings:
+ set(_custom_label_settings):
+ custom_label_settings = _custom_label_settings
+ _load_texture_path()
+
+ # Call _textures setter, which handles signal connections for label settings
+ _textures = _textures
+
+
+## Returns a text representation of the displayed icon, useful for TTS
+## (text-to-speech) scenarios.
+## [br][br]
+## This takes into consideration the currently displayed icon, and will thus be
+## different if the icon is from keyboard/mouse or controller. It also takes
+## into consideration the controller type, and will thus use native button
+## names (e.g. [code]A[/code] for Xbox, [code]Cross[/code] for PlayStation, etc).
+func get_tts_string() -> String:
+ if force_type:
+ return ControllerIcons.parse_path_to_tts(path, force_type - 1)
+ else:
+ return ControllerIcons.parse_path_to_tts(path)
+
+func _can_be_shown():
+ match show_mode:
+ 1:
+ return ControllerIcons._last_input_type == ControllerIcons.InputType.KEYBOARD_MOUSE
+ 2:
+ return ControllerIcons._last_input_type == ControllerIcons.InputType.CONTROLLER
+ 0, _:
+ return true
+
+var _textures : Array[Texture2D]:
+ set(__textures):
+ # UPGRADE: In Godot 4.2, for-loop variables can be
+ # statically typed:
+ # for tex:Texture in __textures:
+ for tex in __textures:
+ if tex and tex.is_connected("changed", _reload_resource):
+ tex.disconnect("changed", _reload_resource)
+
+ if _label_settings and _label_settings.is_connected("changed", _on_label_settings_changed):
+ _label_settings.disconnect("changed", _on_label_settings_changed)
+
+ _textures = __textures
+ _label_settings = null
+ if _textures and _textures.size() > 1:
+ _label_settings = custom_label_settings
+ if not _label_settings:
+ _label_settings = ControllerIcons._settings.custom_label_settings
+ if not _label_settings:
+ _label_settings = LabelSettings.new()
+ _label_settings.connect("changed", _on_label_settings_changed)
+ _font = ThemeDB.fallback_font if not _label_settings.font else _label_settings.font
+ _on_label_settings_changed()
+ # UPGRADE: In Godot 4.2, for-loop variables can be
+ # statically typed:
+ # for tex:Texture in __textures:
+ for tex in __textures:
+ if tex:
+ tex.connect("changed", _reload_resource)
+
+var _font : Font
+var _label_settings : LabelSettings
+var _text_size : Vector2
+
+func _on_label_settings_changed():
+ _font = ThemeDB.fallback_font if not _label_settings.font else _label_settings.font
+ _text_size = _font.get_string_size("+", HORIZONTAL_ALIGNMENT_LEFT, -1, _label_settings.font_size)
+ _reload_resource()
+
+func _reload_resource():
+ _dirty = true
+ emit_changed()
+
+func _load_texture_path_impl():
+ var textures : Array[Texture2D] = []
+ if ControllerIcons.is_node_ready() and _can_be_shown():
+ var input_type = ControllerIcons._last_input_type if force_type == ForceType.NONE else force_type - 1
+ if ControllerIcons.get_path_type(path) == ControllerIcons.PathType.INPUT_ACTION:
+ var event := ControllerIcons.get_matching_event(path, input_type)
+ textures.append_array(ControllerIcons.parse_event_modifiers(event))
+ var tex := ControllerIcons.parse_path(path, input_type)
+ if tex:
+ textures.append(tex)
+ _textures = textures
+ _reload_resource()
+
+func _load_texture_path():
+ # Ensure loading only occurs on the main thread
+ if OS.get_thread_caller_id() != OS.get_main_thread_id():
+ # In Godot 4.3, call_deferred no longer makes this function
+ # execute on the main thread due to changes in resource loading.
+ # To ensure this, we instead rely on ControllerIcons for this
+ ControllerIcons._defer_texture_load(_load_texture_path_impl)
+ else:
+ _load_texture_path_impl()
+
+func _init():
+ ControllerIcons.input_type_changed.connect(_on_input_type_changed)
+
+func _on_input_type_changed(input_type: int, controller: int):
+ _load_texture_path()
+
+#region "Draw functions"
+const _NULL_SIZE := 2
+
+func _get_width() -> int:
+ if _can_be_shown():
+ var ret := _textures.reduce(func(accum: int, texture: Texture2D):
+ if texture:
+ return accum + texture.get_width()
+ return accum
+ , 0)
+ if _label_settings:
+ ret += max(0, _textures.size()-1) * _text_size.x
+ # If ret is 0, return a size of 2 to prevent triggering engine checks
+ # for null sizes. The correct size will be set at a later frame.
+ return ret if ret > 0 else _NULL_SIZE
+ return _NULL_SIZE
+
+func _get_height() -> int:
+ if _can_be_shown():
+ var ret := _textures.reduce(func(accum: int, texture: Texture2D):
+ if texture:
+ return max(accum, texture.get_height())
+ return accum
+ , 0)
+ if _label_settings and _textures.size() > 1:
+ ret = max(ret, _text_size.y)
+ # If ret is 0, return a size of 2 to prevent triggering engine checks
+ # for null sizes. The correct size will be set at a later frame.
+ return ret if ret > 0 else _NULL_SIZE
+ return _NULL_SIZE
+
+func _has_alpha() -> bool:
+ return _textures.any(func(texture: Texture2D):
+ return texture.has_alpha()
+ )
+
+func _is_pixel_opaque(x, y) -> bool:
+ # TODO: Not exposed to GDScript; however, since this seems to be used for editor stuff, it's
+ # seemingly fine to just report all pixels as opaque. Otherwise, mouse picking for Sprite2D
+ # stops working.
+ return true
+
+func _draw(to_canvas_item: RID, pos: Vector2, modulate: Color, transpose: bool):
+ var position := pos
+
+ for i in range(_textures.size()):
+ var tex:Texture2D = _textures[i]
+ if !tex: continue
+
+ if i != 0:
+ # Draw text char '+'
+ var font_position := Vector2(
+ position.x,
+ position.y + (get_height() - _text_size.y) / 2.0
+ )
+ _draw_text(to_canvas_item, font_position, "+")
+ position.x += _text_size.x
+
+ tex.draw(to_canvas_item, position, modulate, transpose)
+ position.x += tex.get_width()
+
+func _draw_rect(to_canvas_item: RID, rect: Rect2, tile: bool, modulate: Color, transpose: bool):
+ var position := rect.position
+ var width_ratio := rect.size.x / _get_width()
+ var height_ratio := rect.size.y / _get_height()
+
+ for i in range(_textures.size()):
+ var tex:Texture2D = _textures[i]
+ if !tex: continue
+
+ if i != 0:
+ # Draw text char '+'
+ var font_position := Vector2(
+ position.x + (_text_size.x * width_ratio) / 2 - (_text_size.x / 2),
+ position.y + (rect.size.y - _text_size.y) / 2.0
+ )
+ _draw_text(to_canvas_item, font_position, "+")
+ position.x += _text_size.x * width_ratio
+
+ var size := tex.get_size() * Vector2(width_ratio, height_ratio)
+ tex.draw_rect(to_canvas_item, Rect2(position, size), tile, modulate, transpose)
+ position.x += size.x
+
+func _draw_rect_region(to_canvas_item: RID, rect: Rect2, src_rect: Rect2, modulate: Color, transpose: bool, clip_uv: bool):
+ var position := rect.position
+ var width_ratio := rect.size.x / _get_width()
+ var height_ratio := rect.size.y / _get_height()
+
+ for i in range(_textures.size()):
+ var tex:Texture2D = _textures[i]
+ if !tex: continue
+
+ if i != 0:
+ # Draw text char '+'
+ var font_position := Vector2(
+ position.x + (_text_size.x * width_ratio) / 2 - (_text_size.x / 2),
+ position.y + (rect.size.y - _text_size.y) / 2.0
+ )
+ _draw_text(to_canvas_item, font_position, "+")
+ position.x += _text_size.x * width_ratio
+
+ var size := tex.get_size() * Vector2(width_ratio, height_ratio)
+ var src_rect_ratio := Vector2(
+ tex.get_width() / float(_get_width()),
+ tex.get_height() / float(_get_height())
+ )
+ var tex_src_rect := Rect2(
+ src_rect.position * src_rect_ratio,
+ src_rect.size * src_rect_ratio
+ )
+
+ tex.draw_rect_region(to_canvas_item, Rect2(position, size), tex_src_rect, modulate, transpose, clip_uv)
+ position.x += size.x
+
+func _draw_text(to_canvas_item: RID, font_position: Vector2, text: String):
+ font_position.y += _font.get_ascent(_label_settings.font_size)
+
+ if _label_settings.shadow_color.a > 0:
+ _font.draw_string(to_canvas_item, font_position + _label_settings.shadow_offset, text, HORIZONTAL_ALIGNMENT_LEFT, -1, _label_settings.font_size, _label_settings.shadow_color)
+ if _label_settings.shadow_size > 0:
+ _font.draw_string_outline(to_canvas_item, font_position + _label_settings.shadow_offset, text, HORIZONTAL_ALIGNMENT_LEFT, -1, _label_settings.font_size, _label_settings.shadow_size, _label_settings.shadow_color)
+ if _label_settings.outline_color.a > 0 and _label_settings.outline_size > 0:
+ _font.draw_string_outline(to_canvas_item, font_position, text, HORIZONTAL_ALIGNMENT_LEFT, -1, _label_settings.font_size, _label_settings.outline_size, _label_settings.outline_color)
+ _font.draw_string(to_canvas_item, font_position, text, HORIZONTAL_ALIGNMENT_CENTER, -1, _label_settings.font_size, _label_settings.font_color)
+
+var _helper_viewport : Viewport
+var _is_stitching_texture : bool = false
+func _stitch_texture():
+ if _textures.is_empty():
+ return
+
+ _is_stitching_texture = true
+
+ var font_image : Image
+ if _textures.size() > 1:
+ # Generate a viewport to draw the text
+ _helper_viewport = SubViewport.new()
+ # FIXME: We need a 3px margin for some reason
+ _helper_viewport.size = _text_size + Vector2(3, 0)
+ _helper_viewport.render_target_update_mode = SubViewport.UPDATE_ONCE
+ _helper_viewport.render_target_clear_mode = SubViewport.CLEAR_MODE_ONCE
+ _helper_viewport.transparent_bg = true
+
+ var label := Label.new()
+ label.label_settings = _label_settings
+ label.text = "+"
+ label.position = Vector2.ZERO
+ _helper_viewport.add_child(label)
+
+ ControllerIcons.add_child(_helper_viewport)
+ await RenderingServer.frame_post_draw
+ font_image = _helper_viewport.get_texture().get_image()
+ ControllerIcons.remove_child(_helper_viewport)
+ _helper_viewport.free()
+
+ var position := Vector2i(0, 0)
+ var img : Image
+ for i in range(_textures.size()):
+ if !_textures[i]: continue
+
+ if i != 0:
+ # Draw text char '+'
+ var region := font_image.get_used_rect()
+ var font_position := Vector2i(
+ position.x,
+ position.y + (get_height() - region.size.y) / 2
+ )
+ img.blit_rect(font_image, region, font_position)
+ position.x += ceili(region.size.x)
+
+ var texture_raw := _textures[i].get_image()
+ texture_raw.decompress()
+ if not img:
+ img = Image.create(_get_width(), _get_height(), true, texture_raw.get_format())
+
+ img.blit_rect(texture_raw, Rect2i(0, 0, texture_raw.get_width(), texture_raw.get_height()), position)
+ position.x += texture_raw.get_width()
+
+ _is_stitching_texture = false
+ _dirty = false
+ _texture_3d = ImageTexture.create_from_image(img)
+ emit_changed()
+
+# This is necessary for 3D sprites, as the texture is assigned to a material, and not drawn directly.
+# For multi prompts, we need to generate a texture
+var _dirty := true
+var _texture_3d : Texture
+func _get_rid():
+ if _dirty:
+ if not _is_stitching_texture:
+ # FIXME: Function may await, but because this is an internal engine call, we can't do anything about it.
+ # This results in a one-frame white texture being displayed, which is not ideal. Investigate later.
+ _stitch_texture()
+ if _is_stitching_texture:
+ return 0
+ else:
+ return 0
+ return _texture_3d.get_rid() if not _textures.is_empty() else 0
+
+#endregion
diff --git a/source/addons/controller_icons/objects/ControllerIconTexture.gd.uid b/source/addons/controller_icons/objects/ControllerIconTexture.gd.uid
new file mode 100644
index 0000000..b17c004
--- /dev/null
+++ b/source/addons/controller_icons/objects/ControllerIconTexture.gd.uid
@@ -0,0 +1 @@
+uid://c2w177bb5r70x
diff --git a/source/addons/controller_icons/objects/Sprite.gd b/source/addons/controller_icons/objects/Sprite.gd
new file mode 100644
index 0000000..da389cb
--- /dev/null
+++ b/source/addons/controller_icons/objects/Sprite.gd
@@ -0,0 +1,50 @@
+@tool
+extends Sprite2D
+class_name ControllerSprite2D
+
+## @deprecated
+## Controller icon for Sprite2D nodes.
+##
+## [b]Deprecated[/b]: Use the new [ControllerIconTexture] texture resource and set it
+## directly in [member Sprite2D.texture].
+
+func _get_configuration_warnings():
+ return ["This node is deprecated, and will be removed in a future version.\n\nRemove this script and use the new ControllerIconTexture resource\nby setting it directly in Sprite2D's texture property."]
+
+@export var path : String = "":
+ set(_path):
+ path = _path
+ if is_inside_tree():
+ if force_type > 0:
+ texture = ControllerIcons.parse_path(path, force_type - 1)
+ else:
+ texture = ControllerIcons.parse_path(path)
+
+@export_enum("Both", "Keyboard/Mouse", "Controller") var show_only : int = 0:
+ set(_show_only):
+ show_only = _show_only
+ _on_input_type_changed(ControllerIcons._last_input_type, ControllerIcons._last_controller)
+
+@export_enum("None", "Keyboard/Mouse", "Controller") var force_type : int = 0:
+ set(_force_type):
+ force_type = _force_type
+ _on_input_type_changed(ControllerIcons._last_input_type, ControllerIcons._last_controller)
+
+func _ready():
+ ControllerIcons.input_type_changed.connect(_on_input_type_changed)
+ self.path = path
+
+func _on_input_type_changed(input_type, controller):
+ if show_only == 0 or \
+ (show_only == 1 and input_type == ControllerIcons.InputType.KEYBOARD_MOUSE) or \
+ (show_only == 2 and input_type == ControllerIcons.InputType.CONTROLLER):
+ visible = true
+ self.path = path
+ else:
+ visible = false
+
+func get_tts_string() -> String:
+ if force_type:
+ return ControllerIcons.parse_path_to_tts(path, force_type - 1)
+ else:
+ return ControllerIcons.parse_path_to_tts(path)
diff --git a/source/addons/controller_icons/objects/Sprite.gd.uid b/source/addons/controller_icons/objects/Sprite.gd.uid
new file mode 100644
index 0000000..783b3dc
--- /dev/null
+++ b/source/addons/controller_icons/objects/Sprite.gd.uid
@@ -0,0 +1 @@
+uid://cvchkcq7k35f0
diff --git a/source/addons/controller_icons/objects/Sprite3D.gd b/source/addons/controller_icons/objects/Sprite3D.gd
new file mode 100644
index 0000000..64d2567
--- /dev/null
+++ b/source/addons/controller_icons/objects/Sprite3D.gd
@@ -0,0 +1,50 @@
+@tool
+extends Sprite3D
+class_name ControllerSprite3D
+
+## @deprecated
+## Controller icon for Sprite3D nodes.
+##
+## [b]Deprecated[/b]: Use the new [ControllerIconTexture] texture resource and set it
+## directly in [member Sprite3D.texture].
+
+func _get_configuration_warnings():
+ return ["This node is deprecated, and will be removed in a future version.\n\nRemove this script and use the new ControllerIconTexture resource\nby setting it directly in Sprite3D's texture property."]
+
+@export var path : String = "":
+ set(_path):
+ path = _path
+ if is_inside_tree():
+ if force_type > 0:
+ texture = ControllerIcons.parse_path(path, force_type - 1)
+ else:
+ texture = ControllerIcons.parse_path(path)
+
+@export_enum("Both", "Keyboard/Mouse", "Controller") var show_only := 0:
+ set(_show_only):
+ show_only = _show_only
+ _on_input_type_changed(ControllerIcons._last_input_type, ControllerIcons._last_controller)
+
+@export_enum("None", "Keyboard/Mouse", "Controller") var force_type : int = 0:
+ set(_force_type):
+ force_type = _force_type
+ _on_input_type_changed(ControllerIcons._last_input_type, ControllerIcons._last_controller)
+
+func _ready():
+ ControllerIcons.input_type_changed.connect(_on_input_type_changed)
+ self.path = path
+
+func _on_input_type_changed(input_type, controller):
+ if show_only == 0 or \
+ (show_only == 1 and input_type == ControllerIcons.InputType.KEYBOARD_MOUSE) or \
+ (show_only == 2 and input_type == ControllerIcons.InputType.CONTROLLER):
+ visible = true
+ self.path = path
+ else:
+ visible = false
+
+func get_tts_string() -> String:
+ if force_type:
+ return ControllerIcons.parse_path_to_tts(path, force_type - 1)
+ else:
+ return ControllerIcons.parse_path_to_tts(path)
diff --git a/source/addons/controller_icons/objects/Sprite3D.gd.uid b/source/addons/controller_icons/objects/Sprite3D.gd.uid
new file mode 100644
index 0000000..257a55d
--- /dev/null
+++ b/source/addons/controller_icons/objects/Sprite3D.gd.uid
@@ -0,0 +1 @@
+uid://bdy2y8h3erfcx
diff --git a/source/addons/controller_icons/objects/TextureRect.gd b/source/addons/controller_icons/objects/TextureRect.gd
new file mode 100644
index 0000000..6a4397e
--- /dev/null
+++ b/source/addons/controller_icons/objects/TextureRect.gd
@@ -0,0 +1,66 @@
+@tool
+extends TextureRect
+class_name ControllerTextureRect
+## Controller icon for TextureRect nodes.
+##
+## [b]Deprecated[/b]: Use the new [ControllerIconTexture] texture resource and set it
+## directly in [member TextureRect.texture].
+##
+## @deprecated
+
+func _get_configuration_warnings():
+ return ["This node is deprecated, and will be removed in a future version.\n\nRemove this script and use the new ControllerIconTexture resource\nby setting it directly in TextureRect's texture property."]
+
+
+@export var path : String = "":
+ set(_path):
+ path = _path
+ if is_inside_tree():
+ if force_type > 0:
+ texture = ControllerIcons.parse_path(path, force_type - 1)
+ else:
+ texture = ControllerIcons.parse_path(path)
+
+@export_enum("Both", "Keyboard/Mouse", "Controller") var show_only : int = 0:
+ set(_show_only):
+ show_only = _show_only
+ _on_input_type_changed(ControllerIcons._last_input_type, ControllerIcons._last_controller)
+
+@export_enum("None", "Keyboard/Mouse", "Controller") var force_type : int = 0:
+ set(_force_type):
+ force_type = _force_type
+ _on_input_type_changed(ControllerIcons._last_input_type, ControllerIcons._last_controller)
+
+@export var max_width : int = 40:
+ set(_max_width):
+ max_width = _max_width
+ if is_inside_tree():
+ if max_width < 0:
+ expand_mode = TextureRect.EXPAND_KEEP_SIZE
+ else:
+ expand_mode = TextureRect.EXPAND_IGNORE_SIZE
+ custom_minimum_size.x = max_width
+ if texture:
+ custom_minimum_size.y = texture.get_height() * max_width / texture.get_width()
+ else:
+ custom_minimum_size.y = custom_minimum_size.x
+
+func _ready():
+ ControllerIcons.input_type_changed.connect(_on_input_type_changed)
+ self.path = path
+ self.max_width = max_width
+
+func _on_input_type_changed(input_type, controller):
+ if show_only == 0 or \
+ (show_only == 1 and input_type == ControllerIcons.InputType.KEYBOARD_MOUSE) or \
+ (show_only == 2 and input_type == ControllerIcons.InputType.CONTROLLER):
+ visible = true
+ self.path = path
+ else:
+ visible = false
+
+func get_tts_string() -> String:
+ if force_type:
+ return ControllerIcons.parse_path_to_tts(path, force_type - 1)
+ else:
+ return ControllerIcons.parse_path_to_tts(path)
diff --git a/source/addons/controller_icons/objects/TextureRect.gd.uid b/source/addons/controller_icons/objects/TextureRect.gd.uid
new file mode 100644
index 0000000..b7c22ce
--- /dev/null
+++ b/source/addons/controller_icons/objects/TextureRect.gd.uid
@@ -0,0 +1 @@
+uid://c5wegnq47ory2
diff --git a/source/addons/controller_icons/objects/controller_texture_icon.svg b/source/addons/controller_icons/objects/controller_texture_icon.svg
new file mode 100644
index 0000000..4dbb02c
--- /dev/null
+++ b/source/addons/controller_icons/objects/controller_texture_icon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/source/components/collision/areas/dynamic_area_loader.svg.import b/source/addons/controller_icons/objects/controller_texture_icon.svg.import
similarity index 68%
rename from source/components/collision/areas/dynamic_area_loader.svg.import
rename to source/addons/controller_icons/objects/controller_texture_icon.svg.import
index c53cd8b..d49936b 100644
--- a/source/components/collision/areas/dynamic_area_loader.svg.import
+++ b/source/addons/controller_icons/objects/controller_texture_icon.svg.import
@@ -2,8 +2,8 @@
importer="texture"
type="CompressedTexture2D"
-uid="uid://4qsmkgrm8frw"
-path="res://.godot/imported/dynamic_area_loader.svg-9c18be72046d8461d1671f5d055e60a9.ctex"
+uid="uid://d4cwx85k03lt7"
+path="res://.godot/imported/controller_texture_icon.svg-c7feb059f1c41a49e9f62f5b03706d01.ctex"
metadata={
"has_editor_variant": true,
"vram_texture": false
@@ -11,8 +11,8 @@ metadata={
[deps]
-source_file="res://components/collision/areas/dynamic_area_loader.svg"
-dest_files=["res://.godot/imported/dynamic_area_loader.svg-9c18be72046d8461d1671f5d055e60a9.ctex"]
+source_file="res://addons/controller_icons/objects/controller_texture_icon.svg"
+dest_files=["res://.godot/imported/controller_texture_icon.svg-c7feb059f1c41a49e9f62f5b03706d01.ctex"]
[params]
diff --git a/source/addons/controller_icons/objects/path_selection/InputActionSelector.gd b/source/addons/controller_icons/objects/path_selection/InputActionSelector.gd
new file mode 100644
index 0000000..1f46a29
--- /dev/null
+++ b/source/addons/controller_icons/objects/path_selection/InputActionSelector.gd
@@ -0,0 +1,115 @@
+@tool
+extends Panel
+
+signal done
+
+@onready var n_name_filter := %NameFilter
+@onready var n_builtin_action_button := %BuiltinActionButton
+@onready var n_tree := %Tree
+
+class ControllerIcons_Item:
+ func _init(tree: Tree, root: TreeItem, path: String, is_default: bool):
+ self.is_default = is_default
+ self.filtered = true
+ tree_item = tree.create_item(root)
+ tree_item.set_text(0, path)
+
+ controller_icon_key = ControllerIconTexture.new()
+ controller_icon_key.path = path
+ controller_icon_key.force_type = 1
+ controller_icon_joy = ControllerIconTexture.new()
+ controller_icon_joy.path = path
+ controller_icon_joy.force_type = 2
+
+ tree_item.set_icon_max_width(1, 48 * controller_icon_key._textures.size())
+ tree_item.set_icon_max_width(2, 48 * controller_icon_key._textures.size())
+ tree_item.set_icon(1, controller_icon_key)
+ tree_item.set_icon(2, controller_icon_joy)
+
+ var is_default : bool
+ var tree_item : TreeItem
+ var controller_icon_key : ControllerIconTexture
+ var controller_icon_joy : ControllerIconTexture
+
+ var show_default : bool:
+ set(_show_default):
+ show_default = _show_default
+ _query_visibility()
+
+ var filtered : bool:
+ set(_filtered):
+ filtered = _filtered
+ _query_visibility()
+
+ func _query_visibility():
+ if is_instance_valid(tree_item):
+ tree_item.visible = show_default and filtered
+
+var root : TreeItem
+var items : Array[ControllerIcons_Item]
+
+func populate(editor_interface: EditorInterface) -> void:
+ # Clear
+ n_tree.clear()
+ ## Using clear() triggers a signal and uses freed nodes.
+ ## Setting the text directly does not.
+ n_name_filter.text = ""
+ items.clear()
+
+ n_name_filter.right_icon = editor_interface.get_base_control().get_theme_icon("Search", "EditorIcons")
+
+ # Setup tree columns
+ n_tree.set_column_title(0, "Action")
+ n_tree.set_column_title(1, "Preview")
+ n_tree.set_column_expand(1, false)
+ n_tree.set_column_expand(2, false)
+
+ # Force ControllerIcons to reload the input map
+ ControllerIcons._parse_input_actions()
+
+ # List with all default input actions
+ var default_actions := ControllerIcons._builtin_keys.map(
+ func(value: String):
+ return value.trim_prefix("input/")
+ )
+
+ # Map with all input actions
+ root = n_tree.create_item()
+ for data in ControllerIcons._custom_input_actions:
+ var child := ControllerIcons_Item.new(n_tree, root, data, data in default_actions)
+ items.push_back(child)
+
+ set_default_actions_visibility(n_builtin_action_button.button_pressed)
+
+func get_icon_path() -> String:
+ var item : TreeItem = n_tree.get_selected()
+ if is_instance_valid(item):
+ return item.get_text(0)
+ return ""
+
+func set_default_actions_visibility(display: bool):
+ # UPGRADE: In Godot 4.2, for-loop variables can be
+ # statically typed:
+ # for item:ControllerIcons_Item in items:
+ for item in items:
+ item.show_default = display or not item.is_default
+
+func grab_focus() -> void:
+ n_name_filter.grab_focus()
+
+
+func _on_builtin_action_button_toggled(toggled_on: bool) -> void:
+ set_default_actions_visibility(toggled_on)
+
+
+func _on_tree_item_activated() -> void:
+ done.emit()
+
+
+func _on_name_filter_text_changed(new_text: String):
+ # UPGRADE: In Godot 4.2, for-loop variables can be
+ # statically typed:
+ # for item:ControllerIcons_Item in items:
+ for item in items:
+ var filtered := true if new_text.is_empty() else item.tree_item.get_text(0).findn(new_text) != -1
+ item.filtered = filtered
diff --git a/source/addons/controller_icons/objects/path_selection/InputActionSelector.gd.uid b/source/addons/controller_icons/objects/path_selection/InputActionSelector.gd.uid
new file mode 100644
index 0000000..ff304be
--- /dev/null
+++ b/source/addons/controller_icons/objects/path_selection/InputActionSelector.gd.uid
@@ -0,0 +1 @@
+uid://by7qxtmey10xd
diff --git a/source/addons/controller_icons/objects/path_selection/JoypadPathSelector.gd b/source/addons/controller_icons/objects/path_selection/JoypadPathSelector.gd
new file mode 100644
index 0000000..f70009d
--- /dev/null
+++ b/source/addons/controller_icons/objects/path_selection/JoypadPathSelector.gd
@@ -0,0 +1,200 @@
+@tool
+extends Panel
+
+signal done
+
+@onready var n_button_label := %ButtonLabel
+@onready var button_nodes := [
+ %LT, %RT,
+ %LStick, %RStick,
+ %LStickClick, %RStickClick,
+ %LB, %RB, %A, %B, %X, %Y,
+ %Select, %Start,
+ %Home, %Share, %DPAD,
+ %DPADDown, %DPADRight,
+ %DPADLeft, %DPADUp
+]
+
+var _last_pressed_button : Button
+var _last_pressed_timestamp : int
+
+func populate(editor_interface: EditorInterface) -> void:
+ # UPGRADE: In Godot 4.2, for-loop variables can be
+ # statically typed:
+ # for button:Button in button_nodes:
+ for button in button_nodes:
+ button.button_pressed = false
+
+func get_icon_path() -> String:
+ # UPGRADE: In Godot 4.2, for-loop variables can be
+ # statically typed:
+ # for button:Button in button_nodes:
+ for button in button_nodes:
+ if button.button_pressed:
+ return button.icon.path
+ return ""
+
+func grab_focus() -> void:
+ pass
+
+func _input(event):
+ if not visible: return
+
+ if event is InputEventJoypadMotion:
+ _input_motion(event)
+ elif event is InputEventJoypadButton:
+ _input_button(event)
+
+func _input_motion(event: InputEventJoypadMotion):
+ if abs(event.axis_value) < 0.5: return
+ match event.axis:
+ JOY_AXIS_LEFT_X, JOY_AXIS_LEFT_Y:
+ _simulate_button_press(%LStick)
+ JOY_AXIS_RIGHT_X, JOY_AXIS_RIGHT_Y:
+ _simulate_button_press(%RStick)
+ JOY_AXIS_TRIGGER_LEFT:
+ _simulate_button_press(%LT)
+ JOY_AXIS_TRIGGER_RIGHT:
+ _simulate_button_press(%RT)
+
+func _input_button(event: InputEventJoypadButton):
+ if not event.pressed: return
+ match event.button_index:
+ JOY_BUTTON_A:
+ _simulate_button_press(%A)
+ JOY_BUTTON_B:
+ _simulate_button_press(%B)
+ JOY_BUTTON_X:
+ _simulate_button_press(%X)
+ JOY_BUTTON_Y:
+ _simulate_button_press(%Y)
+ JOY_BUTTON_LEFT_SHOULDER:
+ _simulate_button_press(%LB)
+ JOY_BUTTON_RIGHT_SHOULDER:
+ _simulate_button_press(%RB)
+ JOY_BUTTON_LEFT_STICK:
+ _simulate_button_press(%LStickClick)
+ JOY_BUTTON_RIGHT_STICK:
+ _simulate_button_press(%RStickClick)
+ JOY_BUTTON_DPAD_DOWN:
+ _simulate_button_press(%DPADDown)
+ JOY_BUTTON_DPAD_RIGHT:
+ _simulate_button_press(%DPADRight)
+ JOY_BUTTON_DPAD_LEFT:
+ _simulate_button_press(%DPADLeft)
+ JOY_BUTTON_DPAD_UP:
+ _simulate_button_press(%DPADUp)
+ JOY_BUTTON_BACK:
+ _simulate_button_press(%Select)
+ JOY_BUTTON_START:
+ _simulate_button_press(%Start)
+ JOY_BUTTON_GUIDE:
+ _simulate_button_press(%Home)
+ JOY_BUTTON_MISC1:
+ _simulate_button_press(%Share)
+
+func _simulate_button_press(button: Button):
+ button.grab_focus()
+ button.button_pressed = true
+ button.set_meta("from_ui", false)
+ button.pressed.emit()
+ button.set_meta("from_ui", true)
+
+func _on_button_pressed():
+ # UPGRADE: In Godot 4.2, for-loop variables can be
+ # statically typed:
+ # for button:Button in button_nodes:
+ for button in button_nodes:
+ if button.has_meta("from_ui") and not button.get_meta("from_ui", true): return
+ if button.button_pressed:
+ if _last_pressed_button == button:
+ if Time.get_ticks_msec() < _last_pressed_timestamp:
+ done.emit()
+ else:
+ _last_pressed_timestamp = Time.get_ticks_msec() + 1000
+ else:
+ _last_pressed_button = button
+ _last_pressed_timestamp = Time.get_ticks_msec() + 1000
+
+func _on_l_stick_pressed():
+ n_button_label.text = "Axis 0/1\n(Left Stick, Joystick 0)\n[joypad/l_stick]"
+
+
+func _on_l_stick_click_pressed():
+ n_button_label.text = "Button 7\n(Left Stick, Sony L3, Xbox L/LS)\n[joypad/l_stick_click]"
+
+
+func _on_r_stick_pressed():
+ n_button_label.text = "Axis 2/3\n(Right Stick, Joystick 1)\n[joypad/r_stick]"
+
+
+func _on_r_stick_click_pressed():
+ n_button_label.text = "Button 8\n(Right Stick, Sony R3, Xbox R/RS)\n[joypad/r_stick_click]"
+
+
+func _on_lb_pressed():
+ n_button_label.text = "Button 9\n(Left Shoulder, Sony L1, Xbox LB)\n[joypad/lb]"
+
+
+func _on_lt_pressed():
+ n_button_label.text = "Axis 4\n(Left Trigger, Sony L2, Xbox LT, Joystick 2 Right)\n[joypad/lt]"
+
+
+func _on_rb_pressed():
+ n_button_label.text = "Button 10\n(Right Shoulder, Sony R1, Xbox RB)\n[joypad/rb]"
+
+
+func _on_rt_pressed():
+ n_button_label.text = "Axis 5\n(Right Trigger, Sony R2, Xbox RT, Joystick 2 Down)\n[joypad/rt]"
+
+
+func _on_a_pressed():
+ n_button_label.text = "Button 0\n(Bottom Action, Sony Cross, Xbox A, Nintendo B)\n[joypad/a]"
+
+
+func _on_b_pressed():
+ n_button_label.text = "Button 1\n(Right Action, Sony Circle, Xbox B, Nintendo A)\n[joypad/b]"
+
+
+func _on_x_pressed():
+ n_button_label.text = "Button 2\n(Left Action, Sony Square, Xbox X, Nintendo Y)\n[joypad/x]"
+
+
+func _on_y_pressed():
+ n_button_label.text = "Button 3\n(Top Action, Sony Triangle, Xbox Y, Nintendo X)\n[joypad/y]"
+
+
+func _on_select_pressed():
+ n_button_label.text = "Button 4\n(Back, Sony Select, Xbox Back, Nintendo -)\n[joypad/select]"
+
+
+func _on_start_pressed():
+ n_button_label.text = "Button 6\n(Start, Xbox Menu, Nintendo +)\n[joypad/start]"
+
+
+func _on_home_pressed():
+ n_button_label.text = "Button 5\n(Guide, Sony PS, Xbox Home)\n[joypad/home]"
+
+
+func _on_share_pressed():
+ n_button_label.text = "Button 15\n(Xbox Share, PS5 Microphone, Nintendo Capture)\n[joypad/share]"
+
+
+func _on_dpad_pressed():
+ n_button_label.text = "Button 11/12/13/14\n(D-pad)\n[joypad/dpad]"
+
+
+func _on_dpad_down_pressed():
+ n_button_label.text = "Button 12\n(D-pad Down)\n[joypad/dpad_down]"
+
+
+func _on_dpad_right_pressed():
+ n_button_label.text = "Button 14\n(D-pad Right)\n[joypad/dpad_right]"
+
+
+func _on_dpad_left_pressed():
+ n_button_label.text = "Button 13\n(D-pad Left)\n[joypad/dpad_left]"
+
+
+func _on_dpad_up_pressed():
+ n_button_label.text = "Button 11\n(D-pad Up)\n[joypad/dpad_up]"
diff --git a/source/addons/controller_icons/objects/path_selection/JoypadPathSelector.gd.uid b/source/addons/controller_icons/objects/path_selection/JoypadPathSelector.gd.uid
new file mode 100644
index 0000000..4e48673
--- /dev/null
+++ b/source/addons/controller_icons/objects/path_selection/JoypadPathSelector.gd.uid
@@ -0,0 +1 @@
+uid://bc1hpc5l8tbls
diff --git a/source/addons/controller_icons/objects/path_selection/SpecificPathSelector.gd b/source/addons/controller_icons/objects/path_selection/SpecificPathSelector.gd
new file mode 100644
index 0000000..8ddfac6
--- /dev/null
+++ b/source/addons/controller_icons/objects/path_selection/SpecificPathSelector.gd
@@ -0,0 +1,185 @@
+@tool
+extends Panel
+
+signal done
+
+@onready var n_name_filter := %NameFilter
+@onready var n_base_asset_names := %BaseAssetNames
+@onready var n_assets_container := %AssetsContainer
+
+var _last_pressed_icon : ControllerIcons_Icon
+var _last_pressed_timestamp : int
+
+var color_text_enabled : Color
+var color_text_disabled : Color
+
+class ControllerIcons_Icon:
+ static var group := ButtonGroup.new()
+
+ func _init(category: String, path: String):
+ self.category = category
+ self.filtered = true
+ self.path = path.get_slice("/", 1)
+
+ button = Button.new()
+ button.custom_minimum_size = Vector2(100, 100)
+ button.clip_text = true
+ button.text_overrun_behavior = TextServer.OVERRUN_TRIM_ELLIPSIS
+ button.icon_alignment = HORIZONTAL_ALIGNMENT_CENTER
+ button.vertical_icon_alignment = VERTICAL_ALIGNMENT_TOP
+ button.expand_icon = true
+ button.toggle_mode = true
+ button.button_group = group
+ button.text = self.path
+
+ var icon = ControllerIconTexture.new()
+ icon.path = path
+ button.icon = icon
+
+ var button : Button
+ var category : String
+ var path : String
+
+ var selected: bool:
+ set(_selected):
+ selected = _selected
+ _query_visibility()
+
+ var filtered: bool:
+ set(_filtered):
+ filtered = _filtered
+ _query_visibility()
+
+ func _query_visibility():
+ if is_instance_valid(button):
+ button.visible = selected and filtered
+
+var button_nodes := {}
+var asset_names_root : TreeItem
+
+func populate(editor_interface: EditorInterface) -> void:
+ ## Using clear() triggers a signal and uses freed nodes.
+ ## Setting the text directly does not.
+ n_name_filter.text = ""
+ n_base_asset_names.clear()
+ button_nodes.clear()
+ for child in n_assets_container.get_children():
+ n_assets_container.remove_child(child)
+ child.queue_free()
+
+ # UPGRADE: In Godot 4.2, there's no need to have an instance to
+ # EditorInterface, since it's now a static call:
+ # var editor_control := EditorInterface.get_base_control()
+ var editor_control := editor_interface.get_base_control()
+ color_text_enabled = editor_control.get_theme_color("font_color", "Editor")
+ color_text_disabled = editor_control.get_theme_color("disabled_font_color", "Editor")
+ n_name_filter.right_icon = editor_control.get_theme_icon("Search", "EditorIcons")
+
+ asset_names_root = n_base_asset_names.create_item()
+
+ var base_paths := [
+ ControllerIcons._settings.custom_asset_dir,
+ "res://addons/controller_icons/assets"
+ ]
+
+ # UPGRADE: In Godot 4.2, for-loop variables can be
+ # statically typed:
+ # for base_path:String in base_paths:
+ for base_path in base_paths:
+ if base_path.is_empty() or not base_path.begins_with("res://"):
+ continue
+ # Files first
+ handle_files("", base_path)
+ # Directories next
+ for dir in DirAccess.get_directories_at(base_path):
+ handle_files(dir, base_path.path_join(dir))
+
+ var child : TreeItem = asset_names_root.get_next_in_tree()
+ if child:
+ child.select(0)
+
+func handle_files(category: String, base_path: String):
+ for file in DirAccess.get_files_at(base_path):
+ if file.get_extension() == ControllerIcons._base_extension:
+ create_icon(category, base_path.path_join(file))
+
+func create_icon(category: String, path: String):
+ var map_category := "" if category.is_empty() else category
+ if not button_nodes.has(map_category):
+ button_nodes[map_category] = {}
+ var item : TreeItem = n_base_asset_names.create_item(asset_names_root)
+ item.set_text(0, map_category)
+
+ var filename := path.get_file()
+ if button_nodes[map_category].has(filename): return
+
+ var icon_path = ("" if category.is_empty() else category + "/") + path.get_file().get_basename()
+ var icon := ControllerIcons_Icon.new(map_category, icon_path)
+ button_nodes[map_category][filename] = icon
+ n_assets_container.add_child(icon.button)
+ icon.button.pressed.connect(func():
+ if _last_pressed_icon == icon:
+ if Time.get_ticks_msec() < _last_pressed_timestamp:
+ done.emit()
+ else:
+ _last_pressed_timestamp = Time.get_ticks_msec() + 1000
+ else:
+ _last_pressed_icon = icon
+ _last_pressed_timestamp = Time.get_ticks_msec() + 1000
+ )
+
+func get_icon_path() -> String:
+ var button := ControllerIcons_Icon.group.get_pressed_button()
+ if button:
+ return button.icon.path
+ return ""
+
+func grab_focus() -> void:
+ n_name_filter.grab_focus()
+
+
+func _on_base_asset_names_item_selected():
+ var selected : TreeItem = n_base_asset_names.get_selected()
+ if not selected: return
+
+ var category := selected.get_text(0)
+ if not button_nodes.has(category): return
+
+ # UPGRADE: In Godot 4.2, for-loop variables can be
+ # statically typed:
+ # for key:String in button_nodes.keys():
+ # for icon:ControllerIcon_Icon in button_nodes[key].values():
+ for key in button_nodes.keys():
+ for icon in button_nodes[key].values():
+ icon.selected = key == category
+
+
+func _on_name_filter_text_changed(new_text:String):
+ var any_visible := {}
+ var asset_name := asset_names_root.get_next_in_tree()
+ while asset_name:
+ any_visible[asset_name.get_text(0)] = false
+ asset_name = asset_name.get_next_in_tree()
+
+ var selected_category : TreeItem = n_base_asset_names.get_selected()
+
+ # UPGRADE: In Godot 4.2, for-loop variables can be
+ # statically typed:
+ # for key:String in button_nodes.keys():
+ # for icon:Icon in button_nodes[key].values():
+ for key in button_nodes.keys():
+ for icon in button_nodes[key].values():
+ var filtered : bool = true if new_text.is_empty() else icon.path.findn(new_text) != -1
+ icon.filtered = filtered
+ any_visible[key] = any_visible[key] or filtered
+
+ asset_name = asset_names_root.get_next_in_tree()
+ while asset_name:
+ var category := asset_name.get_text(0)
+ if any_visible.has(category):
+ var selectable : bool = any_visible[category]
+ asset_name.set_selectable(0, selectable)
+ if not selectable:
+ asset_name.deselect(0)
+ asset_name.set_custom_color(0, color_text_enabled if selectable else color_text_disabled)
+ asset_name = asset_name.get_next_in_tree()
diff --git a/source/addons/controller_icons/objects/path_selection/SpecificPathSelector.gd.uid b/source/addons/controller_icons/objects/path_selection/SpecificPathSelector.gd.uid
new file mode 100644
index 0000000..b885ad3
--- /dev/null
+++ b/source/addons/controller_icons/objects/path_selection/SpecificPathSelector.gd.uid
@@ -0,0 +1 @@
+uid://bxg2kuuti72un
diff --git a/source/addons/controller_icons/objects/path_selection/input_action.tscn b/source/addons/controller_icons/objects/path_selection/input_action.tscn
new file mode 100644
index 0000000..f3b97e9
--- /dev/null
+++ b/source/addons/controller_icons/objects/path_selection/input_action.tscn
@@ -0,0 +1,59 @@
+[gd_scene load_steps=2 format=3 uid="uid://bituity863qe4"]
+
+[ext_resource type="Script" path="res://addons/controller_icons/objects/path_selection/InputActionSelector.gd" id="1_shxks"]
+
+[node name="Input Action" type="Panel"]
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+script = ExtResource("1_shxks")
+
+[node name="VBoxContainer" type="VBoxContainer" parent="."]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="Label" type="Label" parent="VBoxContainer"]
+layout_mode = 2
+text = "The icon will be tied to an input action, swapping between keyboard/mouse and controller automatically."
+horizontal_alignment = 1
+
+[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"]
+layout_mode = 2
+
+[node name="NameFilter" type="LineEdit" parent="VBoxContainer/HBoxContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_horizontal = 3
+placeholder_text = "Filter by name..."
+clear_button_enabled = true
+
+[node name="BuiltinActionButton" type="CheckButton" parent="VBoxContainer/HBoxContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+text = "Show Built-in Actions"
+
+[node name="ScrollContainer" type="ScrollContainer" parent="VBoxContainer"]
+layout_mode = 2
+size_flags_vertical = 3
+
+[node name="Tree" type="Tree" parent="VBoxContainer/ScrollContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 3
+columns = 3
+column_titles_visible = true
+hide_folding = true
+hide_root = true
+select_mode = 1
+scroll_horizontal_enabled = false
+
+[connection signal="text_changed" from="VBoxContainer/HBoxContainer/NameFilter" to="." method="_on_name_filter_text_changed"]
+[connection signal="toggled" from="VBoxContainer/HBoxContainer/BuiltinActionButton" to="." method="_on_builtin_action_button_toggled"]
+[connection signal="item_activated" from="VBoxContainer/ScrollContainer/Tree" to="." method="_on_tree_item_activated"]
diff --git a/source/addons/controller_icons/objects/path_selection/joypad_path.tscn b/source/addons/controller_icons/objects/path_selection/joypad_path.tscn
new file mode 100644
index 0000000..f20b9f7
--- /dev/null
+++ b/source/addons/controller_icons/objects/path_selection/joypad_path.tscn
@@ -0,0 +1,678 @@
+[gd_scene load_steps=25 format=3 uid="uid://b3lplrf2w6kh7"]
+
+[ext_resource type="Script" path="res://addons/controller_icons/objects/path_selection/JoypadPathSelector.gd" id="1_4ryog"]
+[ext_resource type="Script" path="res://addons/controller_icons/objects/ControllerIconTexture.gd" id="2_yxfq6"]
+
+[sub_resource type="ButtonGroup" id="ButtonGroup_haylq"]
+
+[sub_resource type="Texture2D" id="Texture2D_nls54"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_yxfq6")
+_horizontal_repeat = 1
+path = "joypad/l_stick"
+show_only = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_6klsb"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_yxfq6")
+_horizontal_repeat = 1
+path = "joypad/l_stick_click"
+show_only = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_bij8j"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_yxfq6")
+_horizontal_repeat = 1
+path = "joypad/r_stick"
+show_only = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_2h0w3"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_yxfq6")
+_horizontal_repeat = 1
+path = "joypad/r_stick_click"
+show_only = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_kvj2q"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_yxfq6")
+_horizontal_repeat = 1
+path = "joypad/lb"
+show_only = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_wtcrq"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_yxfq6")
+_horizontal_repeat = 1
+path = "joypad/lt"
+show_only = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_lfpf5"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_yxfq6")
+_horizontal_repeat = 1
+path = "joypad/rb"
+show_only = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_b3bsp"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_yxfq6")
+_horizontal_repeat = 1
+path = "joypad/rt"
+show_only = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_u40go"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_yxfq6")
+_horizontal_repeat = 1
+path = "joypad/a"
+show_only = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_rnqww"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_yxfq6")
+_horizontal_repeat = 1
+path = "joypad/b"
+show_only = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_1a2yv"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_yxfq6")
+_horizontal_repeat = 1
+path = "joypad/x"
+show_only = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_hktfi"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_yxfq6")
+_horizontal_repeat = 1
+path = "joypad/y"
+show_only = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_2ksy6"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_yxfq6")
+_horizontal_repeat = 1
+path = "joypad/select"
+show_only = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_08sqi"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_yxfq6")
+_horizontal_repeat = 1
+path = "joypad/start"
+show_only = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_tivgf"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_yxfq6")
+_horizontal_repeat = 1
+path = "joypad/home"
+show_only = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_87fow"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_yxfq6")
+_horizontal_repeat = 1
+path = "joypad/share"
+show_only = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_n4i6p"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_yxfq6")
+_horizontal_repeat = 1
+path = "joypad/dpad"
+show_only = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_eoyuo"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_yxfq6")
+_horizontal_repeat = 1
+path = "joypad/dpad_down"
+show_only = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_c660e"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_yxfq6")
+_horizontal_repeat = 1
+path = "joypad/dpad_right"
+show_only = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_riwus"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_yxfq6")
+_horizontal_repeat = 1
+path = "joypad/dpad_left"
+show_only = 0
+force_type = 0
+
+[sub_resource type="Texture2D" id="Texture2D_onmvf"]
+resource_local_to_scene = false
+resource_name = ""
+script = ExtResource("2_yxfq6")
+_horizontal_repeat = 1
+path = "joypad/dpad_up"
+show_only = 0
+force_type = 0
+
+[node name="Joypad Path" type="Panel"]
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+script = ExtResource("1_4ryog")
+
+[node name="VBoxContainer" type="VBoxContainer" parent="."]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="Label" type="Label" parent="VBoxContainer"]
+layout_mode = 2
+text = "The icon will only display a controller icon, changing dynamically according to the connected controller brand."
+horizontal_alignment = 1
+
+[node name="Control" type="Control" parent="VBoxContainer"]
+layout_mode = 2
+size_flags_vertical = 3
+
+[node name="ButtonLabel" type="Label" parent="VBoxContainer/Control"]
+unique_name_in_owner = true
+custom_minimum_size = Vector2(350, 0)
+layout_mode = 1
+anchors_preset = 5
+anchor_left = 0.5
+anchor_right = 0.5
+offset_left = -150.0
+offset_top = 18.0
+offset_right = 150.0
+offset_bottom = 41.0
+grow_horizontal = 2
+text = "Press or click on the desired button..."
+horizontal_alignment = 1
+autowrap_mode = 3
+
+[node name="LStick" type="Button" parent="VBoxContainer/Control"]
+unique_name_in_owner = true
+layout_mode = 1
+anchors_preset = 8
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = -126.0
+offset_top = 47.0
+offset_right = -76.0
+offset_bottom = 97.0
+grow_horizontal = 2
+grow_vertical = 2
+toggle_mode = true
+button_group = SubResource("ButtonGroup_haylq")
+icon = SubResource("Texture2D_nls54")
+expand_icon = true
+
+[node name="LStickClick" type="Button" parent="VBoxContainer/Control"]
+unique_name_in_owner = true
+layout_mode = 1
+anchors_preset = 8
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = -101.0
+offset_top = 97.0
+offset_right = -51.0
+offset_bottom = 147.0
+grow_horizontal = 2
+grow_vertical = 2
+toggle_mode = true
+button_group = SubResource("ButtonGroup_haylq")
+icon = SubResource("Texture2D_6klsb")
+expand_icon = true
+
+[node name="RStick" type="Button" parent="VBoxContainer/Control"]
+unique_name_in_owner = true
+layout_mode = 1
+anchors_preset = 8
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = 74.0
+offset_top = 47.0
+offset_right = 124.0
+offset_bottom = 97.0
+grow_horizontal = 2
+grow_vertical = 2
+toggle_mode = true
+button_group = SubResource("ButtonGroup_haylq")
+icon = SubResource("Texture2D_bij8j")
+expand_icon = true
+
+[node name="RStickClick" type="Button" parent="VBoxContainer/Control"]
+unique_name_in_owner = true
+layout_mode = 1
+anchors_preset = 8
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = 49.0
+offset_top = 97.0
+offset_right = 99.0
+offset_bottom = 147.0
+grow_horizontal = 2
+grow_vertical = 2
+toggle_mode = true
+button_group = SubResource("ButtonGroup_haylq")
+icon = SubResource("Texture2D_2h0w3")
+expand_icon = true
+
+[node name="LB" type="Button" parent="VBoxContainer/Control"]
+unique_name_in_owner = true
+layout_mode = 1
+anchors_preset = 8
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = -276.0
+offset_top = -153.0
+offset_right = -226.0
+offset_bottom = -103.0
+grow_horizontal = 2
+grow_vertical = 2
+toggle_mode = true
+button_group = SubResource("ButtonGroup_haylq")
+icon = SubResource("Texture2D_kvj2q")
+expand_icon = true
+
+[node name="LT" type="Button" parent="VBoxContainer/Control"]
+unique_name_in_owner = true
+layout_mode = 1
+anchors_preset = 8
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = -326.0
+offset_top = -178.0
+offset_right = -276.0
+offset_bottom = -128.0
+grow_horizontal = 2
+grow_vertical = 2
+toggle_mode = true
+button_group = SubResource("ButtonGroup_haylq")
+icon = SubResource("Texture2D_wtcrq")
+expand_icon = true
+
+[node name="RB" type="Button" parent="VBoxContainer/Control"]
+unique_name_in_owner = true
+layout_mode = 1
+anchors_preset = 8
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = 224.0
+offset_top = -153.0
+offset_right = 274.0
+offset_bottom = -103.0
+grow_horizontal = 2
+grow_vertical = 2
+toggle_mode = true
+button_group = SubResource("ButtonGroup_haylq")
+icon = SubResource("Texture2D_lfpf5")
+expand_icon = true
+
+[node name="RT" type="Button" parent="VBoxContainer/Control"]
+unique_name_in_owner = true
+layout_mode = 1
+anchors_preset = 8
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = 274.0
+offset_top = -178.0
+offset_right = 324.0
+offset_bottom = -128.0
+grow_horizontal = 2
+grow_vertical = 2
+toggle_mode = true
+button_group = SubResource("ButtonGroup_haylq")
+icon = SubResource("Texture2D_b3bsp")
+expand_icon = true
+
+[node name="A" type="Button" parent="VBoxContainer/Control"]
+unique_name_in_owner = true
+layout_mode = 1
+anchors_preset = 8
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = 174.0
+offset_top = 22.0
+offset_right = 224.0
+offset_bottom = 72.0
+grow_horizontal = 2
+grow_vertical = 2
+toggle_mode = true
+button_group = SubResource("ButtonGroup_haylq")
+icon = SubResource("Texture2D_u40go")
+expand_icon = true
+
+[node name="B" type="Button" parent="VBoxContainer/Control"]
+unique_name_in_owner = true
+layout_mode = 1
+anchors_preset = 8
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = 224.0
+offset_top = -28.0
+offset_right = 274.0
+offset_bottom = 22.0
+grow_horizontal = 2
+grow_vertical = 2
+toggle_mode = true
+button_group = SubResource("ButtonGroup_haylq")
+icon = SubResource("Texture2D_rnqww")
+expand_icon = true
+
+[node name="X" type="Button" parent="VBoxContainer/Control"]
+unique_name_in_owner = true
+layout_mode = 1
+anchors_preset = 8
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = 124.0
+offset_top = -28.0
+offset_right = 174.0
+offset_bottom = 22.0
+grow_horizontal = 2
+grow_vertical = 2
+toggle_mode = true
+button_group = SubResource("ButtonGroup_haylq")
+icon = SubResource("Texture2D_1a2yv")
+expand_icon = true
+
+[node name="Y" type="Button" parent="VBoxContainer/Control"]
+unique_name_in_owner = true
+layout_mode = 1
+anchors_preset = 8
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = 174.0
+offset_top = -78.0
+offset_right = 224.0
+offset_bottom = -28.0
+grow_horizontal = 2
+grow_vertical = 2
+toggle_mode = true
+button_group = SubResource("ButtonGroup_haylq")
+icon = SubResource("Texture2D_hktfi")
+expand_icon = true
+
+[node name="Select" type="Button" parent="VBoxContainer/Control"]
+unique_name_in_owner = true
+layout_mode = 1
+anchors_preset = 8
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = -76.0
+offset_top = -53.0
+offset_right = -26.0
+offset_bottom = -3.0
+grow_horizontal = 2
+grow_vertical = 2
+toggle_mode = true
+button_group = SubResource("ButtonGroup_haylq")
+icon = SubResource("Texture2D_2ksy6")
+expand_icon = true
+
+[node name="Start" type="Button" parent="VBoxContainer/Control"]
+unique_name_in_owner = true
+layout_mode = 1
+anchors_preset = 8
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = 24.0
+offset_top = -53.0
+offset_right = 74.0
+offset_bottom = -3.0
+grow_horizontal = 2
+grow_vertical = 2
+toggle_mode = true
+button_group = SubResource("ButtonGroup_haylq")
+icon = SubResource("Texture2D_08sqi")
+expand_icon = true
+
+[node name="Home" type="Button" parent="VBoxContainer/Control"]
+unique_name_in_owner = true
+layout_mode = 1
+anchors_preset = 8
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = -26.0
+offset_top = -78.0
+offset_right = 24.0
+offset_bottom = -28.0
+grow_horizontal = 2
+grow_vertical = 2
+toggle_mode = true
+button_group = SubResource("ButtonGroup_haylq")
+icon = SubResource("Texture2D_tivgf")
+expand_icon = true
+
+[node name="Share" type="Button" parent="VBoxContainer/Control"]
+unique_name_in_owner = true
+layout_mode = 1
+anchors_preset = 8
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = -26.0
+offset_top = -28.0
+offset_right = 24.0
+offset_bottom = 22.0
+grow_horizontal = 2
+grow_vertical = 2
+toggle_mode = true
+button_group = SubResource("ButtonGroup_haylq")
+icon = SubResource("Texture2D_87fow")
+expand_icon = true
+
+[node name="DPAD" type="Button" parent="VBoxContainer/Control"]
+unique_name_in_owner = true
+layout_mode = 1
+anchors_preset = 8
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = -226.0
+offset_top = -28.0
+offset_right = -176.0
+offset_bottom = 22.0
+grow_horizontal = 2
+grow_vertical = 2
+toggle_mode = true
+button_group = SubResource("ButtonGroup_haylq")
+icon = SubResource("Texture2D_n4i6p")
+expand_icon = true
+
+[node name="DPADDown" type="Button" parent="VBoxContainer/Control"]
+unique_name_in_owner = true
+layout_mode = 1
+anchors_preset = 8
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = -226.0
+offset_top = 22.0
+offset_right = -176.0
+offset_bottom = 72.0
+grow_horizontal = 2
+grow_vertical = 2
+toggle_mode = true
+button_group = SubResource("ButtonGroup_haylq")
+icon = SubResource("Texture2D_eoyuo")
+expand_icon = true
+
+[node name="DPADRight" type="Button" parent="VBoxContainer/Control"]
+unique_name_in_owner = true
+layout_mode = 1
+anchors_preset = 8
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = -176.0
+offset_top = -28.0
+offset_right = -126.0
+offset_bottom = 22.0
+grow_horizontal = 2
+grow_vertical = 2
+toggle_mode = true
+button_group = SubResource("ButtonGroup_haylq")
+icon = SubResource("Texture2D_c660e")
+expand_icon = true
+
+[node name="DPADLeft" type="Button" parent="VBoxContainer/Control"]
+unique_name_in_owner = true
+layout_mode = 1
+anchors_preset = 8
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = -276.0
+offset_top = -28.0
+offset_right = -226.0
+offset_bottom = 22.0
+grow_horizontal = 2
+grow_vertical = 2
+toggle_mode = true
+button_group = SubResource("ButtonGroup_haylq")
+icon = SubResource("Texture2D_riwus")
+expand_icon = true
+
+[node name="DPADUp" type="Button" parent="VBoxContainer/Control"]
+unique_name_in_owner = true
+layout_mode = 1
+anchors_preset = 8
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = -226.0
+offset_top = -78.0
+offset_right = -176.0
+offset_bottom = -28.0
+grow_horizontal = 2
+grow_vertical = 2
+toggle_mode = true
+button_group = SubResource("ButtonGroup_haylq")
+icon = SubResource("Texture2D_onmvf")
+expand_icon = true
+
+[connection signal="pressed" from="VBoxContainer/Control/LStick" to="." method="_on_l_stick_pressed"]
+[connection signal="pressed" from="VBoxContainer/Control/LStick" to="." method="_on_button_pressed"]
+[connection signal="pressed" from="VBoxContainer/Control/LStickClick" to="." method="_on_l_stick_click_pressed"]
+[connection signal="pressed" from="VBoxContainer/Control/LStickClick" to="." method="_on_button_pressed"]
+[connection signal="pressed" from="VBoxContainer/Control/RStick" to="." method="_on_button_pressed"]
+[connection signal="pressed" from="VBoxContainer/Control/RStick" to="." method="_on_r_stick_pressed"]
+[connection signal="pressed" from="VBoxContainer/Control/RStickClick" to="." method="_on_button_pressed"]
+[connection signal="pressed" from="VBoxContainer/Control/RStickClick" to="." method="_on_r_stick_click_pressed"]
+[connection signal="pressed" from="VBoxContainer/Control/LB" to="." method="_on_button_pressed"]
+[connection signal="pressed" from="VBoxContainer/Control/LB" to="." method="_on_lb_pressed"]
+[connection signal="pressed" from="VBoxContainer/Control/LT" to="." method="_on_button_pressed"]
+[connection signal="pressed" from="VBoxContainer/Control/LT" to="." method="_on_lt_pressed"]
+[connection signal="pressed" from="VBoxContainer/Control/RB" to="." method="_on_button_pressed"]
+[connection signal="pressed" from="VBoxContainer/Control/RB" to="." method="_on_rb_pressed"]
+[connection signal="pressed" from="VBoxContainer/Control/RT" to="." method="_on_button_pressed"]
+[connection signal="pressed" from="VBoxContainer/Control/RT" to="." method="_on_rt_pressed"]
+[connection signal="pressed" from="VBoxContainer/Control/A" to="." method="_on_button_pressed"]
+[connection signal="pressed" from="VBoxContainer/Control/A" to="." method="_on_a_pressed"]
+[connection signal="pressed" from="VBoxContainer/Control/B" to="." method="_on_b_pressed"]
+[connection signal="pressed" from="VBoxContainer/Control/B" to="." method="_on_button_pressed"]
+[connection signal="pressed" from="VBoxContainer/Control/X" to="." method="_on_button_pressed"]
+[connection signal="pressed" from="VBoxContainer/Control/X" to="." method="_on_x_pressed"]
+[connection signal="pressed" from="VBoxContainer/Control/Y" to="." method="_on_y_pressed"]
+[connection signal="pressed" from="VBoxContainer/Control/Y" to="." method="_on_button_pressed"]
+[connection signal="pressed" from="VBoxContainer/Control/Select" to="." method="_on_button_pressed"]
+[connection signal="pressed" from="VBoxContainer/Control/Select" to="." method="_on_select_pressed"]
+[connection signal="pressed" from="VBoxContainer/Control/Start" to="." method="_on_button_pressed"]
+[connection signal="pressed" from="VBoxContainer/Control/Start" to="." method="_on_start_pressed"]
+[connection signal="pressed" from="VBoxContainer/Control/Home" to="." method="_on_button_pressed"]
+[connection signal="pressed" from="VBoxContainer/Control/Home" to="." method="_on_home_pressed"]
+[connection signal="pressed" from="VBoxContainer/Control/Share" to="." method="_on_button_pressed"]
+[connection signal="pressed" from="VBoxContainer/Control/Share" to="." method="_on_share_pressed"]
+[connection signal="pressed" from="VBoxContainer/Control/DPAD" to="." method="_on_dpad_pressed"]
+[connection signal="pressed" from="VBoxContainer/Control/DPAD" to="." method="_on_button_pressed"]
+[connection signal="pressed" from="VBoxContainer/Control/DPADDown" to="." method="_on_button_pressed"]
+[connection signal="pressed" from="VBoxContainer/Control/DPADDown" to="." method="_on_dpad_down_pressed"]
+[connection signal="pressed" from="VBoxContainer/Control/DPADRight" to="." method="_on_button_pressed"]
+[connection signal="pressed" from="VBoxContainer/Control/DPADRight" to="." method="_on_dpad_right_pressed"]
+[connection signal="pressed" from="VBoxContainer/Control/DPADLeft" to="." method="_on_button_pressed"]
+[connection signal="pressed" from="VBoxContainer/Control/DPADLeft" to="." method="_on_dpad_left_pressed"]
+[connection signal="pressed" from="VBoxContainer/Control/DPADUp" to="." method="_on_button_pressed"]
+[connection signal="pressed" from="VBoxContainer/Control/DPADUp" to="." method="_on_dpad_up_pressed"]
diff --git a/source/addons/controller_icons/objects/path_selection/specific_path.tscn b/source/addons/controller_icons/objects/path_selection/specific_path.tscn
new file mode 100644
index 0000000..32eb43c
--- /dev/null
+++ b/source/addons/controller_icons/objects/path_selection/specific_path.tscn
@@ -0,0 +1,67 @@
+[gd_scene load_steps=2 format=3 uid="uid://d2ow6e2ba86b6"]
+
+[ext_resource type="Script" path="res://addons/controller_icons/objects/path_selection/SpecificPathSelector.gd" id="1_iqwfd"]
+
+[node name="Specific Path" type="Panel"]
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+script = ExtResource("1_iqwfd")
+
+[node name="VBoxContainer" type="VBoxContainer" parent="."]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="Label" type="Label" parent="VBoxContainer"]
+layout_mode = 2
+text = "The icon will be set to a specific asset, without any dynamic remapping."
+horizontal_alignment = 1
+
+[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"]
+layout_mode = 2
+
+[node name="NameFilter" type="LineEdit" parent="VBoxContainer/HBoxContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_horizontal = 3
+placeholder_text = "Filter by name..."
+clear_button_enabled = true
+
+[node name="HSplitContainer" type="HSplitContainer" parent="VBoxContainer"]
+layout_mode = 2
+size_flags_vertical = 3
+
+[node name="ScrollContainer" type="ScrollContainer" parent="VBoxContainer/HSplitContainer"]
+custom_minimum_size = Vector2(200, 0)
+layout_mode = 2
+size_flags_horizontal = 0
+
+[node name="BaseAssetNames" type="Tree" parent="VBoxContainer/HSplitContainer/ScrollContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 3
+hide_folding = true
+hide_root = true
+
+[node name="ScrollContainer2" type="ScrollContainer" parent="VBoxContainer/HSplitContainer"]
+custom_minimum_size = Vector2(200, 0)
+layout_mode = 2
+size_flags_horizontal = 3
+follow_focus = true
+horizontal_scroll_mode = 0
+
+[node name="AssetsContainer" type="HFlowContainer" parent="VBoxContainer/HSplitContainer/ScrollContainer2"]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 3
+
+[connection signal="text_changed" from="VBoxContainer/HBoxContainer/NameFilter" to="." method="_on_name_filter_text_changed"]
+[connection signal="item_selected" from="VBoxContainer/HSplitContainer/ScrollContainer/BaseAssetNames" to="." method="_on_base_asset_names_item_selected"]
diff --git a/source/addons/controller_icons/plugin.cfg b/source/addons/controller_icons/plugin.cfg
new file mode 100644
index 0000000..aab60f3
--- /dev/null
+++ b/source/addons/controller_icons/plugin.cfg
@@ -0,0 +1,7 @@
+[plugin]
+
+name="Controller Icons"
+description="Provides icons for all major controllers and keyboard, with automatic icon remapping."
+author="rsubtil"
+version="3.1.4"
+script="plugin.gd"
diff --git a/source/addons/controller_icons/plugin.gd b/source/addons/controller_icons/plugin.gd
new file mode 100644
index 0000000..eee93f1
--- /dev/null
+++ b/source/addons/controller_icons/plugin.gd
@@ -0,0 +1,19 @@
+@tool
+extends EditorPlugin
+
+var inspector_plugin : EditorInspectorPlugin
+
+func _enable_plugin():
+ add_autoload_singleton("ControllerIcons", "res://addons/controller_icons/ControllerIcons.gd")
+
+func _disable_plugin():
+ remove_autoload_singleton("ControllerIcons")
+
+func _enter_tree():
+ inspector_plugin = preload("res://addons/controller_icons/objects/ControllerIconEditorInspector.gd").new()
+ inspector_plugin.editor_interface = get_editor_interface()
+
+ add_inspector_plugin(inspector_plugin)
+
+func _exit_tree():
+ remove_inspector_plugin(inspector_plugin)
diff --git a/source/addons/controller_icons/plugin.gd.uid b/source/addons/controller_icons/plugin.gd.uid
new file mode 100644
index 0000000..cc4fde7
--- /dev/null
+++ b/source/addons/controller_icons/plugin.gd.uid
@@ -0,0 +1 @@
+uid://bsqucmpq12ybj
diff --git a/source/addons/controller_icons/settings.tres b/source/addons/controller_icons/settings.tres
new file mode 100644
index 0000000..eebffde
--- /dev/null
+++ b/source/addons/controller_icons/settings.tres
@@ -0,0 +1,12 @@
+[gd_resource type="Resource" script_class="ControllerSettings" load_steps=2 format=3 uid="uid://dolsrvh5w47et"]
+
+[ext_resource type="Script" uid="uid://dhd3vo6f4h2r" path="res://addons/controller_icons/Settings.gd" id="1"]
+
+[resource]
+script = ExtResource("1")
+joypad_fallback = 9
+joypad_deadzone = 0.5
+allow_mouse_remap = true
+mouse_min_movement = 200
+custom_asset_dir = ""
+custom_file_extension = ""
diff --git a/source/addons/logger/logger.gd b/source/addons/logger/logger.gd
index 00fbdd3..cddf1b0 100644
--- a/source/addons/logger/logger.gd
+++ b/source/addons/logger/logger.gd
@@ -1,26 +1,35 @@
extends CanvasLayer
enum ErrTypes { NORMAL, NORMAL_RICH, WARNING, ERROR }
+enum { NORMAL, NORMAL_RICH, WARNING, ERROR }
const DEFAULT_DURATION: float = 5.0
+const TYPE_TITLE_COLOR: String = "floral_white"#Color.FLORAL_WHITE.to_html()
@export_range(0, 1000, 1) var log_limit: int = 120
-var msg_list: PackedStringArray = []
var msg_uid: PackedInt32Array = []
+var msg_list: PackedStringArray = []
+var msgf_list: PackedStringArray = []
+var msgpf_list: PackedStringArray = []
@onready var log_label: RichTextLabel = $LogLabel
func _ready() -> void:
- if OS.has_feature("standalone"):
- hide()
-
-
-func print_msg(text: String, duration: float = DEFAULT_DURATION, type: ErrTypes = ErrTypes.NORMAL, color := Color.AQUA) -> void:
if not OS.is_debug_build():
+ hide()
return
-
+
+ RenderingServer.frame_post_draw.connect(_cleanup_frame_logs)
+
+
+func _physics_process(_delta: float) -> void:
+ if OS.is_debug_build():
+ _cleanup_physics_frame_logs()
+
+
+func print_msg(text: String, duration: float = DEFAULT_DURATION, type := NORMAL, color := Color.AQUA) -> void:
if msg_list.size() + 1 > log_limit:
if msg_list.is_empty(): # Don't do anything if the [param log_limit] is set to 0.
return
@@ -29,7 +38,7 @@ func print_msg(text: String, duration: float = DEFAULT_DURATION, type: ErrTypes
msg_uid.remove_at(0)
print_msg(text, duration, type, color)
return
-
+
var prefix: String = ""
match type:
ErrTypes.NORMAL_RICH:
@@ -41,19 +50,20 @@ func print_msg(text: String, duration: float = DEFAULT_DURATION, type: ErrTypes
push_error(text)
printerr(text)
prefix = str("[color=red][b]ERROR: [/b][/color]")
-
- # print messages into the log first before stoppingQ.
- if OS.has_feature("standalone"):
+
+ # Print messages into the log first before stopping.
+ if not OS.is_debug_build():
return
-
- text = str("%s[color=%s]%s[/color]" %[prefix, color.to_html(), text])
+
+ text = str("%s[color=%s]%s[/color]" % [prefix, color.to_html(), text])
msg_list.append(text)
-
+
var timer := Timer.new()
timer.one_shot = true
-
+ timer.ignore_time_scale = true
+
msg_uid.append(absi(timer.get_instance_id()))
-
+
timer.timeout.connect(func() -> void:
var uid: int = msg_uid.find(absi(timer.get_instance_id()))
if uid >= 0:
@@ -64,14 +74,27 @@ func print_msg(text: String, duration: float = DEFAULT_DURATION, type: ErrTypes
)
add_child(timer)
timer.start(duration if duration >= 0.0 else DEFAULT_DURATION)
-
+
_update_hud()
+func print_msgf(text: String, in_physics: bool = false, color := Color.AQUA) -> void:
+ if OS.is_debug_build():
+ text = str("[color=%s]%s[/color]" % [color.to_html(), text])
+
+ if in_physics:
+ msgpf_list.append(text)
+ else:
+ msgf_list.append(text)
+
+ _update_hud()
+
+
func clear_log() -> void:
msg_list.clear()
msg_uid.clear()
_update_hud()
+
# Remove the timers.
for i: Node in get_children():
if not i == log_label:
@@ -81,8 +104,36 @@ func clear_log() -> void:
func _update_hud() -> void:
if not self.is_node_ready():
await self.ready
-
- var text: String = "\n".join(msg_list) if not msg_list.is_empty() else ""
+
+ var text: String = ""
+
+ if not msg_list.is_empty():
+ text = "[color=%s]=== Normal Logs ===\n" %TYPE_TITLE_COLOR
+ text += "\n".join(msg_list) if not msg_list.is_empty() else "" # first regular messages.
+ text += "\n"
+
+ if not msgf_list.is_empty():
+ text += "[color=%s]=== Frame-Logs ===\n" %TYPE_TITLE_COLOR
+ text += "\n".join(msgf_list) if not msgf_list.is_empty() else "" # frame messages afterwards.
+ text += "\n"
+
+ if not msgpf_list.is_empty():
+ text += "[color=%s]=== Physics-Frame-Logs ===\n" %TYPE_TITLE_COLOR
+ text += "\n".join(msgpf_list) if not msgpf_list.is_empty() else "" # and now physics frames.
+
log_label.set_text(text)
- if msg_list.is_empty():
+
+ if msg_list.is_empty() and msgf_list.is_empty() and msgpf_list.is_empty():
log_label.clear()
+
+
+func _cleanup_frame_logs() -> void:
+ if not msgf_list.is_empty():
+ msgf_list.clear()
+ _update_hud()
+
+
+func _cleanup_physics_frame_logs() -> void:
+ if not msgpf_list.is_empty():
+ msgpf_list.clear()
+ _update_hud()
diff --git a/source/addons/logger/plugin.gd b/source/addons/logger/plugin.gd
index 3627a9b..3c92c37 100644
--- a/source/addons/logger/plugin.gd
+++ b/source/addons/logger/plugin.gd
@@ -3,8 +3,8 @@ extends EditorPlugin
func _enable_plugin() -> void:
- add_autoload_singleton("Logger", "res://addons/logger/logger.tscn")
+ add_autoload_singleton("SPrint", "res://addons/logger/logger.tscn")
func _disable_plugin() -> void:
- remove_autoload_singleton("Logger")
+ remove_autoload_singleton("SPrint")
diff --git a/source/addons/run-configs/editor/controls/configs_dropdown.gd.uid b/source/addons/run-configs/editor/controls/configs_dropdown.gd.uid
index 127e74d..7de1e9c 100644
--- a/source/addons/run-configs/editor/controls/configs_dropdown.gd.uid
+++ b/source/addons/run-configs/editor/controls/configs_dropdown.gd.uid
@@ -1 +1 @@
-uid://dqc6njw4s61ip
+uid://u7jd18tlgdox
diff --git a/source/addons/run-configs/editor/controls/configs_editor/configs_editor.gd b/source/addons/run-configs/editor/controls/configs_editor/configs_editor.gd
index 8a8467d..fc1c03c 100644
--- a/source/addons/run-configs/editor/controls/configs_editor/configs_editor.gd
+++ b/source/addons/run-configs/editor/controls/configs_editor/configs_editor.gd
@@ -41,7 +41,7 @@ func _ready():
name_edit.text_changed.connect(func(text): _update_value(&"name", text))
play_mode_edit.item_selected.connect(func(ind): _update_value(&"play_mode", ind))
custom_scene_edit.pressed.connect(func(): file_dialog.popup_centered_ratio())
- file_dialog.file_selected.connect(func(file): _update_value(&"custom_scene", file))
+ file_dialog.file_selected.connect(func(file): _update_value(&"custom_scene", ResourceUID.id_to_text(ResourceLoader.get_resource_uid(file))))
env_edit.changed.connect(func(envs): _update_value(&"environment_variables", envs))
confirmed.connect(func(): ConfigsManager.set_configs(configs))
@@ -118,7 +118,7 @@ func _render_form(ind: int):
# Play mode
play_mode_edit.select(config.play_mode)
# Custom scene
- custom_scene_edit.text = config.custom_scene
+ custom_scene_edit.text = ResourceUID.get_id_path(ResourceUID.text_to_id(config.custom_scene))
if custom_scene_edit.text.is_empty():
custom_scene_edit.text = "Choose a scene..."
custom_scene_edit.visible = config.play_mode == RunConfig.PlayMode.CustomScene
@@ -132,8 +132,7 @@ func _update_value(property: StringName, value):
elif property == &"play_mode":
custom_scene_edit.visible = value == int(RunConfig.PlayMode.CustomScene)
elif property == &"custom_scene":
- custom_scene_edit.text = value
+ custom_scene_edit.text = ResourceUID.get_id_path(ResourceUID.text_to_id(value))#value
var config := configs[selected]
config.set(property, value)
-
diff --git a/source/addons/run-configs/editor/controls/configs_editor/configs_editor.gd.uid b/source/addons/run-configs/editor/controls/configs_editor/configs_editor.gd.uid
index be72327..cde4957 100644
--- a/source/addons/run-configs/editor/controls/configs_editor/configs_editor.gd.uid
+++ b/source/addons/run-configs/editor/controls/configs_editor/configs_editor.gd.uid
@@ -1 +1 @@
-uid://lnx4u4yhkg1o
+uid://dhiqk5503w0lt
diff --git a/source/addons/run-configs/editor/controls/configs_editor/configs_editor.tscn b/source/addons/run-configs/editor/controls/configs_editor/configs_editor.tscn
index 00793b8..a6542ec 100644
--- a/source/addons/run-configs/editor/controls/configs_editor/configs_editor.tscn
+++ b/source/addons/run-configs/editor/controls/configs_editor/configs_editor.tscn
@@ -1,19 +1,19 @@
[gd_scene load_steps=10 format=3 uid="uid://dso1w1uqfsxmi"]
-[ext_resource type="Script" uid="uid://bcaa1qlb4eiqc" path="res://addons/run-configs/editor/controls/configs_editor/play_mode_dropdown.gd" id="1_bhvuh"]
-[ext_resource type="Script" uid="uid://lnx4u4yhkg1o" path="res://addons/run-configs/editor/controls/configs_editor/configs_editor.gd" id="1_ldnip"]
-[ext_resource type="Script" uid="uid://jbxwvla3sahm" path="res://addons/run-configs/editor/controls/configs_editor/env_editor.gd" id="3_2bcxm"]
+[ext_resource type="Script" uid="uid://cg6ngut63jr6r" path="res://addons/run-configs/editor/controls/configs_editor/play_mode_dropdown.gd" id="1_bhvuh"]
+[ext_resource type="Script" uid="uid://dhiqk5503w0lt" path="res://addons/run-configs/editor/controls/configs_editor/configs_editor.gd" id="1_ldnip"]
+[ext_resource type="Script" uid="uid://bwkwi1qmjikhr" path="res://addons/run-configs/editor/controls/configs_editor/env_editor.gd" id="3_2bcxm"]
[sub_resource type="Image" id="Image_pdc0p"]
data = {
-"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 94, 94, 127, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 231, 255, 94, 94, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 93, 93, 41, 255, 255, 255, 0, 255, 255, 255, 0, 255, 97, 97, 42, 255, 93, 93, 233, 255, 93, 93, 232, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 44, 255, 255, 255, 0, 255, 97, 97, 42, 255, 97, 97, 42, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 96, 96, 45, 255, 93, 93, 235, 255, 94, 94, 234, 255, 95, 95, 43, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 93, 93, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 95, 95, 59, 255, 96, 96, 61, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0),
+"data": PackedByteArray(255, 93, 93, 0, 255, 93, 93, 0, 255, 93, 93, 0, 255, 93, 93, 0, 255, 93, 93, 0, 255, 93, 93, 0, 255, 93, 93, 0, 255, 93, 93, 0, 255, 93, 93, 0, 255, 93, 93, 0, 255, 92, 92, 0, 255, 92, 92, 0, 255, 92, 92, 0, 255, 92, 92, 0, 255, 92, 92, 0, 255, 92, 92, 0, 255, 93, 93, 0, 255, 93, 93, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 0, 255, 92, 92, 127, 255, 92, 92, 0, 255, 92, 92, 0, 255, 92, 92, 0, 255, 92, 92, 0, 255, 92, 92, 0, 255, 93, 93, 0, 255, 93, 93, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 0, 255, 93, 93, 255, 255, 92, 92, 127, 255, 92, 92, 0, 255, 92, 92, 0, 255, 92, 92, 0, 255, 92, 92, 0, 255, 93, 93, 0, 255, 93, 93, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 92, 92, 127, 255, 92, 92, 0, 255, 92, 92, 0, 255, 92, 92, 0, 255, 93, 93, 0, 255, 93, 93, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 92, 92, 127, 255, 92, 92, 0, 255, 92, 92, 0, 255, 93, 93, 0, 255, 93, 93, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 0, 255, 93, 93, 0, 255, 93, 93, 0, 255, 93, 93, 0, 255, 92, 92, 0, 255, 92, 92, 0, 255, 92, 92, 0, 255, 93, 93, 0, 255, 93, 93, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 0, 255, 93, 93, 0, 255, 93, 93, 0, 255, 93, 93, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 0, 255, 93, 93, 0, 255, 93, 93, 0, 255, 93, 93, 0, 255, 93, 93, 231, 255, 90, 90, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 231, 255, 90, 90, 54, 255, 94, 94, 57, 255, 93, 93, 233, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 0, 255, 93, 93, 0, 255, 91, 91, 0, 255, 91, 91, 0, 255, 91, 91, 42, 255, 90, 90, 0, 255, 94, 94, 0, 255, 91, 91, 42, 255, 93, 93, 233, 255, 92, 92, 232, 255, 93, 93, 41, 255, 90, 90, 0, 255, 94, 94, 0, 255, 91, 91, 42, 255, 93, 93, 233, 255, 92, 92, 232, 255, 92, 92, 0, 255, 92, 92, 0, 255, 91, 91, 0, 255, 91, 91, 0, 255, 91, 91, 0, 255, 91, 91, 45, 255, 93, 93, 44, 255, 91, 91, 0, 255, 91, 91, 42, 255, 91, 91, 42, 255, 93, 93, 0, 255, 91, 91, 45, 255, 93, 93, 44, 255, 91, 91, 0, 255, 91, 91, 42, 255, 91, 91, 42, 255, 91, 91, 0, 255, 91, 91, 0, 255, 91, 91, 0, 255, 91, 91, 0, 255, 91, 91, 45, 255, 92, 92, 235, 255, 92, 92, 234, 255, 89, 89, 43, 255, 91, 91, 0, 255, 91, 91, 0, 255, 91, 91, 45, 255, 92, 92, 235, 255, 92, 92, 234, 255, 89, 89, 43, 255, 91, 91, 0, 255, 91, 91, 0, 255, 91, 91, 0, 255, 91, 91, 0, 255, 92, 92, 0, 255, 92, 92, 0, 255, 92, 92, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 91, 91, 59, 255, 92, 92, 61, 255, 92, 92, 235, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 233, 255, 91, 91, 59, 255, 92, 92, 61, 255, 92, 92, 0, 255, 92, 92, 0, 255, 93, 93, 0, 255, 93, 93, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 0, 255, 93, 93, 0, 255, 93, 93, 0, 255, 93, 93, 0, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 255, 255, 93, 93, 0, 255, 93, 93, 0, 255, 93, 93, 0, 255, 93, 93, 0, 255, 93, 93, 0, 255, 93, 93, 0, 255, 93, 93, 0, 255, 93, 93, 0, 255, 93, 93, 0, 255, 93, 93, 0, 255, 93, 93, 0, 255, 93, 93, 0, 255, 93, 93, 0, 255, 93, 93, 0, 255, 93, 93, 0, 255, 93, 93, 0, 255, 93, 93, 0, 255, 93, 93, 0),
"format": "RGBA8",
"height": 16,
"mipmaps": false,
"width": 16
}
-[sub_resource type="ImageTexture" id="ImageTexture_hfgpw"]
+[sub_resource type="ImageTexture" id="ImageTexture_dcipr"]
image = SubResource("Image_pdc0p")
[sub_resource type="GDScript" id="GDScript_knwq4"]
@@ -60,7 +60,7 @@ script = ExtResource("1_ldnip")
offset_left = 8.0
offset_top = 8.0
offset_right = 690.0
-offset_bottom = 351.0
+offset_bottom = 348.0
theme_override_constants/margin_left = 8
theme_override_constants/margin_top = 8
theme_override_constants/margin_right = 8
@@ -78,14 +78,14 @@ layout_mode = 2
unique_name_in_owner = true
layout_mode = 2
tooltip_text = "Add a new config"
-icon = SubResource("ImageTexture_hfgpw")
+icon = SubResource("ImageTexture_dcipr")
script = SubResource("GDScript_knwq4")
[node name="RemoveConfig" type="Button" parent="MarginContainer/ConfigsEditor/HBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
tooltip_text = "Remove selected config"
-icon = SubResource("ImageTexture_hfgpw")
+icon = SubResource("ImageTexture_dcipr")
script = SubResource("GDScript_b2o0p")
[node name="HSplitContainer" type="HSplitContainer" parent="MarginContainer/ConfigsEditor"]
@@ -143,16 +143,16 @@ size_flags_horizontal = 3
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
-item_count = 3
selected = 0
+item_count = 3
popup/item_0/text = "Main Scene"
-popup/item_0/icon = SubResource("ImageTexture_hfgpw")
+popup/item_0/icon = SubResource("ImageTexture_dcipr")
popup/item_0/id = 0
popup/item_1/text = "Current Scene"
-popup/item_1/icon = SubResource("ImageTexture_hfgpw")
+popup/item_1/icon = SubResource("ImageTexture_dcipr")
popup/item_1/id = 1
popup/item_2/text = "Custom Scene"
-popup/item_2/icon = SubResource("ImageTexture_hfgpw")
+popup/item_2/icon = SubResource("ImageTexture_dcipr")
popup/item_2/id = 2
script = ExtResource("1_bhvuh")
@@ -162,7 +162,7 @@ visible = false
layout_mode = 2
size_flags_horizontal = 3
text = "Choose a scene..."
-icon = SubResource("ImageTexture_hfgpw")
+icon = SubResource("ImageTexture_dcipr")
script = SubResource("GDScript_fhb5p")
[node name="Env" type="Label" parent="MarginContainer/ConfigsEditor/HSplitContainer/ScrollContainer/PanelContainer/Form"]
@@ -185,7 +185,7 @@ columns = 3
layout_mode = 2
size_flags_horizontal = 8
text = "New Variable"
-icon = SubResource("ImageTexture_hfgpw")
+icon = SubResource("ImageTexture_dcipr")
script = SubResource("GDScript_ggysl")
[node name="Hint" type="Label" parent="MarginContainer/ConfigsEditor/HSplitContainer/ScrollContainer/PanelContainer"]
diff --git a/source/addons/run-configs/editor/controls/configs_editor/env_editor.gd.uid b/source/addons/run-configs/editor/controls/configs_editor/env_editor.gd.uid
index 029282c..7f39e0d 100644
--- a/source/addons/run-configs/editor/controls/configs_editor/env_editor.gd.uid
+++ b/source/addons/run-configs/editor/controls/configs_editor/env_editor.gd.uid
@@ -1 +1 @@
-uid://jbxwvla3sahm
+uid://bwkwi1qmjikhr
diff --git a/source/addons/run-configs/editor/controls/configs_editor/play_mode_dropdown.gd.uid b/source/addons/run-configs/editor/controls/configs_editor/play_mode_dropdown.gd.uid
index 93781f7..adde620 100644
--- a/source/addons/run-configs/editor/controls/configs_editor/play_mode_dropdown.gd.uid
+++ b/source/addons/run-configs/editor/controls/configs_editor/play_mode_dropdown.gd.uid
@@ -1 +1 @@
-uid://bcaa1qlb4eiqc
+uid://cg6ngut63jr6r
diff --git a/source/addons/run-configs/editor/lib/inspector_plugin.gd b/source/addons/run-configs/editor/lib/inspector_plugin.gd
index 35d22cb..cc67c92 100644
--- a/source/addons/run-configs/editor/lib/inspector_plugin.gd
+++ b/source/addons/run-configs/editor/lib/inspector_plugin.gd
@@ -17,5 +17,3 @@ func _can_handle(object):
#add_custom_control(delete_button)
#
#return false
-
-
diff --git a/source/addons/run-configs/editor/lib/inspector_plugin.gd.uid b/source/addons/run-configs/editor/lib/inspector_plugin.gd.uid
index ddf3749..bc3cba9 100644
--- a/source/addons/run-configs/editor/lib/inspector_plugin.gd.uid
+++ b/source/addons/run-configs/editor/lib/inspector_plugin.gd.uid
@@ -1 +1 @@
-uid://b7ke22bl7wbjb
+uid://bon40hdwtlrt1
diff --git a/source/addons/run-configs/editor/lib/run_configs_core.gd b/source/addons/run-configs/editor/lib/run_configs_core.gd
index 08c9125..05d1e01 100644
--- a/source/addons/run-configs/editor/lib/run_configs_core.gd
+++ b/source/addons/run-configs/editor/lib/run_configs_core.gd
@@ -1,2 +1 @@
extends Object
-
diff --git a/source/addons/run-configs/editor/lib/run_configs_core.gd.uid b/source/addons/run-configs/editor/lib/run_configs_core.gd.uid
index 9380f0f..1b2f171 100644
--- a/source/addons/run-configs/editor/lib/run_configs_core.gd.uid
+++ b/source/addons/run-configs/editor/lib/run_configs_core.gd.uid
@@ -1 +1 @@
-uid://2x1422qq2ri4
+uid://ds836xl4hmfvr
diff --git a/source/addons/run-configs/editor/lib/ui_extension.gd.uid b/source/addons/run-configs/editor/lib/ui_extension.gd.uid
index f437b2c..2fb2dec 100644
--- a/source/addons/run-configs/editor/lib/ui_extension.gd.uid
+++ b/source/addons/run-configs/editor/lib/ui_extension.gd.uid
@@ -1 +1 @@
-uid://bbesk76sfnnbb
+uid://5825j6321fuo
diff --git a/source/addons/run-configs/editor/plugin.gd b/source/addons/run-configs/editor/plugin.gd
index 4f48ee3..d67a4b9 100644
--- a/source/addons/run-configs/editor/plugin.gd
+++ b/source/addons/run-configs/editor/plugin.gd
@@ -75,7 +75,16 @@ func _play_scene():
RunConfig.PlayMode.CurrentScene:
EditorInterface.play_current_scene()
RunConfig.PlayMode.CustomScene:
- var scene := config.custom_scene
+ var scene: String = config.custom_scene
+
+ if scene.begins_with("uid://"):
+ var uid: int = ResourceLoader.get_resource_uid(scene)
+ if uid == -1 or not ResourceUID.has_id(uid):
+ print_debug("ID '%s' does not exist." %uid)
+ return
+
+ scene = ResourceUID.get_id_path(uid)
+
EditorInterface.play_custom_scene(scene)
diff --git a/source/addons/run-configs/editor/plugin.gd.uid b/source/addons/run-configs/editor/plugin.gd.uid
index 6fcfc7b..b66ffa2 100644
--- a/source/addons/run-configs/editor/plugin.gd.uid
+++ b/source/addons/run-configs/editor/plugin.gd.uid
@@ -1 +1 @@
-uid://ddncwkdw8ojw4
+uid://d3g8hbliy0wx0
diff --git a/source/addons/run-configs/models/run_config.gd.uid b/source/addons/run-configs/models/run_config.gd.uid
index d1d222f..e4fcc18 100644
--- a/source/addons/run-configs/models/run_config.gd.uid
+++ b/source/addons/run-configs/models/run_config.gd.uid
@@ -1 +1 @@
-uid://cjxx8el154bw5
+uid://byy5qcousbjhx
diff --git a/source/addons/run-configs/run-config-manager.gd.uid b/source/addons/run-configs/run-config-manager.gd.uid
index 51f5a99..a549370 100644
--- a/source/addons/run-configs/run-config-manager.gd.uid
+++ b/source/addons/run-configs/run-config-manager.gd.uid
@@ -1 +1 @@
-uid://dvfrocown7eqd
+uid://bn7lqhkjw6kvv
diff --git a/source/assets/audio/ambient/dark_house.wav b/source/assets/audio/ambient/dark_house.wav
new file mode 100644
index 0000000..231ea54
Binary files /dev/null and b/source/assets/audio/ambient/dark_house.wav differ
diff --git a/source/assets/audio/ambient/dark_house.wav.import b/source/assets/audio/ambient/dark_house.wav.import
new file mode 100644
index 0000000..ad49e79
--- /dev/null
+++ b/source/assets/audio/ambient/dark_house.wav.import
@@ -0,0 +1,24 @@
+[remap]
+
+importer="wav"
+type="AudioStreamWAV"
+uid="uid://cyxvsy5wjxhl7"
+path="res://.godot/imported/dark_house.wav-e345a7ff02f69a189e29d97db0d42293.sample"
+
+[deps]
+
+source_file="res://assets/audio/ambient/dark_house.wav"
+dest_files=["res://.godot/imported/dark_house.wav-e345a7ff02f69a189e29d97db0d42293.sample"]
+
+[params]
+
+force/8_bit=false
+force/mono=false
+force/max_rate=false
+force/max_rate_hz=44100
+edit/trim=false
+edit/normalize=false
+edit/loop_mode=0
+edit/loop_begin=0
+edit/loop_end=-1
+compress/mode=2
diff --git a/source/assets/materials/dev/LICENSE.txt b/source/assets/materials/dev/LICENSE.txt
new file mode 100644
index 0000000..839f104
--- /dev/null
+++ b/source/assets/materials/dev/LICENSE.txt
@@ -0,0 +1,23 @@
+
+
+ Prototype Textures 1.0
+
+ Created/distributed by Kenney (www.kenney.nl)
+ Creation date: 08-04-2020
+
+ ------------------------------
+
+ License: (Creative Commons Zero, CC0)
+ http://creativecommons.org/publicdomain/zero/1.0/
+
+ This content is free to use in personal, educational and commercial projects.
+ Support us by crediting Kenney or www.kenney.nl (this is not mandatory)
+
+ ------------------------------
+
+ Donate: http://support.kenney.nl
+ Request: http://request.kenney.nl
+ Patreon: http://patreon.com/kenney/
+
+ Follow on Twitter for updates:
+ http://twitter.com/KenneyNL
diff --git a/source/assets/materials/dev/dark/dark_01.tres b/source/assets/materials/dev/dark/dark_01.tres
new file mode 100644
index 0000000..abfea70
--- /dev/null
+++ b/source/assets/materials/dev/dark/dark_01.tres
@@ -0,0 +1,8 @@
+[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://c38215ysnknyk"]
+
+[ext_resource type="Texture2D" uid="uid://d4m1r5bjq4lbe" path="res://addons/kenney_prototype_textures/dark/texture_01.png" id="1_38xbi"]
+
+[resource]
+albedo_texture = ExtResource("1_38xbi")
+uv1_triplanar = true
+uv1_world_triplanar = true
diff --git a/source/assets/materials/dev/dark/dark_02.tres b/source/assets/materials/dev/dark/dark_02.tres
new file mode 100644
index 0000000..56cac43
--- /dev/null
+++ b/source/assets/materials/dev/dark/dark_02.tres
@@ -0,0 +1,8 @@
+[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://olxux7okrb2b"]
+
+[ext_resource type="Texture2D" uid="uid://c8a1v7bw3jjca" path="res://addons/kenney_prototype_textures/dark/texture_02.png" id="1_jl162"]
+
+[resource]
+albedo_texture = ExtResource("1_jl162")
+uv1_triplanar = true
+uv1_world_triplanar = true
diff --git a/source/assets/materials/dev/dark/dark_03.tres b/source/assets/materials/dev/dark/dark_03.tres
new file mode 100644
index 0000000..ea660cf
--- /dev/null
+++ b/source/assets/materials/dev/dark/dark_03.tres
@@ -0,0 +1,8 @@
+[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://blkew2hja11cj"]
+
+[ext_resource type="Texture2D" uid="uid://crgcp76xdixb" path="res://addons/kenney_prototype_textures/dark/texture_03.png" id="1_t7bo5"]
+
+[resource]
+albedo_texture = ExtResource("1_t7bo5")
+uv1_triplanar = true
+uv1_world_triplanar = true
diff --git a/source/assets/materials/dev/dark/dark_04.tres b/source/assets/materials/dev/dark/dark_04.tres
new file mode 100644
index 0000000..91bbb4b
--- /dev/null
+++ b/source/assets/materials/dev/dark/dark_04.tres
@@ -0,0 +1,8 @@
+[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://biu40ot7f55no"]
+
+[ext_resource type="Texture2D" uid="uid://djftxgnhedhk2" path="res://addons/kenney_prototype_textures/dark/texture_05.png" id="1_l8w0p"]
+
+[resource]
+albedo_texture = ExtResource("1_l8w0p")
+uv1_triplanar = true
+uv1_world_triplanar = true
diff --git a/source/assets/materials/dev/dark/dark_05.tres b/source/assets/materials/dev/dark/dark_05.tres
new file mode 100644
index 0000000..be37937
--- /dev/null
+++ b/source/assets/materials/dev/dark/dark_05.tres
@@ -0,0 +1,8 @@
+[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://dto0mke6wp060"]
+
+[ext_resource type="Texture2D" uid="uid://d4m1r5bjq4lbe" path="res://assets/materials/dev/dark/texture_01.png" id="1_c2346"]
+
+[resource]
+albedo_texture = ExtResource("1_c2346")
+uv1_triplanar = true
+uv1_world_triplanar = true
diff --git a/source/assets/materials/dev/dark/texture_01.png b/source/assets/materials/dev/dark/texture_01.png
new file mode 100644
index 0000000..14a9811
Binary files /dev/null and b/source/assets/materials/dev/dark/texture_01.png differ
diff --git a/source/assets/materials/dev/dark/texture_01.png.import b/source/assets/materials/dev/dark/texture_01.png.import
new file mode 100644
index 0000000..5816e10
--- /dev/null
+++ b/source/assets/materials/dev/dark/texture_01.png.import
@@ -0,0 +1,41 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://d4m1r5bjq4lbe"
+path.s3tc="res://.godot/imported/texture_01.png-aba0e9918c8eba6eb8a49d92ee9100af.s3tc.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc"],
+"vram_texture": true
+}
+
+[deps]
+
+source_file="res://assets/materials/dev/dark/texture_01.png"
+dest_files=["res://.godot/imported/texture_01.png-aba0e9918c8eba6eb8a49d92ee9100af.s3tc.ctex"]
+
+[params]
+
+compress/mode=2
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=true
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+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=0
diff --git a/source/assets/materials/dev/dark/texture_02.png b/source/assets/materials/dev/dark/texture_02.png
new file mode 100644
index 0000000..d6a2a21
Binary files /dev/null and b/source/assets/materials/dev/dark/texture_02.png differ
diff --git a/source/assets/materials/dev/dark/texture_02.png.import b/source/assets/materials/dev/dark/texture_02.png.import
new file mode 100644
index 0000000..2a5484c
--- /dev/null
+++ b/source/assets/materials/dev/dark/texture_02.png.import
@@ -0,0 +1,41 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c8a1v7bw3jjca"
+path.s3tc="res://.godot/imported/texture_02.png-a00a8d9ba2d4c105cb18262d7442c588.s3tc.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc"],
+"vram_texture": true
+}
+
+[deps]
+
+source_file="res://assets/materials/dev/dark/texture_02.png"
+dest_files=["res://.godot/imported/texture_02.png-a00a8d9ba2d4c105cb18262d7442c588.s3tc.ctex"]
+
+[params]
+
+compress/mode=2
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=true
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+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=0
diff --git a/source/assets/materials/dev/dark/texture_03.png b/source/assets/materials/dev/dark/texture_03.png
new file mode 100644
index 0000000..4aa482d
Binary files /dev/null and b/source/assets/materials/dev/dark/texture_03.png differ
diff --git a/source/assets/materials/dev/dark/texture_03.png.import b/source/assets/materials/dev/dark/texture_03.png.import
new file mode 100644
index 0000000..5acefff
--- /dev/null
+++ b/source/assets/materials/dev/dark/texture_03.png.import
@@ -0,0 +1,41 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://crgcp76xdixb"
+path.s3tc="res://.godot/imported/texture_03.png-e607e9013e8c80d0f4f75e92f7227c73.s3tc.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc"],
+"vram_texture": true
+}
+
+[deps]
+
+source_file="res://assets/materials/dev/dark/texture_03.png"
+dest_files=["res://.godot/imported/texture_03.png-e607e9013e8c80d0f4f75e92f7227c73.s3tc.ctex"]
+
+[params]
+
+compress/mode=2
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=true
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+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=0
diff --git a/source/assets/materials/dev/dark/texture_04.png b/source/assets/materials/dev/dark/texture_04.png
new file mode 100644
index 0000000..1e0a8f9
Binary files /dev/null and b/source/assets/materials/dev/dark/texture_04.png differ
diff --git a/source/assets/materials/dev/dark/texture_04.png.import b/source/assets/materials/dev/dark/texture_04.png.import
new file mode 100644
index 0000000..5a0a7df
--- /dev/null
+++ b/source/assets/materials/dev/dark/texture_04.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://wb1xv8sdexfr"
+path="res://.godot/imported/texture_04.png-4b09c21ec68265a6294a378819b8fe04.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/materials/dev/dark/texture_04.png"
+dest_files=["res://.godot/imported/texture_04.png-4b09c21ec68265a6294a378819b8fe04.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+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/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+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/source/assets/materials/dev/dark/texture_05.png b/source/assets/materials/dev/dark/texture_05.png
new file mode 100644
index 0000000..cd01f8c
Binary files /dev/null and b/source/assets/materials/dev/dark/texture_05.png differ
diff --git a/source/assets/materials/dev/dark/texture_05.png.import b/source/assets/materials/dev/dark/texture_05.png.import
new file mode 100644
index 0000000..7e3acd4
--- /dev/null
+++ b/source/assets/materials/dev/dark/texture_05.png.import
@@ -0,0 +1,41 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://djftxgnhedhk2"
+path.s3tc="res://.godot/imported/texture_05.png-9b81e05a6c20f434431c7a0bfba59478.s3tc.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc"],
+"vram_texture": true
+}
+
+[deps]
+
+source_file="res://assets/materials/dev/dark/texture_05.png"
+dest_files=["res://.godot/imported/texture_05.png-9b81e05a6c20f434431c7a0bfba59478.s3tc.ctex"]
+
+[params]
+
+compress/mode=2
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=true
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+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=0
diff --git a/source/assets/materials/dev/dark/texture_06.png b/source/assets/materials/dev/dark/texture_06.png
new file mode 100644
index 0000000..4e8f53c
Binary files /dev/null and b/source/assets/materials/dev/dark/texture_06.png differ
diff --git a/source/assets/materials/dev/dark/texture_06.png.import b/source/assets/materials/dev/dark/texture_06.png.import
new file mode 100644
index 0000000..6c50406
--- /dev/null
+++ b/source/assets/materials/dev/dark/texture_06.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dsbjfpq4h186s"
+path="res://.godot/imported/texture_06.png-a8ec88563536d745d9aff5c8c5f332d9.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/materials/dev/dark/texture_06.png"
+dest_files=["res://.godot/imported/texture_06.png-a8ec88563536d745d9aff5c8c5f332d9.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+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/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+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/source/assets/materials/dev/dark/texture_07.png b/source/assets/materials/dev/dark/texture_07.png
new file mode 100644
index 0000000..d00973e
Binary files /dev/null and b/source/assets/materials/dev/dark/texture_07.png differ
diff --git a/source/assets/materials/dev/dark/texture_07.png.import b/source/assets/materials/dev/dark/texture_07.png.import
new file mode 100644
index 0000000..2fc0f9c
--- /dev/null
+++ b/source/assets/materials/dev/dark/texture_07.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://imys240py8qq"
+path="res://.godot/imported/texture_07.png-cbaaf9a180c727bc51e5f113361e34ae.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/materials/dev/dark/texture_07.png"
+dest_files=["res://.godot/imported/texture_07.png-cbaaf9a180c727bc51e5f113361e34ae.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+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/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+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/source/assets/materials/dev/dark/texture_08.png b/source/assets/materials/dev/dark/texture_08.png
new file mode 100644
index 0000000..72dd6c0
Binary files /dev/null and b/source/assets/materials/dev/dark/texture_08.png differ
diff --git a/source/assets/materials/dev/dark/texture_08.png.import b/source/assets/materials/dev/dark/texture_08.png.import
new file mode 100644
index 0000000..dc71988
--- /dev/null
+++ b/source/assets/materials/dev/dark/texture_08.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dnbq4ggpxwn46"
+path="res://.godot/imported/texture_08.png-30cb1f02a3c45adba715736c2315d87f.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/materials/dev/dark/texture_08.png"
+dest_files=["res://.godot/imported/texture_08.png-30cb1f02a3c45adba715736c2315d87f.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+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/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+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/source/assets/materials/dev/dark/texture_09.png b/source/assets/materials/dev/dark/texture_09.png
new file mode 100644
index 0000000..e81fa1a
Binary files /dev/null and b/source/assets/materials/dev/dark/texture_09.png differ
diff --git a/source/assets/materials/dev/dark/texture_09.png.import b/source/assets/materials/dev/dark/texture_09.png.import
new file mode 100644
index 0000000..8605935
--- /dev/null
+++ b/source/assets/materials/dev/dark/texture_09.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bytpcdyiq6qa4"
+path="res://.godot/imported/texture_09.png-6a18a0724155808d3e35320c84f7145b.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/materials/dev/dark/texture_09.png"
+dest_files=["res://.godot/imported/texture_09.png-6a18a0724155808d3e35320c84f7145b.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+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/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+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/source/assets/materials/dev/dark/texture_10.png b/source/assets/materials/dev/dark/texture_10.png
new file mode 100644
index 0000000..682088c
Binary files /dev/null and b/source/assets/materials/dev/dark/texture_10.png differ
diff --git a/source/assets/materials/dev/dark/texture_10.png.import b/source/assets/materials/dev/dark/texture_10.png.import
new file mode 100644
index 0000000..4e0ec65
--- /dev/null
+++ b/source/assets/materials/dev/dark/texture_10.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dcyqa0jit74px"
+path="res://.godot/imported/texture_10.png-1802701632e04bcdd1a75a2d5f86ec20.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/materials/dev/dark/texture_10.png"
+dest_files=["res://.godot/imported/texture_10.png-1802701632e04bcdd1a75a2d5f86ec20.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+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/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+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/source/assets/materials/dev/dark/texture_11.png b/source/assets/materials/dev/dark/texture_11.png
new file mode 100644
index 0000000..f0571a1
Binary files /dev/null and b/source/assets/materials/dev/dark/texture_11.png differ
diff --git a/source/assets/materials/dev/dark/texture_11.png.import b/source/assets/materials/dev/dark/texture_11.png.import
new file mode 100644
index 0000000..cd7460d
--- /dev/null
+++ b/source/assets/materials/dev/dark/texture_11.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://vh6eyixeolo3"
+path="res://.godot/imported/texture_11.png-e7d21c3c0fafae0cca2f0eb658085580.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/materials/dev/dark/texture_11.png"
+dest_files=["res://.godot/imported/texture_11.png-e7d21c3c0fafae0cca2f0eb658085580.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+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/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+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/source/assets/materials/dev/dark/texture_12.png b/source/assets/materials/dev/dark/texture_12.png
new file mode 100644
index 0000000..b797dbe
Binary files /dev/null and b/source/assets/materials/dev/dark/texture_12.png differ
diff --git a/source/assets/materials/dev/dark/texture_12.png.import b/source/assets/materials/dev/dark/texture_12.png.import
new file mode 100644
index 0000000..0810100
--- /dev/null
+++ b/source/assets/materials/dev/dark/texture_12.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cxuwgnmqxuvys"
+path="res://.godot/imported/texture_12.png-8293507bcff86e8eecd83a69c0c071cd.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/materials/dev/dark/texture_12.png"
+dest_files=["res://.godot/imported/texture_12.png-8293507bcff86e8eecd83a69c0c071cd.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+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/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+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/source/assets/materials/dev/dark/texture_13.png b/source/assets/materials/dev/dark/texture_13.png
new file mode 100644
index 0000000..6e8aff4
Binary files /dev/null and b/source/assets/materials/dev/dark/texture_13.png differ
diff --git a/source/assets/materials/dev/dark/texture_13.png.import b/source/assets/materials/dev/dark/texture_13.png.import
new file mode 100644
index 0000000..c10edcb
--- /dev/null
+++ b/source/assets/materials/dev/dark/texture_13.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dw3af4ir446rk"
+path="res://.godot/imported/texture_13.png-0710b1716fe2c46a85d4d21fb66c969c.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/materials/dev/dark/texture_13.png"
+dest_files=["res://.godot/imported/texture_13.png-0710b1716fe2c46a85d4d21fb66c969c.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+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/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+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/source/assets/materials/dev/orange/orange_01.tres b/source/assets/materials/dev/orange/orange_01.tres
new file mode 100644
index 0000000..336047a
--- /dev/null
+++ b/source/assets/materials/dev/orange/orange_01.tres
@@ -0,0 +1,8 @@
+[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://bahys2ntbh2ap"]
+
+[ext_resource type="Texture2D" uid="uid://g26nr5u8081t" path="res://addons/kenney_prototype_textures/orange/texture_01.png" id="1_vb3n0"]
+
+[resource]
+albedo_texture = ExtResource("1_vb3n0")
+uv1_triplanar = true
+uv1_world_triplanar = true
diff --git a/source/assets/materials/dev/orange/orange_02.tres b/source/assets/materials/dev/orange/orange_02.tres
new file mode 100644
index 0000000..00730b0
--- /dev/null
+++ b/source/assets/materials/dev/orange/orange_02.tres
@@ -0,0 +1,8 @@
+[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://r527wj0qbkvs"]
+
+[ext_resource type="Texture2D" uid="uid://12e0onm52r6b" path="res://addons/kenney_prototype_textures/orange/texture_02.png" id="1_4qkig"]
+
+[resource]
+albedo_texture = ExtResource("1_4qkig")
+uv1_triplanar = true
+uv1_world_triplanar = true
diff --git a/source/assets/materials/dev/orange/orange_03.tres b/source/assets/materials/dev/orange/orange_03.tres
new file mode 100644
index 0000000..d2261d8
--- /dev/null
+++ b/source/assets/materials/dev/orange/orange_03.tres
@@ -0,0 +1,8 @@
+[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://diwfj3ywaniq5"]
+
+[ext_resource type="Texture2D" uid="uid://eemth84vpstv" path="res://addons/kenney_prototype_textures/orange/texture_03.png" id="1_fipy7"]
+
+[resource]
+albedo_texture = ExtResource("1_fipy7")
+uv1_triplanar = true
+uv1_world_triplanar = true
diff --git a/source/assets/materials/dev/orange/orange_04.tres b/source/assets/materials/dev/orange/orange_04.tres
new file mode 100644
index 0000000..3362851
--- /dev/null
+++ b/source/assets/materials/dev/orange/orange_04.tres
@@ -0,0 +1,8 @@
+[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://bwbwqb84pmji3"]
+
+[ext_resource type="Texture2D" uid="uid://bgj70nov05sqo" path="res://addons/kenney_prototype_textures/orange/texture_04.png" id="1_mje5s"]
+
+[resource]
+albedo_texture = ExtResource("1_mje5s")
+uv1_triplanar = true
+uv1_world_triplanar = true
diff --git a/source/assets/materials/dev/orange/orange_05.tres b/source/assets/materials/dev/orange/orange_05.tres
new file mode 100644
index 0000000..c6949e8
--- /dev/null
+++ b/source/assets/materials/dev/orange/orange_05.tres
@@ -0,0 +1,8 @@
+[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://d02jll28bgkap"]
+
+[ext_resource type="Texture2D" uid="uid://5erjqyy4c7xn" path="res://addons/kenney_prototype_textures/orange/texture_05.png" id="1_phgo0"]
+
+[resource]
+albedo_texture = ExtResource("1_phgo0")
+uv1_triplanar = true
+uv1_world_triplanar = true
diff --git a/source/assets/materials/dev/orange/texture_01.png b/source/assets/materials/dev/orange/texture_01.png
new file mode 100644
index 0000000..3eda5cd
Binary files /dev/null and b/source/assets/materials/dev/orange/texture_01.png differ
diff --git a/source/assets/materials/dev/orange/texture_01.png.import b/source/assets/materials/dev/orange/texture_01.png.import
new file mode 100644
index 0000000..2fcb637
--- /dev/null
+++ b/source/assets/materials/dev/orange/texture_01.png.import
@@ -0,0 +1,41 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://g26nr5u8081t"
+path.s3tc="res://.godot/imported/texture_01.png-a83d10648c428132d3ced0afde3c20c3.s3tc.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc"],
+"vram_texture": true
+}
+
+[deps]
+
+source_file="res://assets/materials/dev/orange/texture_01.png"
+dest_files=["res://.godot/imported/texture_01.png-a83d10648c428132d3ced0afde3c20c3.s3tc.ctex"]
+
+[params]
+
+compress/mode=2
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=true
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+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=0
diff --git a/source/assets/materials/dev/orange/texture_02.png b/source/assets/materials/dev/orange/texture_02.png
new file mode 100644
index 0000000..1460f2b
Binary files /dev/null and b/source/assets/materials/dev/orange/texture_02.png differ
diff --git a/source/assets/materials/dev/orange/texture_02.png.import b/source/assets/materials/dev/orange/texture_02.png.import
new file mode 100644
index 0000000..2ecb986
--- /dev/null
+++ b/source/assets/materials/dev/orange/texture_02.png.import
@@ -0,0 +1,41 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://12e0onm52r6b"
+path.s3tc="res://.godot/imported/texture_02.png-4a107b0a5def97872afcd9f45c568e3d.s3tc.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc"],
+"vram_texture": true
+}
+
+[deps]
+
+source_file="res://assets/materials/dev/orange/texture_02.png"
+dest_files=["res://.godot/imported/texture_02.png-4a107b0a5def97872afcd9f45c568e3d.s3tc.ctex"]
+
+[params]
+
+compress/mode=2
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=true
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+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=0
diff --git a/source/assets/materials/dev/orange/texture_03.png b/source/assets/materials/dev/orange/texture_03.png
new file mode 100644
index 0000000..09975cc
Binary files /dev/null and b/source/assets/materials/dev/orange/texture_03.png differ
diff --git a/source/assets/materials/dev/orange/texture_03.png.import b/source/assets/materials/dev/orange/texture_03.png.import
new file mode 100644
index 0000000..87aa96a
--- /dev/null
+++ b/source/assets/materials/dev/orange/texture_03.png.import
@@ -0,0 +1,41 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://eemth84vpstv"
+path.s3tc="res://.godot/imported/texture_03.png-816b5c1ffbc63378953f424af9a1f766.s3tc.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc"],
+"vram_texture": true
+}
+
+[deps]
+
+source_file="res://assets/materials/dev/orange/texture_03.png"
+dest_files=["res://.godot/imported/texture_03.png-816b5c1ffbc63378953f424af9a1f766.s3tc.ctex"]
+
+[params]
+
+compress/mode=2
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=true
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+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=0
diff --git a/source/assets/materials/dev/orange/texture_04.png b/source/assets/materials/dev/orange/texture_04.png
new file mode 100644
index 0000000..8ac9527
Binary files /dev/null and b/source/assets/materials/dev/orange/texture_04.png differ
diff --git a/source/assets/materials/dev/orange/texture_04.png.import b/source/assets/materials/dev/orange/texture_04.png.import
new file mode 100644
index 0000000..aba8f03
--- /dev/null
+++ b/source/assets/materials/dev/orange/texture_04.png.import
@@ -0,0 +1,41 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bgj70nov05sqo"
+path.s3tc="res://.godot/imported/texture_04.png-42aebed5b9811bdf952fb77522785efa.s3tc.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc"],
+"vram_texture": true
+}
+
+[deps]
+
+source_file="res://assets/materials/dev/orange/texture_04.png"
+dest_files=["res://.godot/imported/texture_04.png-42aebed5b9811bdf952fb77522785efa.s3tc.ctex"]
+
+[params]
+
+compress/mode=2
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=true
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+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=0
diff --git a/source/assets/materials/dev/orange/texture_05.png b/source/assets/materials/dev/orange/texture_05.png
new file mode 100644
index 0000000..e7bb6d9
Binary files /dev/null and b/source/assets/materials/dev/orange/texture_05.png differ
diff --git a/source/assets/materials/dev/orange/texture_05.png.import b/source/assets/materials/dev/orange/texture_05.png.import
new file mode 100644
index 0000000..1505793
--- /dev/null
+++ b/source/assets/materials/dev/orange/texture_05.png.import
@@ -0,0 +1,41 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://5erjqyy4c7xn"
+path.s3tc="res://.godot/imported/texture_05.png-99a10a21ae17d05fe7f350625de8a43d.s3tc.ctex"
+metadata={
+"imported_formats": ["s3tc_bptc"],
+"vram_texture": true
+}
+
+[deps]
+
+source_file="res://assets/materials/dev/orange/texture_05.png"
+dest_files=["res://.godot/imported/texture_05.png-99a10a21ae17d05fe7f350625de8a43d.s3tc.ctex"]
+
+[params]
+
+compress/mode=2
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=true
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+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=0
diff --git a/source/assets/materials/dev/orange/texture_06.png b/source/assets/materials/dev/orange/texture_06.png
new file mode 100644
index 0000000..2a18cf7
Binary files /dev/null and b/source/assets/materials/dev/orange/texture_06.png differ
diff --git a/source/assets/materials/dev/orange/texture_06.png.import b/source/assets/materials/dev/orange/texture_06.png.import
new file mode 100644
index 0000000..66ae8f3
--- /dev/null
+++ b/source/assets/materials/dev/orange/texture_06.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bj2b41igq57pc"
+path="res://.godot/imported/texture_06.png-59a1b8c604d5c09032a492851d966aeb.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/materials/dev/orange/texture_06.png"
+dest_files=["res://.godot/imported/texture_06.png-59a1b8c604d5c09032a492851d966aeb.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+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/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+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/source/assets/materials/dev/orange/texture_07.png b/source/assets/materials/dev/orange/texture_07.png
new file mode 100644
index 0000000..0d1f229
Binary files /dev/null and b/source/assets/materials/dev/orange/texture_07.png differ
diff --git a/source/assets/materials/dev/orange/texture_07.png.import b/source/assets/materials/dev/orange/texture_07.png.import
new file mode 100644
index 0000000..750e9fd
--- /dev/null
+++ b/source/assets/materials/dev/orange/texture_07.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bmhvs26rt627e"
+path="res://.godot/imported/texture_07.png-72be83eae1dd12c8b142fbc9e83245f0.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/materials/dev/orange/texture_07.png"
+dest_files=["res://.godot/imported/texture_07.png-72be83eae1dd12c8b142fbc9e83245f0.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+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/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+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/source/assets/materials/dev/orange/texture_08.png b/source/assets/materials/dev/orange/texture_08.png
new file mode 100644
index 0000000..b53b56d
Binary files /dev/null and b/source/assets/materials/dev/orange/texture_08.png differ
diff --git a/source/assets/materials/dev/orange/texture_08.png.import b/source/assets/materials/dev/orange/texture_08.png.import
new file mode 100644
index 0000000..e2c4f96
--- /dev/null
+++ b/source/assets/materials/dev/orange/texture_08.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bowqjyrh46yel"
+path="res://.godot/imported/texture_08.png-b6480a2f84c30cdf86964bd05af149f8.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/materials/dev/orange/texture_08.png"
+dest_files=["res://.godot/imported/texture_08.png-b6480a2f84c30cdf86964bd05af149f8.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+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/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+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/source/assets/materials/dev/orange/texture_09.png b/source/assets/materials/dev/orange/texture_09.png
new file mode 100644
index 0000000..a7f8b0b
Binary files /dev/null and b/source/assets/materials/dev/orange/texture_09.png differ
diff --git a/source/assets/materials/dev/orange/texture_09.png.import b/source/assets/materials/dev/orange/texture_09.png.import
new file mode 100644
index 0000000..b1cfd77
--- /dev/null
+++ b/source/assets/materials/dev/orange/texture_09.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b7ip1bo27jmj5"
+path="res://.godot/imported/texture_09.png-a543b2fa3eaac0d66ad0dd5a160c496e.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/materials/dev/orange/texture_09.png"
+dest_files=["res://.godot/imported/texture_09.png-a543b2fa3eaac0d66ad0dd5a160c496e.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+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/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+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/source/assets/materials/dev/orange/texture_10.png b/source/assets/materials/dev/orange/texture_10.png
new file mode 100644
index 0000000..979733a
Binary files /dev/null and b/source/assets/materials/dev/orange/texture_10.png differ
diff --git a/source/assets/materials/dev/orange/texture_10.png.import b/source/assets/materials/dev/orange/texture_10.png.import
new file mode 100644
index 0000000..7a6536f
--- /dev/null
+++ b/source/assets/materials/dev/orange/texture_10.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dowjbhuwr3ubr"
+path="res://.godot/imported/texture_10.png-6bd09999e93867d6507a3e15538ac1b3.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/materials/dev/orange/texture_10.png"
+dest_files=["res://.godot/imported/texture_10.png-6bd09999e93867d6507a3e15538ac1b3.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+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/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+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/source/assets/materials/dev/orange/texture_11.png b/source/assets/materials/dev/orange/texture_11.png
new file mode 100644
index 0000000..d52081b
Binary files /dev/null and b/source/assets/materials/dev/orange/texture_11.png differ
diff --git a/source/assets/materials/dev/orange/texture_11.png.import b/source/assets/materials/dev/orange/texture_11.png.import
new file mode 100644
index 0000000..6a882c3
--- /dev/null
+++ b/source/assets/materials/dev/orange/texture_11.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bntq0gx2lsj6s"
+path="res://.godot/imported/texture_11.png-42ae2f3371587daf8507f97be48e4f42.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/materials/dev/orange/texture_11.png"
+dest_files=["res://.godot/imported/texture_11.png-42ae2f3371587daf8507f97be48e4f42.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+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/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+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/source/assets/materials/dev/orange/texture_12.png b/source/assets/materials/dev/orange/texture_12.png
new file mode 100644
index 0000000..b7e5781
Binary files /dev/null and b/source/assets/materials/dev/orange/texture_12.png differ
diff --git a/source/assets/materials/dev/orange/texture_12.png.import b/source/assets/materials/dev/orange/texture_12.png.import
new file mode 100644
index 0000000..ee333bf
--- /dev/null
+++ b/source/assets/materials/dev/orange/texture_12.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://di17m0sbxmjt0"
+path="res://.godot/imported/texture_12.png-77508d1031aa0e73e1271b7776f2aeaf.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/materials/dev/orange/texture_12.png"
+dest_files=["res://.godot/imported/texture_12.png-77508d1031aa0e73e1271b7776f2aeaf.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+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/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+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/source/assets/materials/dev/orange/texture_13.png b/source/assets/materials/dev/orange/texture_13.png
new file mode 100644
index 0000000..57dba8c
Binary files /dev/null and b/source/assets/materials/dev/orange/texture_13.png differ
diff --git a/source/assets/materials/dev/orange/texture_13.png.import b/source/assets/materials/dev/orange/texture_13.png.import
new file mode 100644
index 0000000..4bc89db
--- /dev/null
+++ b/source/assets/materials/dev/orange/texture_13.png.import
@@ -0,0 +1,40 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://damricmnd3fbk"
+path="res://.godot/imported/texture_13.png-928bf04c1a58dcda750f2f2ddb0720b1.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/materials/dev/orange/texture_13.png"
+dest_files=["res://.godot/imported/texture_13.png-928bf04c1a58dcda750f2f2ddb0720b1.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+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/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+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/source/components/characters/player/player_character.gd b/source/components/characters/player/player_character.gd
deleted file mode 100644
index 59f125f..0000000
--- a/source/components/characters/player/player_character.gd
+++ /dev/null
@@ -1,75 +0,0 @@
-class_name PlayerCharacter
-extends CharacterBase3D
-
-
-const ACTION_RUN: StringName = &"run"
-const ACTION_JUMP: StringName = &"jump"
-const ACTION_MOVE_LEFT: StringName = &"move_left"
-const ACTION_MOVE_RIGHT: StringName = &"move_right"
-const ACTION_MOVE_FORWARD: StringName = &"move_forward"
-const ACTION_MOVE_BACKWARD: StringName = &"move_backward"
-
-var has_control: bool = true
-
-@onready var head: GameCamera3D = $Head
-
-
-func _ready() -> void:
- GameGlobals.player = self
-
- if not get_tree().root.is_node_ready():
- await get_tree().root.ready
-
- var spawn_point := PlayerSpawnPoint.get_spawn_point_by_index(GameGlobals.spawn_index)
-
- if is_instance_valid(spawn_point):
- global_position = spawn_point.global_position
- head.global_rotation = spawn_point.global_rotation
-
-
-func _physics_process(delta: float) -> void:
- # Add the gravity.
- if not is_on_floor():
- apply_gravity(delta)
-
- if not has_control:
- move(Vector3.ZERO, delta)
- move_and_slide()
- return
-
- # Handle jump.
- if Input.is_action_just_pressed(ACTION_JUMP) and is_on_floor():
- jump()
-
- var input_dir: Vector3 = get_input_direction()
- movement_direction = input_dir.normalized()
-
- # Rotate the movement direction based on the cameras orientation.
- movement_direction = movement_direction.rotated(Vector3.UP, head.global_rotation.y)
-
- speed = get_desired_speed() * input_dir.length()
-
- move(movement_direction, delta)
-
- move_and_slide()
-
-
-func apply_gravity(delta: float) -> void:
- super(delta)
-
-
-func get_input_direction() -> Vector3:
- if not InputManager.window_focused():
- return Vector3.ZERO
-
- var input_dir := Input.get_vector(ACTION_MOVE_LEFT, ACTION_MOVE_RIGHT, ACTION_MOVE_FORWARD, ACTION_MOVE_BACKWARD)
- var direction: Vector3 = (transform.basis * Vector3(input_dir.x, 1, input_dir.y))#.normalized()
- direction.y = 0.0
- return direction
-
-
-func get_desired_speed() -> float:
- if Input.is_action_pressed(ACTION_RUN):
- return movement.running_speed if is_on_floor() else movement.air_running_speed
-
- return movement.walking_speed if is_on_floor() else movement.air_walking_speed
diff --git a/source/components/characters/player/player_character.tscn b/source/components/characters/player/player_character.tscn
deleted file mode 100644
index 6f6e4bf..0000000
--- a/source/components/characters/player/player_character.tscn
+++ /dev/null
@@ -1,50 +0,0 @@
-[gd_scene load_steps=7 format=3 uid="uid://clhy3kiceqf2o"]
-
-[ext_resource type="Script" uid="uid://day6rhxicaxqf" path="res://components/characters/player/player_character.gd" id="1_hqu6r"]
-[ext_resource type="Script" uid="uid://dsjlv8midt2g2" path="res://components/characters/character_movement_base.gd" id="2_1ixuj"]
-[ext_resource type="Script" uid="uid://2y3gnaqtrfnx" path="res://components/characters/player/head.gd" id="2_fjt7c"]
-[ext_resource type="Script" uid="uid://nuwb55sbveaf" path="res://components/characters/common/footstep_component.gd" id="4_vq0uu"]
-
-[sub_resource type="Resource" id="Resource_vq0uu"]
-script = ExtResource("2_1ixuj")
-jump_height = 0.25
-walking_speed = 3.5
-air_walking_speed = 3.75
-running_speed = 5.5
-air_running_speed = 6.0
-max_turning_speed = 70.0
-max_air_turning_speed = 10.0
-max_acceleration = 30.0
-max_air_acceleration = 10.0
-max_friction = 20.0
-max_air_friction = 10.0
-use_default_physics_gravity = true
-gravity = 9.8
-gravity_check_margin = 0.05
-rise_gravity_multiplier = 1.0
-peak_gravity_multiplier = 0.3
-fall_gravity_multiplier = 1.5
-metadata/_custom_type_script = "uid://dsjlv8midt2g2"
-
-[sub_resource type="CylinderShape3D" id="CylinderShape3D_fjt7c"]
-
-[node name="PlayerCharacter" type="CharacterBody3D"]
-script = ExtResource("1_hqu6r")
-movement = SubResource("Resource_vq0uu")
-metadata/_custom_type_script = "uid://day6rhxicaxqf"
-
-[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
-shape = SubResource("CylinderShape3D_fjt7c")
-
-[node name="Head" type="Node3D" parent="." node_paths=PackedStringArray("camera")]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.8, 0)
-script = ExtResource("2_fjt7c")
-camera = NodePath("Camera3D")
-
-[node name="Camera3D" type="Camera3D" parent="Head"]
-fov = 85.0
-
-[node name="FootstepComponent" type="Node" parent="." node_paths=PackedStringArray("character")]
-script = ExtResource("4_vq0uu")
-character = NodePath("..")
diff --git a/source/components/general/player_spawn_point.gd b/source/components/general/player_spawn_point.gd
deleted file mode 100644
index fe7ec42..0000000
--- a/source/components/general/player_spawn_point.gd
+++ /dev/null
@@ -1,103 +0,0 @@
-@tool
-class_name PlayerSpawnPoint
-extends Marker3D
-
-@export var spawn_index: int = 0: set = set_spawn_index
-@export_tool_button("Set unique index") var set_unique_index: Callable = func() -> void:
- for spawn_point: PlayerSpawnPoint in spawn_points:
- if spawn_point == self:
- continue
-
- if spawn_point.spawn_index == spawn_index:
- set_spawn_index(spawn_index + 1)
- set_unique_index.call()
- return
-
- update_configuration_warnings()
-@export var editor_auto_assign_unique_id: bool = true
-
-static var spawn_points: Array[PlayerSpawnPoint] = []
-var idx_label: Label3D
-var config_warnings_hint: Label3D
-
-
-func _init() -> void:
- if Engine.is_editor_hint():
- var player_scene: PackedScene = load("res://components/characters/player/player_character.tscn")
- add_child(player_scene.instantiate(), false, Node.INTERNAL_MODE_FRONT)
-
- # Setup labels.
- idx_label = Label3D.new()
- idx_label.billboard = BaseMaterial3D.BILLBOARD_ENABLED
- idx_label.shaded = false
- idx_label.font_size = 64
- add_child(idx_label, false, Node.INTERNAL_MODE_FRONT)
- idx_label.position.y = 1.8
- set_spawn_index(spawn_index)
-
- config_warnings_hint = Label3D.new()
- config_warnings_hint.billboard = BaseMaterial3D.BILLBOARD_ENABLED
- config_warnings_hint.shaded = false
- config_warnings_hint.no_depth_test = true
- config_warnings_hint.fixed_size = true
- config_warnings_hint.text = "!"
- config_warnings_hint.modulate = Color.RED
- add_child(config_warnings_hint, false, Node.INTERNAL_MODE_FRONT)
- config_warnings_hint.position.y = 1.0
-
- var tween: Tween = create_tween().set_loops()
- tween.tween_property(config_warnings_hint, ^"scale", Vector3.ONE * 1.5, 0.075)
- tween.tween_property(config_warnings_hint, ^"scale", Vector3.ONE * 1.0, 0.075)
-
- update_configuration_warnings()
-
-
-func _enter_tree() -> void:
- if not spawn_points.has(self):
- spawn_points.append(self)
-
- if editor_auto_assign_unique_id and Engine.is_editor_hint():
- set_unique_index.call_deferred()
-
-
-func _exit_tree() -> void:
- spawn_points.erase(self)
-
-
-func set_spawn_index(index: int) -> void:
- spawn_index = index
- update_configuration_warnings()
-
- if is_instance_valid(idx_label):
- idx_label.text = str(spawn_index)
-
-
-func make_current(do_autosave: bool = true) -> void:
- GameGlobals.spawn_index = spawn_index
-
- if do_autosave:
- SaveManager.save_game()
-
-
-static func get_spawn_point_by_index(index: int) -> PlayerSpawnPoint:
- for spawn_point: PlayerSpawnPoint in PlayerSpawnPoint.spawn_points:
- if spawn_point.spawn_index == index:
- return spawn_point
-
- return null
-
-
-func _get_configuration_warnings() -> PackedStringArray:
- var warnings: PackedStringArray = []
-
- for spawn_point: PlayerSpawnPoint in spawn_points:
- if spawn_point.spawn_index == spawn_index and spawn_point != self:
- warnings.append(str(spawn_point, " has the same spawn index as us."))
- spawn_point.config_warnings_hint.show()
-
- spawn_point.update_configuration_warnings()
-
- if warnings.is_empty():
- config_warnings_hint.hide()
-
- return warnings
diff --git a/source/components/hazards/saw/saw.gd b/source/components/hazards/saw/saw.gd
deleted file mode 100644
index 5c55721..0000000
--- a/source/components/hazards/saw/saw.gd
+++ /dev/null
@@ -1,14 +0,0 @@
-extends Node3D
-
-@export var spin_speed: float = 7.0
-
-@onready var saw_skin: Node3D = $SawSkin
-
-
-func _ready() -> void:
- saw_skin.rotation.z = randf() * TAU
-
-
-# Called every frame. 'delta' is the elapsed time since the previous frame.
-func _physics_process(delta: float) -> void:
- saw_skin.rotate_z(spin_speed * delta)
diff --git a/source/components/hazards/saw/saw.tscn b/source/components/hazards/saw/saw.tscn
deleted file mode 100644
index 27c3352..0000000
--- a/source/components/hazards/saw/saw.tscn
+++ /dev/null
@@ -1,9 +0,0 @@
-[gd_scene load_steps=3 format=3 uid="uid://c0jearfhlqcvr"]
-
-[ext_resource type="Script" uid="uid://cd1p1fxbdglwu" path="res://components/hazards/saw/saw.gd" id="1_bec0m"]
-[ext_resource type="PackedScene" uid="uid://u56f1ks46ob6" path="res://components/hazards/saw/saw.blend" id="1_eq5lu"]
-
-[node name="Saw" type="Node3D"]
-script = ExtResource("1_bec0m")
-
-[node name="SawSkin" parent="." instance=ExtResource("1_eq5lu")]
diff --git a/source/default_bus_layout.tres b/source/default_bus_layout.tres
new file mode 100644
index 0000000..73dabbb
--- /dev/null
+++ b/source/default_bus_layout.tres
@@ -0,0 +1,21 @@
+[gd_resource type="AudioBusLayout" format=3 uid="uid://qn6urhh6ioob"]
+
+[resource]
+bus/1/name = &"SFX"
+bus/1/solo = false
+bus/1/mute = false
+bus/1/bypass_fx = false
+bus/1/volume_db = 0.0
+bus/1/send = &"Master"
+bus/2/name = &"Music"
+bus/2/solo = false
+bus/2/mute = false
+bus/2/bypass_fx = false
+bus/2/volume_db = 0.0
+bus/2/send = &"Master"
+bus/3/name = &"Ambient"
+bus/3/solo = false
+bus/3/mute = false
+bus/3/bypass_fx = false
+bus/3/volume_db = 0.0
+bus/3/send = &"Master"
diff --git a/source/export_presets.cfg b/source/export_presets.cfg
new file mode 100644
index 0000000..6a14207
--- /dev/null
+++ b/source/export_presets.cfg
@@ -0,0 +1,67 @@
+[preset.0]
+
+name="Windows Desktop"
+platform="Windows Desktop"
+runnable=true
+advanced_options=true
+dedicated_server=false
+custom_features=""
+export_filter="all_resources"
+include_filter=""
+exclude_filter=""
+export_path=""
+patches=PackedStringArray()
+encryption_include_filters=""
+encryption_exclude_filters=""
+seed=0
+encrypt_pck=false
+encrypt_directory=false
+script_export_mode=2
+
+[preset.0.options]
+
+custom_template/debug=""
+custom_template/release=""
+debug/export_console_wrapper=1
+binary_format/embed_pck=false
+texture_format/s3tc_bptc=true
+texture_format/etc2_astc=false
+shader_baker/enabled=true
+binary_format/architecture="x86_64"
+codesign/enable=false
+codesign/timestamp=true
+codesign/timestamp_server_url=""
+codesign/digest_algorithm=1
+codesign/description=""
+codesign/custom_options=PackedStringArray()
+application/modify_resources=true
+application/icon=""
+application/console_wrapper_icon=""
+application/icon_interpolation=4
+application/file_version=""
+application/product_version=""
+application/company_name=""
+application/product_name=""
+application/file_description=""
+application/copyright=""
+application/trademarks=""
+application/export_angle=0
+application/export_d3d12=0
+application/d3d12_agility_sdk_multiarch=true
+ssh_remote_deploy/enabled=false
+ssh_remote_deploy/host="user@host_ip"
+ssh_remote_deploy/port="22"
+ssh_remote_deploy/extra_args_ssh=""
+ssh_remote_deploy/extra_args_scp=""
+ssh_remote_deploy/run_script="Expand-Archive -LiteralPath '{temp_dir}\\{archive_name}' -DestinationPath '{temp_dir}'
+$action = New-ScheduledTaskAction -Execute '{temp_dir}\\{exe_name}' -Argument '{cmd_args}'
+$trigger = New-ScheduledTaskTrigger -Once -At 00:00
+$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries
+$task = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings
+Register-ScheduledTask godot_remote_debug -InputObject $task -Force:$true
+Start-ScheduledTask -TaskName godot_remote_debug
+while (Get-ScheduledTask -TaskName godot_remote_debug | ? State -eq running) { Start-Sleep -Milliseconds 100 }
+Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue"
+ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -ErrorAction:SilentlyContinue
+Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue
+Remove-Item -Recurse -Force '{temp_dir}'"
diff --git a/source/game.gd b/source/game.gd
deleted file mode 100644
index 8509bb8..0000000
--- a/source/game.gd
+++ /dev/null
@@ -1,8 +0,0 @@
-extends Node
-
-
-# Called when the node enters the scene tree for the first time.
-func _ready() -> void:
- Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
-
- AudioManager.play_audio(preload("res://Dark House.wav"), AudioManager.AMBIENCE)
diff --git a/source/game.tscn b/source/game.tscn
deleted file mode 100644
index 6b7d9f2..0000000
--- a/source/game.tscn
+++ /dev/null
@@ -1,83 +0,0 @@
-[gd_scene load_steps=7 format=3 uid="uid://s7cw6ulb7kh7"]
-
-[ext_resource type="PackedScene" uid="uid://clhy3kiceqf2o" path="res://components/characters/player/player_character.tscn" id="1_80nbo"]
-[ext_resource type="Script" uid="uid://dbsjg3o61vuji" path="res://game.gd" id="1_fc0e3"]
-[ext_resource type="Environment" uid="uid://xe70va0pjc6c" path="res://resources/game_environment.tres" id="2_7jktm"]
-[ext_resource type="Script" uid="uid://3hlvt5k34xva" path="res://components/general/player_spawn_point.gd" id="2_e2o6t"]
-[ext_resource type="PackedScene" uid="uid://dawmen0hlfaaq" path="res://components/ui/menus/pause_menu/pause_menu.tscn" id="3_feb5d"]
-[ext_resource type="PackedScene" uid="uid://c0jearfhlqcvr" path="res://components/hazards/saw/saw.tscn" id="5_ryrav"]
-
-[node name="Game" type="Node"]
-script = ExtResource("1_fc0e3")
-
-[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
-environment = ExtResource("2_7jktm")
-
-[node name="PlayerCharacter" parent="." instance=ExtResource("1_80nbo")]
-
-[node name="Menus" type="CanvasLayer" parent="."]
-
-[node name="PauseMenu" parent="Menus" instance=ExtResource("3_feb5d")]
-
-[node name="Areas" type="Node" parent="."]
-
-[node name="IntroArea" type="Node3D" parent="Areas"]
-
-[node name="Blockout" type="CSGCombiner3D" parent="Areas/IntroArea"]
-use_collision = true
-
-[node name="CSGBox3D" type="CSGBox3D" parent="Areas/IntroArea/Blockout"]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.5, -4.5)
-size = Vector3(5, 4, 12)
-
-[node name="CSGBox3D3" type="CSGBox3D" parent="Areas/IntroArea/Blockout/CSGBox3D"]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -0.5)
-operation = 2
-size = Vector3(4, 3, 12)
-
-[node name="CSGBox3D2" type="CSGBox3D" parent="Areas/IntroArea/Blockout"]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7, -22)
-size = Vector3(32, 15, 27)
-
-[node name="CSGBox3D3" type="CSGBox3D" parent="Areas/IntroArea/Blockout/CSGBox3D2"]
-operation = 2
-size = Vector3(31, 14, 25)
-
-[node name="CSGBox3D4" type="CSGBox3D" parent="Areas/IntroArea/Blockout/CSGBox3D2"]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -5.5, 12.25)
-operation = 2
-size = Vector3(4, 3, 2.5)
-
-[node name="OmniLight3D" type="OmniLight3D" parent="Areas/IntroArea"]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, -24)
-omni_range = 20.0
-
-[node name="Saw" parent="Areas/IntroArea" instance=ExtResource("5_ryrav")]
-transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 0, 0.5, -25)
-
-[node name="Saw2" parent="Areas/IntroArea" instance=ExtResource("5_ryrav")]
-transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 0.2, 0.5, -25)
-
-[node name="Saw3" parent="Areas/IntroArea" instance=ExtResource("5_ryrav")]
-transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 0.4, 0.5, -25)
-
-[node name="Saw4" parent="Areas/IntroArea" instance=ExtResource("5_ryrav")]
-transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 0.6, 0.5, -25)
-
-[node name="Saw5" parent="Areas/IntroArea" instance=ExtResource("5_ryrav")]
-transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 0.8, 0.5, -25)
-
-[node name="Saw6" parent="Areas/IntroArea" instance=ExtResource("5_ryrav")]
-transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 1, 0.5, -25)
-
-[node name="SpawnPoints" type="Node" parent="."]
-
-[node name="PlayerSpawnPoint" type="Marker3D" parent="SpawnPoints"]
-script = ExtResource("2_e2o6t")
-metadata/_custom_type_script = "uid://3hlvt5k34xva"
-
-[node name="PlayerSpawnPoint2" type="Marker3D" parent="SpawnPoints"]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -15)
-script = ExtResource("2_e2o6t")
-spawn_index = 1
-metadata/_custom_type_script = "uid://3hlvt5k34xva"
diff --git a/source/globals/autoloads/game_globals.gd b/source/globals/autoloads/game_globals.gd
deleted file mode 100644
index ff50577..0000000
--- a/source/globals/autoloads/game_globals.gd
+++ /dev/null
@@ -1,19 +0,0 @@
-extends Node
-
-const MAIN_MENU_PATH: String = "res://components/ui/menus/main_menu/main_menu.tscn"
-const GAME_PATH: String = "res://game.tscn"
-
-var player: PlayerCharacter
-var spawn_index: int = 0
-
-
-func get_player() -> PlayerCharacter:
- return player
-
-
-func reset_game() -> void:
- spawn_index = 0
-
-
-func set_spawn_index(index: int) -> void:
- spawn_index = index
diff --git a/source/globals/autoloads/save_manager.gd b/source/globals/autoloads/save_manager.gd
deleted file mode 100644
index 904a972..0000000
--- a/source/globals/autoloads/save_manager.gd
+++ /dev/null
@@ -1,32 +0,0 @@
-extends Node
-
-const SAVE_PATH: String = "user://saves/"
-const SAVE_FILENAME: String = "saved_game.dat"
-
-func save_game() -> void:
- DirAccess.make_dir_recursive_absolute(SAVE_PATH)
-
- var file := FileAccess.open(str(SAVE_PATH, SAVE_FILENAME), FileAccess.WRITE)
-
- # Store the variables.
- file.store_var(GameGlobals.spawn_index)
-
-
-func load_game() -> bool:
- if not save_exists():
- return false
-
- var file := FileAccess.open(str(SAVE_PATH, SAVE_FILENAME), FileAccess.READ)
-
- # Load the variables.
- GameGlobals.spawn_index = file.get_var()
-
- return true
-
-
-func delete_save() -> void:
- DirAccess.remove_absolute(str(SAVE_PATH, SAVE_FILENAME))
-
-
-func save_exists() -> bool:
- return FileAccess.file_exists(str(SAVE_PATH, SAVE_FILENAME))
diff --git a/source/globals/general/utils.gd b/source/globals/general/utils.gd
deleted file mode 100644
index 13e838e..0000000
--- a/source/globals/general/utils.gd
+++ /dev/null
@@ -1,31 +0,0 @@
-class_name Utils
-extends Object
-
-
-const VEC3_HOR := Vector3(1.0, 0.0, 1.0)
-
-
-static func get_all_children(node: Node, internal: bool = false) -> Array[Node]:
- if not is_instance_valid(node):
- return []
-
- var children: Array[Node] = []
- for child: Node in node.get_children(internal):
- children.append(child)
- if child.get_child_count(internal) > 0:
- children.append_array(get_all_children(child, internal))
-
- return children
-
-
-static func node_distance(node_a: Node3D, node_b: Node3D, position_modifier := Vector3.ONE) -> float:
- if not is_instance_valid(node_a) or not is_instance_valid(node_b):
- return -1.0
-
- return (node_a.global_position * position_modifier).distance_to(node_b.global_position * position_modifier)
-
-
-## Returns [code]true[/code] when [param node_a] is close to the [param from] node than [param node_b].[br]
-## [b]Note:[/b] Meant to be used with the [method Array.sort_custom] function.
-static func sort_by_distance(from: Node3D, node_a: Node3D, node_b: Node3D) -> bool:
- return Utils.node_distance(from, node_a) <= Utils.node_distance(from, node_b)
diff --git a/source/localization/de.mo b/source/localization/de.mo
index 624a9c3..031b898 100644
Binary files a/source/localization/de.mo and b/source/localization/de.mo differ
diff --git a/source/localization/de.po b/source/localization/de.po
index a5a3096..4666de8 100644
--- a/source/localization/de.po
+++ b/source/localization/de.po
@@ -15,24 +15,76 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 3.4.2\n"
+"X-Generator: Poedit 3.6\n"
-#: components/ui/menus/main_menu/main_menu.tscn
+#: src/ui/menus/main_menu/main_menu.tscn
msgid "Magic N' Stuff"
msgstr ""
-#: components/ui/menus/main_menu/main_menu.tscn
+#: src/ui/menus/main_menu/main_menu.tscn
msgid "CONTINUE"
msgstr "Weiterspielen"
-#: components/ui/menus/main_menu/main_menu.tscn
+#: src/ui/menus/main_menu/main_menu.tscn
msgid "NEW_GAME"
msgstr "Neues Spiel"
-#: components/ui/menus/main_menu/main_menu.tscn
+#: src/ui/menus/main_menu/main_menu.tscn
msgid "SETTINGS"
msgstr "Einstellungen"
-#: components/ui/menus/main_menu/main_menu.tscn
+#: src/ui/menus/main_menu/main_menu.tscn
msgid "QUIT"
msgstr "Beenden"
+
+#: src/ui/menus/pause_menu/pause_menu.tscn
+msgid "Paused"
+msgstr "Pausiert"
+
+#: src/ui/menus/pause_menu/pause_menu.tscn
+msgid "Continue"
+msgstr "Weiterspielen"
+
+#: src/ui/menus/pause_menu/pause_menu.tscn
+msgid "Settings"
+msgstr "Einstellungen"
+
+#: src/ui/menus/pause_menu/pause_menu.tscn
+msgid "Main Menu"
+msgstr "Hauptmenü"
+
+#: src/ui/menus/options_menu/options_menu.tscn
+msgid "Audio"
+msgstr "Audio"
+
+#: src/ui/menus/options_menu/options_menu.tscn
+msgid "Master"
+msgstr "Master"
+
+#: src/ui/menus/options_menu/options_menu.tscn
+msgid "1.0"
+msgstr ""
+
+#: src/ui/menus/options_menu/options_menu.tscn
+msgid "SFX"
+msgstr "SFX"
+
+#: src/ui/menus/options_menu/options_menu.tscn
+msgid "Music"
+msgstr "Musik"
+
+#: src/ui/menus/options_menu/options_menu.tscn
+msgid "Ambient"
+msgstr "Hintergrundgeräusche"
+
+#: src/ui/menus/options_menu/options_menu.tscn
+msgid "Graphics"
+msgstr "Grafiken"
+
+#: src/ui/menus/options_menu/options_menu.tscn
+msgid "Fullscreen"
+msgstr "Vollbild"
+
+#: src/ui/menus/death_screen/death_screen.tscn
+msgid "Killed by a saw"
+msgstr "Von einer Säge getötet"
diff --git a/source/localization/translation.pot b/source/localization/translation.pot
index c283265..85f0b68 100644
--- a/source/localization/translation.pot
+++ b/source/localization/translation.pot
@@ -1,5 +1,8 @@
# LANGUAGE translation for MagicNStuff for the following files:
-# res://components/ui/menus/main_menu/main_menu.tscn
+# res://src/ui/menus/main_menu/main_menu.tscn
+# res://src/ui/menus/pause_menu/pause_menu.tscn
+# res://src/ui/menus/options_menu/options_menu.tscn
+# res://src/ui/menus/death_screen/death_screen.tscn
#
# FIRST AUTHOR , YEAR.
#
@@ -7,26 +10,83 @@
msgid ""
msgstr ""
"Project-Id-Version: MagicNStuff\n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8-bit\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 3.6\n"
-#: components/ui/menus/main_menu/main_menu.tscn
+#: src/ui/menus/main_menu/main_menu.tscn
msgid "Magic N' Stuff"
msgstr ""
-#: components/ui/menus/main_menu/main_menu.tscn
+#: src/ui/menus/main_menu/main_menu.tscn
msgid "CONTINUE"
msgstr ""
-#: components/ui/menus/main_menu/main_menu.tscn
+#: src/ui/menus/main_menu/main_menu.tscn
msgid "NEW_GAME"
msgstr ""
-#: components/ui/menus/main_menu/main_menu.tscn
+#: src/ui/menus/main_menu/main_menu.tscn
msgid "SETTINGS"
msgstr ""
-#: components/ui/menus/main_menu/main_menu.tscn
+#: src/ui/menus/main_menu/main_menu.tscn
msgid "QUIT"
msgstr ""
+
+#: src/ui/menus/pause_menu/pause_menu.tscn
+msgid "Paused"
+msgstr ""
+
+#: src/ui/menus/pause_menu/pause_menu.tscn
+msgid "Continue"
+msgstr ""
+
+#: src/ui/menus/pause_menu/pause_menu.tscn
+msgid "Settings"
+msgstr ""
+
+#: src/ui/menus/pause_menu/pause_menu.tscn
+msgid "Main Menu"
+msgstr ""
+
+#: src/ui/menus/options_menu/options_menu.tscn
+msgid "Audio"
+msgstr ""
+
+#: src/ui/menus/options_menu/options_menu.tscn
+msgid "Master"
+msgstr ""
+
+#: src/ui/menus/options_menu/options_menu.tscn
+msgid "1.0"
+msgstr ""
+
+#: src/ui/menus/options_menu/options_menu.tscn
+msgid "SFX"
+msgstr ""
+
+#: src/ui/menus/options_menu/options_menu.tscn
+msgid "Music"
+msgstr ""
+
+#: src/ui/menus/options_menu/options_menu.tscn
+msgid "Ambient"
+msgstr ""
+
+#: src/ui/menus/options_menu/options_menu.tscn
+msgid "Graphics"
+msgstr ""
+
+#: src/ui/menus/options_menu/options_menu.tscn
+msgid "Fullscreen"
+msgstr ""
+
+#: src/ui/menus/death_screen/death_screen.tscn
+msgid "Killed by a saw"
+msgstr ""
diff --git a/source/maps/_dynamic_load_test/_dynamic_load_test_map.tscn b/source/maps/_dynamic_load_test/_dynamic_load_test_map.tscn
deleted file mode 100644
index d4e454a..0000000
--- a/source/maps/_dynamic_load_test/_dynamic_load_test_map.tscn
+++ /dev/null
@@ -1,182 +0,0 @@
-[gd_scene load_steps=19 format=3 uid="uid://d3ag4d4r8qcw7"]
-
-[ext_resource type="Script" uid="uid://bj2bhtdul8xct" path="res://components/collision/areas/dynamic_area_loader.gd" id="1_q4yy4"]
-[ext_resource type="PackedScene" uid="uid://clhy3kiceqf2o" path="res://components/characters/player/player_character.tscn" id="2_g60qb"]
-[ext_resource type="Script" uid="uid://3hlvt5k34xva" path="res://components/general/player_spawn_point.gd" id="3_yaqeo"]
-[ext_resource type="PackedScene" uid="uid://c0jearfhlqcvr" path="res://components/hazards/saw/saw.tscn" id="4_4rgsp"]
-
-[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_g60qb"]
-sky_horizon_color = Color(0.662243, 0.671743, 0.686743, 1)
-ground_horizon_color = Color(0.662243, 0.671743, 0.686743, 1)
-
-[sub_resource type="Sky" id="Sky_yaqeo"]
-sky_material = SubResource("ProceduralSkyMaterial_g60qb")
-
-[sub_resource type="Environment" id="Environment_4rgsp"]
-background_mode = 2
-sky = SubResource("Sky_yaqeo")
-tonemap_mode = 2
-glow_enabled = true
-
-[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_g60qb"]
-albedo_color = Color(1, 0.426083, 0.0827108, 1)
-
-[sub_resource type="BoxShape3D" id="BoxShape3D_g60qb"]
-size = Vector3(9, 4, 9)
-
-[sub_resource type="BoxShape3D" id="BoxShape3D_yaqeo"]
-size = Vector3(9, 4, 9)
-
-[sub_resource type="BoxShape3D" id="BoxShape3D_4rgsp"]
-size = Vector3(12, 4, 7)
-
-[sub_resource type="BoxShape3D" id="BoxShape3D_m4fap"]
-size = Vector3(4, 4, 11)
-
-[sub_resource type="BoxShape3D" id="BoxShape3D_k1ge7"]
-size = Vector3(25, 4, 21.3)
-
-[sub_resource type="BoxShape3D" id="BoxShape3D_ka7nb"]
-size = Vector3(25, 4, 6)
-
-[sub_resource type="BoxShape3D" id="BoxShape3D_kaxur"]
-size = Vector3(22, 4, 7)
-
-[sub_resource type="BoxShape3D" id="BoxShape3D_0qpgw"]
-size = Vector3(9, 4, 25)
-
-[sub_resource type="WorldBoundaryShape3D" id="WorldBoundaryShape3D_g60qb"]
-
-[sub_resource type="CylinderMesh" id="CylinderMesh_g60qb"]
-
-[node name="DynamicLoadTestMap" type="Node"]
-
-[node name="PlayerCharacter" parent="." instance=ExtResource("2_g60qb")]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 10)
-
-[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
-transform = Transform3D(-0.866025, -0.433013, 0.25, 0, 0.5, 0.866025, -0.5, 0.75, -0.433013, 0, 0, 0)
-shadow_enabled = true
-
-[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
-environment = SubResource("Environment_4rgsp")
-
-[node name="Areas" type="Node" parent="."]
-
-[node name="AlwaysLoaded" type="CSGCombiner3D" parent="Areas"]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 9)
-use_collision = true
-
-[node name="CSGBox3D" type="CSGBox3D" parent="Areas/AlwaysLoaded"]
-size = Vector3(8, 1, 7)
-material = SubResource("StandardMaterial3D_g60qb")
-
-[node name="PerformanceTestPlatform1" type="Area3D" parent="Areas" node_paths=PackedStringArray("placeholder_node")]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 2, 0)
-script = ExtResource("1_q4yy4")
-placeholder_node = NodePath("Area1")
-loaded_if_spawnpoint = Array[int]([0])
-metadata/_custom_type_script = "uid://bj2bhtdul8xct"
-
-[node name="Area1" parent="Areas/PerformanceTestPlatform1" instance_placeholder="res://maps/_dynamic_load_test/area_1.tscn"]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2, -2, 2)
-
-[node name="CollisionShape3D" type="CollisionShape3D" parent="Areas/PerformanceTestPlatform1"]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2, 0.5, 2)
-shape = SubResource("BoxShape3D_g60qb")
-debug_color = Color(0.678973, 0.504376, 0, 0.42)
-
-[node name="PerformanceTestPlatform2" type="Area3D" parent="Areas" node_paths=PackedStringArray("placeholder_node")]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 2, -7)
-script = ExtResource("1_q4yy4")
-placeholder_node = NodePath("Area2")
-loaded_if_spawnpoint = Array[int]([1])
-metadata/_custom_type_script = "uid://bj2bhtdul8xct"
-
-[node name="Area2" parent="Areas/PerformanceTestPlatform2" instance_placeholder="res://maps/_dynamic_load_test/area_2.tscn"]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2, -2, 2)
-
-[node name="CollisionShape3D" type="CollisionShape3D" parent="Areas/PerformanceTestPlatform2"]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2, 0.5, 2)
-shape = SubResource("BoxShape3D_yaqeo")
-debug_color = Color(0.678973, 0.504376, 0, 0.42)
-
-[node name="CollisionShape3D2" type="CollisionShape3D" parent="Areas/PerformanceTestPlatform2"]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -12.5, 0.5, 3.67773)
-shape = SubResource("BoxShape3D_4rgsp")
-debug_color = Color(0.678973, 0.504376, 0, 0.42)
-
-[node name="CollisionShape3D3" type="CollisionShape3D" parent="Areas/PerformanceTestPlatform2"]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -16.5, 0.5, 5.67773)
-shape = SubResource("BoxShape3D_m4fap")
-debug_color = Color(0.678973, 0.504376, 0, 0.42)
-
-[node name="Hallway1Loader" type="Area3D" parent="Areas" node_paths=PackedStringArray("placeholder_node")]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 2, -7)
-script = ExtResource("1_q4yy4")
-placeholder_node = NodePath("Hallway1")
-metadata/_custom_type_script = "uid://bj2bhtdul8xct"
-
-[node name="Hallway1" parent="Areas/Hallway1Loader" instance_placeholder="res://maps/_dynamic_load_test/hallway_1.tscn"]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, -2, 16)
-
-[node name="CollisionShape3D" type="CollisionShape3D" parent="Areas/Hallway1Loader"]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2, 0.5, 17.85)
-shape = SubResource("BoxShape3D_k1ge7")
-debug_color = Color(0.678973, 0.504376, 0, 0.42)
-
-[node name="Hallway2Loader" type="Area3D" parent="Areas" node_paths=PackedStringArray("placeholder_node")]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 2, -7)
-script = ExtResource("1_q4yy4")
-placeholder_node = NodePath("Hallway2")
-metadata/_custom_type_script = "uid://bj2bhtdul8xct"
-
-[node name="Hallway2" parent="Areas/Hallway2Loader" instance_placeholder="res://maps/_dynamic_load_test/hallway_2.tscn"]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, -2, 16)
-
-[node name="CollisionShape3D" type="CollisionShape3D" parent="Areas/Hallway2Loader"]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2, 0.5, 25.5)
-shape = SubResource("BoxShape3D_ka7nb")
-debug_color = Color(0.678973, 0.504376, 0, 0.42)
-
-[node name="CollisionShape3D2" type="CollisionShape3D" parent="Areas/Hallway2Loader"]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -7.5, 0.5, 3.67773)
-shape = SubResource("BoxShape3D_kaxur")
-debug_color = Color(0.678973, 0.504376, 0, 0.42)
-
-[node name="CollisionShape3D3" type="CollisionShape3D" parent="Areas/Hallway2Loader"]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -14, 0.5, 12.6777)
-shape = SubResource("BoxShape3D_0qpgw")
-debug_color = Color(0.678973, 0.504376, 0, 0.42)
-
-[node name="WorldFloor" type="StaticBody3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
-metadata/_edit_lock_ = true
-metadata/_edit_group_ = true
-
-[node name="CollisionShape3D" type="CollisionShape3D" parent="WorldFloor"]
-shape = SubResource("WorldBoundaryShape3D_g60qb")
-
-[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
-transform = Transform3D(5.58473, 6.33307, 0, -6.33307, 5.58473, 0, 0, 0, 8.44375, -13.6652, 0, -15.4998)
-mesh = SubResource("CylinderMesh_g60qb")
-
-[node name="PlayerSpawnPoint" type="Marker3D" parent="."]
-transform = Transform3D(0.330597, 0, 0.943772, 0, 1, 0, -0.943772, 0, 0.330597, 2.60837, 0.5, 3.3168)
-script = ExtResource("3_yaqeo")
-metadata/_custom_type_script = "uid://3hlvt5k34xva"
-
-[node name="PlayerSpawnPoint2" type="Marker3D" parent="."]
-transform = Transform3D(0.330597, 0, 0.943772, 0, 1, 0, -0.943772, 0, 0.330597, 2.60837, 0.5, -2.6832)
-script = ExtResource("3_yaqeo")
-spawn_index = 1
-metadata/_custom_type_script = "uid://3hlvt5k34xva"
-
-[node name="PlayerSpawnPoint3" type="Marker3D" parent="."]
-transform = Transform3D(0.43358, 0, -0.901115, 0, 1, 0, 0.901115, 0, 0.43358, -14.3916, 0.5, -2.6832)
-script = ExtResource("3_yaqeo")
-spawn_index = 2
-metadata/_custom_type_script = "uid://3hlvt5k34xva"
-
-[node name="Saw" parent="." instance=ExtResource("4_4rgsp")]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.31477, 1.59362, 6.44809)
diff --git a/source/maps/_dynamic_load_test/area_1.tscn b/source/maps/_dynamic_load_test/area_1.tscn
deleted file mode 100644
index 39dcfe6..0000000
--- a/source/maps/_dynamic_load_test/area_1.tscn
+++ /dev/null
@@ -1,6426 +0,0 @@
-[gd_scene load_steps=6 format=3 uid="uid://cae1iasqr2mf1"]
-
-[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_2egex"]
-albedo_color = Color(0.589291, 0.560155, 1, 1)
-
-[sub_resource type="FastNoiseLite" id="FastNoiseLite_2egex"]
-resource_local_to_scene = true
-
-[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_limus"]
-resource_local_to_scene = true
-width = 2048
-height = 2048
-noise = SubResource("FastNoiseLite_2egex")
-
-[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_limus"]
-resource_local_to_scene = true
-albedo_texture = SubResource("NoiseTexture2D_limus")
-
-[sub_resource type="QuadMesh" id="QuadMesh_8n3f7"]
-
-[node name="Area1" type="CSGCombiner3D"]
-use_collision = true
-
-[node name="CSGBox3D" type="CSGBox3D" parent="."]
-size = Vector3(8, 1, 7)
-material = SubResource("StandardMaterial3D_2egex")
-
-[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D2" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D3" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D4" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D5" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D6" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D7" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D8" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D9" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D10" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D11" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D12" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D13" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D14" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D15" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D16" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D17" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D18" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D19" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D20" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D21" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D22" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D23" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D24" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D25" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D26" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D27" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D28" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D29" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D30" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D31" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D32" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D33" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D34" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D35" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D36" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D37" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D38" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D39" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D40" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D41" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D42" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D43" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D44" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D45" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D46" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D47" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D48" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D49" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D50" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D51" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D52" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D53" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D54" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D55" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D56" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D57" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D58" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D59" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D60" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D61" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D62" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D63" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D64" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D65" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D66" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D67" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D68" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D69" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D70" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D71" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D72" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D73" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D74" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D75" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D76" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D77" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D78" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D79" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D80" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D81" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D82" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D83" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D84" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D85" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D86" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D87" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D88" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D89" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D90" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D91" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D92" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D93" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D94" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D95" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D96" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D97" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D98" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D99" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D100" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D101" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D102" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D103" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D104" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D105" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D106" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D107" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D108" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D109" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D110" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D111" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D112" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D113" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D114" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D115" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D116" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D117" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D118" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D119" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D120" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D121" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D122" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D123" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D124" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D125" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D126" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D127" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D128" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D129" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D130" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D131" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D132" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D133" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D134" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D135" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D136" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D137" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D138" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D139" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D140" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D141" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D142" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D143" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D144" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D145" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D146" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D147" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D148" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D149" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D150" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D151" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D152" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D153" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D154" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D155" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D156" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D157" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D158" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D159" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D160" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D161" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D162" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D163" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D164" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D165" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D166" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D167" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D168" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D169" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D170" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D171" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D172" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D173" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D174" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D175" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D176" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D177" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D178" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D179" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D180" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D181" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D182" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D183" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D184" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D185" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D186" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D187" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D188" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D189" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D190" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D191" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D192" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D193" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D194" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D195" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D196" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D197" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D198" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D199" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D200" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D201" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D202" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D203" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D204" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D205" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D206" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D207" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D208" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D209" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D210" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D211" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D212" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D213" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D214" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D215" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D216" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D217" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D218" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D219" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D220" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D221" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D222" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D223" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D224" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D225" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D226" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D227" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D228" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D229" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D230" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D231" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D232" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D233" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D234" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D235" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D236" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D237" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D238" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D239" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D240" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D241" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D242" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D243" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D244" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D245" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D246" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D247" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D248" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D249" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D250" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D251" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D252" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D253" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D254" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D255" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D256" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D257" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D258" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D259" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D260" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D261" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D262" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D263" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D264" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D265" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D266" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D267" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D268" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D269" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D270" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D271" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D272" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D273" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D274" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D275" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D276" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D277" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D278" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D279" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D280" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D281" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D282" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D283" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D284" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D285" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D286" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D287" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D288" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D289" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D290" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D291" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D292" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D293" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D294" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D295" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D296" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D297" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D298" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D299" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D300" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D301" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D302" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D303" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D304" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D305" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D306" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D307" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D308" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D309" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D310" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D311" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D312" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D313" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D314" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D315" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D316" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D317" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D318" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D319" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D320" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D321" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D322" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D323" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D324" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D325" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D326" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D327" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D328" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D329" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D330" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D331" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D332" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D333" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D334" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D335" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D336" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D337" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D338" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D339" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D340" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D341" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D342" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D343" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D344" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D345" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D346" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D347" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D348" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D349" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D350" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D351" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D352" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D353" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D354" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D355" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D356" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D357" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D358" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D359" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D360" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D361" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D362" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D363" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D364" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D365" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D366" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D367" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D368" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D369" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D370" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D371" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D372" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D373" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D374" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D375" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D376" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D377" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D378" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D379" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D380" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D381" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D382" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D383" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D384" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D385" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D386" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D387" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D388" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D389" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D390" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D391" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D392" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D393" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D394" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D395" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D396" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D397" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D398" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D399" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D400" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D401" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D402" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D403" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D404" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D405" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D406" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D407" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D408" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D409" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D410" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D411" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D412" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D413" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D414" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D415" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D416" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D417" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D418" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D419" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D420" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D421" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D422" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D423" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D424" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D425" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D426" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D427" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D428" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D429" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D430" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D431" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D432" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D433" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D434" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D435" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D436" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D437" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D438" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D439" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D440" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D441" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D442" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D443" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D444" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D445" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D446" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D447" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D448" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D449" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D450" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D451" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D452" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D453" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D454" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D455" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D456" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D457" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D458" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D459" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D460" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D461" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D462" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D463" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D464" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D465" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D466" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D467" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D468" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D469" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D470" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D471" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D472" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D473" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D474" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D475" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D476" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D477" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D478" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D479" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D480" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D481" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D482" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D483" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D484" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D485" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D486" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D487" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D488" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D489" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D490" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D491" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D492" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D493" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D494" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D495" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D496" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D497" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D498" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D499" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D500" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D501" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D502" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D503" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D504" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D505" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D506" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D507" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D508" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D509" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D510" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D511" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D512" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D513" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D514" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D515" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D516" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D517" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D518" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D519" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D520" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D521" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D522" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D523" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D524" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D525" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D526" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D527" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D528" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D529" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D530" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D531" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D532" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D533" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D534" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D535" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D536" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D537" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D538" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D539" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D540" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D541" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D542" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D543" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D544" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D545" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D546" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D547" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D548" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D549" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D550" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D551" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D552" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D553" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D554" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D555" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D556" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D557" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D558" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D559" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D560" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D561" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D562" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D563" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D564" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D565" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D566" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D567" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D568" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D569" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D570" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D571" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D572" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D573" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D574" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D575" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D576" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D577" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D578" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D579" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D580" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D581" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D582" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D583" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D584" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D585" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D586" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D587" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D588" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D589" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D590" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D591" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D592" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D593" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D594" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D595" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D596" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D597" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D598" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D599" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D600" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D601" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D602" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D603" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D604" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D605" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D606" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D607" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D608" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D609" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D610" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D611" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D612" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D613" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D614" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D615" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D616" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D617" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D618" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D619" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D620" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D621" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D622" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D623" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D624" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D625" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D626" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D627" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D628" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D629" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D630" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D631" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D632" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D633" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D634" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D635" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D636" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D637" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D638" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D639" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D640" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D641" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D642" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D643" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D644" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D645" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D646" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D647" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D648" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D649" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D650" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D651" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D652" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D653" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D654" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D655" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D656" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D657" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D658" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D659" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D660" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D661" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D662" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D663" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D664" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D665" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D666" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D667" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D668" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D669" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D670" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D671" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D672" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D673" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D674" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D675" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D676" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D677" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D678" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D679" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D680" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D681" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D682" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D683" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D684" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D685" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D686" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D687" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D688" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D689" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D690" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D691" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D692" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D693" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D694" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D695" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D696" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D697" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D698" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D699" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D700" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D701" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D702" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D703" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D704" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D705" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D706" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D707" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D708" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D709" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D710" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D711" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D712" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D713" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D714" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D715" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D716" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D717" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D718" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D719" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D720" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D721" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D722" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D723" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D724" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D725" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D726" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D727" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D728" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D729" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D730" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D731" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D732" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D733" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D734" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D735" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D736" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D737" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D738" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D739" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D740" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D741" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D742" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D743" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D744" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D745" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D746" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D747" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D748" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D749" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D750" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D751" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D752" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D753" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D754" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D755" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D756" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D757" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D758" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D759" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D760" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D761" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D762" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D763" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D764" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D765" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D766" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D767" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D768" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D769" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D770" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D771" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D772" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D773" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D774" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D775" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D776" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D777" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D778" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D779" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D780" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D781" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D782" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D783" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D784" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D785" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D786" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D787" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D788" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D789" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D790" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D791" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D792" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D793" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D794" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D795" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D796" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D797" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D798" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D799" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D800" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D801" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D802" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D803" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D804" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D805" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D806" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D807" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D808" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D809" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D810" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D811" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D812" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D813" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D814" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D815" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D816" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D817" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D818" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D819" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D820" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D821" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D822" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D823" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D824" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D825" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D826" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D827" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D828" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D829" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D830" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D831" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D832" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D833" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D834" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D835" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D836" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D837" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D838" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D839" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D840" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D841" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D842" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D843" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D844" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D845" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D846" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D847" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D848" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D849" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D850" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D851" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D852" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D853" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D854" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D855" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D856" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D857" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D858" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D859" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D860" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D861" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D862" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D863" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D864" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D865" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D866" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D867" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D868" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D869" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D870" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D871" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D872" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D873" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D874" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D875" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D876" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D877" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D878" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D879" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D880" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D881" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D882" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D883" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D884" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D885" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D886" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D887" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D888" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D889" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D890" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D891" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D892" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D893" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D894" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D895" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D896" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D897" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D898" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D899" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D900" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D901" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D902" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D903" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D904" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D905" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D906" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D907" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D908" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D909" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D910" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D911" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D912" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D913" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D914" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D915" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D916" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D917" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D918" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D919" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D920" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D921" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D922" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D923" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D924" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D925" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D926" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D927" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D928" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D929" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D930" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D931" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D932" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D933" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D934" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D935" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D936" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D937" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D938" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D939" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D940" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D941" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D942" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D943" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D944" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D945" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D946" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D947" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D948" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D949" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D950" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D951" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D952" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D953" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D954" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D955" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D956" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D957" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D958" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D959" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D960" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D961" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D962" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D963" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D964" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D965" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D966" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D967" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D968" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D969" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D970" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D971" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D972" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D973" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D974" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D975" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D976" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D977" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D978" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D979" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D980" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D981" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D982" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D983" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D984" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D985" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D986" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D987" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D988" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D989" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D990" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D991" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D992" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D993" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D994" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D995" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D996" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D997" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D998" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D999" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1000" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1001" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1002" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1003" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1004" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1005" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1006" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1007" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1008" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1009" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1010" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1011" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1012" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1013" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1014" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1015" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1016" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1017" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1018" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1019" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1020" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1021" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1022" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1023" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1024" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1025" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1026" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1027" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1028" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1029" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1030" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1031" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1032" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1033" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1034" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1035" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1036" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1037" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1038" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1039" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1040" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1041" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1042" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1043" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1044" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1045" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1046" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1047" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1048" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1049" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1050" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1051" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1052" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1053" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1054" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1055" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1056" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1057" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1058" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1059" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1060" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1061" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1062" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1063" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1064" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1065" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1066" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1067" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1068" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1069" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1070" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1071" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1072" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1073" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1074" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1075" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1076" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1077" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1078" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1079" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1080" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1081" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1082" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1083" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1084" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1085" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1086" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1087" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1088" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1089" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1090" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1091" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1092" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1093" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1094" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1095" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1096" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1097" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1098" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1099" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1100" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1101" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1102" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1103" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1104" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1105" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1106" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1107" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1108" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1109" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1110" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1111" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1112" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1113" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1114" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1115" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1116" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1117" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1118" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1119" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1120" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1121" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1122" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1123" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1124" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1125" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1126" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1127" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1128" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1129" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1130" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1131" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1132" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1133" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1134" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1135" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1136" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1137" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1138" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1139" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1140" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1141" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1142" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1143" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1144" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1145" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1146" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1147" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1148" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1149" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1150" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1151" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1152" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1153" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1154" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1155" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1156" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1157" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1158" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1159" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1160" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1161" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1162" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1163" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1164" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1165" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1166" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1167" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1168" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1169" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1170" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1171" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1172" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1173" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1174" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1175" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1176" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1177" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1178" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1179" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1180" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1181" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1182" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1183" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1184" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1185" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1186" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1187" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1188" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1189" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1190" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1191" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1192" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1193" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1194" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1195" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1196" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1197" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1198" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1199" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1200" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1201" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1202" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1203" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1204" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1205" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1206" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1207" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1208" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1209" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1210" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1211" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1212" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1213" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1214" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1215" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1216" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1217" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1218" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1219" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1220" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1221" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1222" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1223" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1224" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1225" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1226" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1227" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1228" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1229" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1230" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1231" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1232" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1233" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1234" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1235" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1236" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1237" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1238" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1239" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1240" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1241" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1242" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1243" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1244" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1245" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1246" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1247" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1248" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1249" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1250" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1251" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1252" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1253" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1254" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1255" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1256" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1257" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1258" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1259" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1260" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1261" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1262" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1263" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1264" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1265" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1266" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1267" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1268" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1269" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1270" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1271" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1272" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1273" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1274" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1275" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1276" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1277" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1278" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1279" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
-
-[node name="MeshInstance3D1280" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_limus")
-mesh = SubResource("QuadMesh_8n3f7")
diff --git a/source/maps/_dynamic_load_test/area_2.tscn b/source/maps/_dynamic_load_test/area_2.tscn
deleted file mode 100644
index 063aa83..0000000
--- a/source/maps/_dynamic_load_test/area_2.tscn
+++ /dev/null
@@ -1,6426 +0,0 @@
-[gd_scene load_steps=6 format=3 uid="uid://f5ti7f6p5x03"]
-
-[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_wp0cu"]
-albedo_color = Color(0, 0.586893, 0.0976942, 1)
-
-[sub_resource type="FastNoiseLite" id="FastNoiseLite_wp0cu"]
-resource_local_to_scene = true
-
-[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_wp0cu"]
-resource_local_to_scene = true
-width = 2048
-height = 2048
-noise = SubResource("FastNoiseLite_wp0cu")
-
-[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_mg84x"]
-resource_local_to_scene = true
-albedo_texture = SubResource("NoiseTexture2D_wp0cu")
-
-[sub_resource type="QuadMesh" id="QuadMesh_0d8tl"]
-
-[node name="Area2" type="CSGCombiner3D"]
-use_collision = true
-
-[node name="CSGBox3D" type="CSGBox3D" parent="."]
-size = Vector3(8, 1, 7)
-material = SubResource("StandardMaterial3D_wp0cu")
-
-[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D2" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D3" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D4" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D5" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D6" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D7" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D8" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D9" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D10" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D11" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D12" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D13" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D14" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D15" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D16" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D17" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D18" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D19" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D20" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D21" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D22" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D23" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D24" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D25" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D26" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D27" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D28" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D29" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D30" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D31" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D32" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D33" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D34" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D35" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D36" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D37" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D38" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D39" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D40" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D41" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D42" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D43" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D44" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D45" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D46" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D47" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D48" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D49" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D50" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D51" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D52" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D53" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D54" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D55" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D56" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D57" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D58" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D59" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D60" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D61" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D62" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D63" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D64" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D65" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D66" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D67" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D68" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D69" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D70" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D71" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D72" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D73" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D74" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D75" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D76" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D77" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D78" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D79" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D80" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D81" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D82" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D83" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D84" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D85" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D86" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D87" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D88" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D89" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D90" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D91" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D92" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D93" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D94" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D95" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D96" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D97" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D98" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D99" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D100" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D101" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D102" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D103" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D104" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D105" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D106" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D107" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D108" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D109" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D110" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D111" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D112" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D113" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D114" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D115" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D116" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D117" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D118" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D119" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D120" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D121" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D122" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D123" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D124" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D125" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D126" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D127" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D128" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D129" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D130" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D131" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D132" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D133" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D134" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D135" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D136" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D137" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D138" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D139" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D140" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D141" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D142" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D143" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D144" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D145" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D146" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D147" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D148" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D149" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D150" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D151" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D152" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D153" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D154" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D155" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D156" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D157" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D158" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D159" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D160" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D161" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D162" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D163" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D164" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D165" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D166" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D167" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D168" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D169" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D170" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D171" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D172" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D173" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D174" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D175" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D176" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D177" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D178" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D179" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D180" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D181" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D182" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D183" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D184" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D185" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D186" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D187" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D188" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D189" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D190" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D191" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D192" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D193" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D194" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D195" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D196" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D197" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D198" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D199" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D200" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D201" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D202" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D203" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D204" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D205" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D206" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D207" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D208" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D209" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D210" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D211" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D212" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D213" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D214" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D215" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D216" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D217" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D218" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D219" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D220" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D221" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D222" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D223" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D224" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D225" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D226" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D227" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D228" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D229" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D230" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D231" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D232" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D233" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D234" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D235" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D236" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D237" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D238" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D239" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D240" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D241" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D242" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D243" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D244" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D245" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D246" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D247" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D248" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D249" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D250" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D251" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D252" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D253" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D254" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D255" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D256" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D257" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D258" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D259" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D260" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D261" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D262" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D263" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D264" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D265" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D266" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D267" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D268" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D269" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D270" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D271" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D272" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D273" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D274" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D275" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D276" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D277" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D278" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D279" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D280" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D281" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D282" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D283" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D284" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D285" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D286" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D287" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D288" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D289" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D290" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D291" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D292" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D293" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D294" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D295" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D296" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D297" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D298" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D299" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D300" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D301" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D302" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D303" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D304" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D305" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D306" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D307" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D308" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D309" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D310" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D311" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D312" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D313" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D314" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D315" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D316" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D317" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D318" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D319" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D320" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D321" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D322" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D323" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D324" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D325" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D326" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D327" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D328" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D329" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D330" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D331" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D332" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D333" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D334" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D335" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D336" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D337" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D338" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D339" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D340" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D341" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D342" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D343" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D344" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D345" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D346" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D347" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D348" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D349" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D350" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D351" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D352" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D353" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D354" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D355" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D356" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D357" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D358" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D359" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D360" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D361" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D362" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D363" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D364" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D365" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D366" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D367" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D368" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D369" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D370" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D371" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D372" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D373" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D374" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D375" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D376" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D377" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D378" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D379" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D380" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D381" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D382" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D383" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D384" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D385" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D386" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D387" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D388" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D389" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D390" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D391" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D392" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D393" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D394" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D395" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D396" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D397" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D398" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D399" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D400" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D401" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D402" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D403" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D404" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D405" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D406" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D407" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D408" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D409" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D410" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D411" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D412" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D413" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D414" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D415" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D416" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D417" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D418" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D419" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D420" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D421" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D422" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D423" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D424" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D425" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D426" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D427" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D428" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D429" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D430" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D431" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D432" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D433" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D434" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D435" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D436" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D437" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D438" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D439" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D440" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D441" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D442" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D443" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D444" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D445" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D446" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D447" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D448" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D449" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D450" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D451" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D452" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D453" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D454" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D455" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D456" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D457" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D458" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D459" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D460" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D461" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D462" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D463" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D464" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D465" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D466" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D467" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D468" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D469" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D470" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D471" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D472" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D473" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D474" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D475" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D476" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D477" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D478" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D479" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D480" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D481" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D482" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D483" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D484" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D485" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D486" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D487" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D488" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D489" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D490" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D491" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D492" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D493" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D494" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D495" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D496" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D497" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D498" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D499" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D500" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D501" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D502" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D503" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D504" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D505" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D506" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D507" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D508" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D509" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D510" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D511" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D512" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D513" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D514" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D515" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D516" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D517" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D518" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D519" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D520" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D521" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D522" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D523" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D524" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D525" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D526" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D527" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D528" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D529" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D530" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D531" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D532" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D533" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D534" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D535" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D536" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D537" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D538" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D539" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D540" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D541" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D542" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D543" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D544" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D545" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D546" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D547" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D548" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D549" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D550" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D551" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D552" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D553" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D554" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D555" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D556" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D557" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D558" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D559" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D560" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D561" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D562" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D563" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D564" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D565" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D566" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D567" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D568" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D569" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D570" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D571" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D572" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D573" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D574" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D575" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D576" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D577" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D578" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D579" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D580" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D581" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D582" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D583" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D584" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D585" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D586" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D587" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D588" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D589" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D590" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D591" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D592" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D593" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D594" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D595" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D596" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D597" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D598" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D599" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D600" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D601" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D602" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D603" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D604" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D605" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D606" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D607" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D608" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D609" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D610" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D611" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D612" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D613" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D614" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D615" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D616" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D617" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D618" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D619" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D620" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D621" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D622" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D623" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D624" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D625" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D626" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D627" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D628" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D629" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D630" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D631" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D632" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D633" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D634" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D635" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D636" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D637" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D638" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D639" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D640" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D641" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D642" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D643" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D644" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D645" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D646" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D647" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D648" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D649" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D650" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D651" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D652" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D653" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D654" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D655" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D656" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D657" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D658" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D659" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D660" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D661" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D662" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D663" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D664" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D665" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D666" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D667" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D668" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D669" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D670" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D671" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D672" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D673" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D674" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D675" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D676" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D677" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D678" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D679" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D680" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D681" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D682" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D683" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D684" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D685" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D686" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D687" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D688" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D689" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D690" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D691" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D692" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D693" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D694" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D695" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D696" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D697" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D698" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D699" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D700" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D701" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D702" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D703" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D704" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D705" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D706" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D707" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D708" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D709" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D710" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D711" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D712" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D713" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D714" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D715" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D716" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D717" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D718" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D719" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D720" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D721" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D722" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D723" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D724" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D725" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D726" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D727" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D728" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D729" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D730" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D731" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D732" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D733" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D734" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D735" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D736" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D737" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D738" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D739" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D740" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D741" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D742" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D743" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D744" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D745" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D746" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D747" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D748" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D749" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D750" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D751" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D752" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D753" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D754" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D755" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D756" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D757" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D758" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D759" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D760" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D761" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D762" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D763" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D764" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D765" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D766" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D767" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D768" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D769" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D770" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D771" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D772" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D773" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D774" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D775" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D776" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D777" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D778" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D779" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D780" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D781" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D782" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D783" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D784" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D785" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D786" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D787" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D788" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D789" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D790" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D791" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D792" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D793" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D794" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D795" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D796" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D797" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D798" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D799" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D800" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D801" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D802" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D803" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D804" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D805" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D806" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D807" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D808" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D809" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D810" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D811" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D812" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D813" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D814" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D815" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D816" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D817" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D818" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D819" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D820" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D821" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D822" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D823" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D824" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D825" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D826" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D827" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D828" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D829" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D830" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D831" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D832" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D833" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D834" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D835" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D836" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D837" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D838" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D839" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D840" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D841" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D842" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D843" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D844" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D845" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D846" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D847" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D848" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D849" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D850" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D851" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D852" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D853" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D854" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D855" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D856" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D857" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D858" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D859" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D860" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D861" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D862" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D863" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D864" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D865" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D866" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D867" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D868" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D869" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D870" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D871" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D872" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D873" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D874" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D875" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D876" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D877" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D878" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D879" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D880" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D881" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D882" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D883" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D884" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D885" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D886" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D887" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D888" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D889" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D890" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D891" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D892" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D893" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D894" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D895" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D896" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D897" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D898" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D899" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D900" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D901" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D902" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D903" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D904" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D905" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D906" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D907" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D908" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D909" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D910" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D911" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D912" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D913" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D914" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D915" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D916" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D917" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D918" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D919" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D920" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D921" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D922" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D923" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D924" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D925" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D926" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D927" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D928" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D929" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D930" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D931" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D932" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D933" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D934" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D935" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D936" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D937" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D938" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D939" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D940" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D941" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D942" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D943" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D944" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D945" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D946" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D947" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D948" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D949" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D950" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D951" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D952" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D953" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D954" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D955" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D956" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D957" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D958" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D959" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D960" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D961" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D962" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D963" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D964" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D965" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D966" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D967" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D968" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D969" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D970" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D971" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D972" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D973" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D974" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D975" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D976" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D977" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D978" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D979" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D980" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D981" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D982" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D983" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D984" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D985" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D986" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D987" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D988" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D989" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D990" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D991" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D992" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D993" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D994" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D995" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D996" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D997" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D998" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D999" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1000" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1001" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1002" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1003" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1004" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1005" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1006" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1007" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1008" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1009" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1010" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1011" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1012" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1013" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1014" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1015" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1016" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1017" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1018" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1019" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1020" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1021" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1022" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1023" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1024" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1025" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1026" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1027" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1028" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1029" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1030" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1031" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1032" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1033" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1034" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1035" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1036" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1037" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1038" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1039" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1040" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1041" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1042" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1043" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1044" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1045" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1046" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1047" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1048" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1049" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1050" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1051" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1052" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1053" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1054" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1055" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1056" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1057" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1058" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1059" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1060" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1061" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1062" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1063" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1064" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1065" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1066" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1067" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1068" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1069" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1070" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1071" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1072" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1073" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1074" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1075" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1076" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1077" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1078" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1079" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1080" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1081" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1082" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1083" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1084" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1085" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1086" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1087" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1088" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1089" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1090" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1091" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1092" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1093" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1094" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1095" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1096" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1097" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1098" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1099" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1100" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1101" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1102" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1103" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1104" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1105" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1106" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1107" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1108" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1109" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1110" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1111" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1112" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1113" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1114" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1115" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1116" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1117" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1118" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1119" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1120" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1121" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1122" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1123" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1124" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1125" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1126" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1127" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1128" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1129" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1130" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1131" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1132" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1133" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1134" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1135" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1136" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1137" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1138" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1139" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1140" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1141" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1142" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1143" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1144" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1145" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1146" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1147" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1148" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1149" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1150" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1151" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1152" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1153" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1154" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1155" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1156" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1157" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1158" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1159" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1160" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1161" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1162" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1163" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1164" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1165" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1166" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1167" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1168" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1169" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1170" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1171" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1172" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1173" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1174" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1175" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1176" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1177" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1178" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1179" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1180" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1181" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1182" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1183" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1184" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1185" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1186" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1187" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1188" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1189" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1190" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1191" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1192" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1193" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1194" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1195" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1196" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1197" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1198" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1199" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1200" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1201" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1202" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1203" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1204" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1205" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1206" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1207" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1208" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1209" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1210" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1211" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1212" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1213" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1214" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1215" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1216" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1217" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1218" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1219" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1220" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1221" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1222" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1223" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1224" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1225" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1226" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1227" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1228" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1229" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1230" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1231" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1232" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1233" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1234" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1235" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1236" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1237" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1238" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1239" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1240" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1241" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1242" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1243" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1244" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1245" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1246" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1247" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1248" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1249" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1250" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1251" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1252" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1253" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1254" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1255" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1256" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1257" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1258" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1259" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1260" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1261" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1262" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1263" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1264" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1265" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1266" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1267" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1268" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1269" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1270" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1271" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1272" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1273" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1274" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1275" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1276" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1277" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1278" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1279" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
-
-[node name="MeshInstance3D1280" type="MeshInstance3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.810536, 0)
-material_override = SubResource("StandardMaterial3D_mg84x")
-mesh = SubResource("QuadMesh_0d8tl")
diff --git a/source/maps/_dynamic_load_test/hallway_1.tscn b/source/maps/_dynamic_load_test/hallway_1.tscn
deleted file mode 100644
index c83b89c..0000000
--- a/source/maps/_dynamic_load_test/hallway_1.tscn
+++ /dev/null
@@ -1,56 +0,0 @@
-[gd_scene format=3 uid="uid://dr0gtcel5qdqg"]
-
-[node name="Hallway1" type="CSGCombiner3D"]
-use_collision = true
-
-[node name="Floor" type="CSGBox3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4, 0, 1)
-size = Vector3(8, 1, 3)
-
-[node name="Floor2" type="CSGBox3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.5, 0, 7.5)
-size = Vector3(3, 1, 10)
-
-[node name="Floor3" type="CSGBox3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5.5, 0, 10.5)
-size = Vector3(21, 1, 4)
-
-[node name="Ceiling" type="CSGBox3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4, 5, 1)
-size = Vector3(8, 1, 3)
-
-[node name="Ceiling2" type="CSGBox3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.5, 5, 7.5)
-size = Vector3(3, 1, 10)
-
-[node name="Ceiling3" type="CSGBox3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5.5, 5, 10.5)
-size = Vector3(21, 1, 4)
-
-[node name="Wall" type="CSGBox3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -4, 2.5, 13)
-size = Vector3(24, 6, 1)
-
-[node name="Wall2" type="CSGBox3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4, 2.5, -1)
-size = Vector3(8, 6, 1)
-
-[node name="Wall3" type="CSGBox3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3.5, 2.5, 8)
-size = Vector3(17, 6, 1)
-
-[node name="Wall4" type="CSGBox3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.5, 2.5, 3)
-size = Vector3(5, 6, 1)
-
-[node name="Wall5" type="CSGBox3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 8.5, 2.5, 6)
-size = Vector3(1, 6, 15)
-
-[node name="Wall6" type="CSGBox3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.5, 2.5, 5.5)
-size = Vector3(1, 6, 4)
-
-[node name="Wall7" type="CSGBox3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -16.5, 2.5, 11)
-size = Vector3(1, 6, 5)
diff --git a/source/maps/_dynamic_load_test/hallway_2.tscn b/source/maps/_dynamic_load_test/hallway_2.tscn
deleted file mode 100644
index 8dfb45d..0000000
--- a/source/maps/_dynamic_load_test/hallway_2.tscn
+++ /dev/null
@@ -1,68 +0,0 @@
-[gd_scene format=3 uid="uid://loo81pvlxlhh"]
-
-[node name="Hallway2" type="CSGCombiner3D"]
-use_collision = true
-
-[node name="Floor" type="CSGBox3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -14.5, 0, 1.5)
-size = Vector3(3, 1, 14)
-
-[node name="Floor2" type="CSGBox3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -16.5, 0, -7)
-size = Vector3(7, 1, 3)
-
-[node name="Floor3" type="CSGBox3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -18.5, 0, -12)
-size = Vector3(3, 1, 7)
-
-[node name="Floor4" type="CSGBox3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -12.5, 0, -14)
-size = Vector3(9, 1, 3)
-
-[node name="Wall" type="CSGBox3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -14, 2.5, -16)
-size = Vector3(12, 6, 1)
-
-[node name="Wall2" type="CSGBox3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -12.5, 2.5, -12)
-size = Vector3(9, 6, 1)
-
-[node name="Wall3" type="CSGBox3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -14.5, 2.5, -9)
-size = Vector3(5, 6, 1)
-
-[node name="Wall4" type="CSGBox3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -18.5, 2.5, -5)
-size = Vector3(5, 6, 1)
-
-[node name="Wall5" type="CSGBox3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -20.5, 2.5, -11)
-size = Vector3(1, 6, 11)
-
-[node name="Wall6" type="CSGBox3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -16.5, 2.5, -10.5)
-size = Vector3(1, 6, 2)
-
-[node name="Wall7" type="CSGBox3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -12.5, 2.5, 0)
-size = Vector3(1, 6, 17)
-
-[node name="Wall8" type="CSGBox3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -16.5, 2.5, 2)
-size = Vector3(1, 6, 13)
-
-[node name="Ceiling" type="CSGBox3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -14.5, 5, 1.5)
-size = Vector3(3, 1, 14)
-
-[node name="Ceiling2" type="CSGBox3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -16.5, 5, -7)
-size = Vector3(7, 1, 3)
-
-[node name="Ceiling3" type="CSGBox3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -18.5, 5, -12)
-size = Vector3(3, 1, 7)
-
-[node name="Ceiling4" type="CSGBox3D" parent="."]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -12.5, 5, -14)
-size = Vector3(9, 1, 3)
diff --git a/source/project.godot b/source/project.godot
index 27d7dae..20dd17e 100644
--- a/source/project.godot
+++ b/source/project.godot
@@ -12,35 +12,52 @@ config_version=5
config/name="MagicNStuff"
run/main_scene="uid://coga3ke4xw3a0"
-config/features=PackedStringArray("4.4", "Forward Plus")
+config/features=PackedStringArray("4.5", "Forward Plus")
config/icon="uid://bovb32x4x3ps5"
[autoload]
-SettingsManager="*res://globals/autoloads/settings/settings_manager.gd"
-SceneFader="*res://globals/autoloads/scene_fader/scene_fader.tscn"
-GameGlobals="*res://globals/autoloads/game_globals.gd"
-InputManager="*res://globals/autoloads/input_manager.gd"
-SaveManager="*res://globals/autoloads/save_manager.gd"
-AudioManager="*res://globals/autoloads/audio/audio_manager.tscn"
+SettingsManager="*res://src/globals/autoloads/settings/settings_manager.gd"
+SceneFader="*res://src/globals/autoloads/scene_fader/scene_fader.tscn"
+GameGlobals="*res://src/globals/autoloads/game_globals.gd"
+InputManager="*res://src/globals/autoloads/input_manager.gd"
+SaveManager="*res://src/globals/autoloads/save_manager.gd"
+AudioManager="*res://src/globals/autoloads/audio/audio_manager.tscn"
Logger="*res://addons/logger/logger.tscn"
-RunConfigManager="*res://addons/run-configs/run-config-manager.gd"
VersionDisplay="*res://addons/version_display/version_display.tscn"
Panku="*res://addons/panku_console/console.tscn"
+ControllerIcons="*res://addons/controller_icons/ControllerIcons.gd"
+SPrint="*res://addons/logger/logger.tscn"
+RunConfigManager="*res://addons/run-configs/run-config-manager.gd"
+
+[debug]
+
+gdscript/warnings/untyped_declaration=2
+
+[debug_draw_3d]
+
+settings/3d/volumetric_defaults/thickness=0.0
[editor_plugins]
-enabled=PackedStringArray("res://addons/bbcode_edit.editor/plugin.cfg", "res://addons/logger/plugin.cfg", "res://addons/panku_console/plugin.cfg", "res://addons/run-configs/plugin.cfg", "res://addons/version_display/plugin.cfg")
+enabled=PackedStringArray("res://addons/bbcode_edit.editor/plugin.cfg", "res://addons/boxconstructor/plugin.cfg", "res://addons/controller_icons/plugin.cfg", "res://addons/logger/plugin.cfg", "res://addons/panku_console/plugin.cfg", "res://addons/run-configs/plugin.cfg", "res://addons/version_display/plugin.cfg")
[file_customization]
folder_colors={
"res://addons/": "gray",
-"res://components/": "green",
-"res://globals/": "orange",
+"res://assets/": "pink",
"res://localization/": "teal",
-"res://maps/": "yellow",
-"res://resources/": "purple"
+"res://resources/": "purple",
+"res://src/": "green",
+"res://src/core/": "gray",
+"res://src/dialogue/": "yellow",
+"res://src/gameplay/": "orange",
+"res://src/gameplay/hazards/": "red",
+"res://src/globals/": "orange",
+"res://src/levels/": "yellow",
+"res://src/ui/": "blue",
+"res://src/vfx/": "pink"
}
[input]
@@ -142,8 +159,30 @@ bbcode_edit/editor/open_current_file_documentation={
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":true,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194332,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
]
}
+crouch={
+"deadzone": 0.2,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194326,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":1,"pressure":0.0,"pressed":true,"script":null)
+]
+}
[internationalization]
locale/translations=PackedStringArray("res://localization/de.mo", "res://localization/de.po", "res://localization/en.mo", "res://localization/en.po")
-locale/translations_pot_files=PackedStringArray("res://components/ui/menus/main_menu/main_menu.tscn")
+locale/translations_pot_files=PackedStringArray("res://src/ui/menus/main_menu/main_menu.tscn", "res://src/ui/menus/pause_menu/pause_menu.tscn", "res://src/ui/menus/options_menu/options_menu.tscn", "res://src/ui/menus/death_screen/death_screen.tscn")
+
+[layer_names]
+
+3d_render/layer_1="Static"
+3d_render/layer_2="Dynamic"
+3d_physics/layer_2="Characters"
+3d_physics/layer_11="World"
+
+[rendering]
+
+anti_aliasing/quality/screen_space_aa=2
+
+[run_configs]
+
+data/configs=["{\"custom_scene\":\"uid://s7cw6ulb7kh7\",\"environment_variables\":{},\"name\":\"Game\",\"play_mode\":2}"]
+data/current=0
diff --git a/source/src/core/camera/camera_trauma_causer.gd b/source/src/core/camera/camera_trauma_causer.gd
new file mode 100644
index 0000000..fb583aa
--- /dev/null
+++ b/source/src/core/camera/camera_trauma_causer.gd
@@ -0,0 +1,61 @@
+@tool
+class_name CameraTraumaCauser
+extends Marker3D
+
+@export var continues_shake: bool = false
+@export var shake_type := ShakingCamera.ShakeType.POSITIONAL
+@export_exp_easing("attenuation") var distance_falloff: float = 1.0
+@export_range(0.0, 10.0, 0.001, "or_greater", "suffix:m") var min_radius: float = 2.5
+@export_range(0.0, 10.0, 0.001, "or_greater", "suffix:m") var max_radius: float = 10.0
+@export_group("Inner(Min) Radius", "min_")
+@export_range(0.0, 1.0, 0.001, "or_greater") var min_shake_intensity: float = 0.5
+@export_range(0.0, 10.0, 0.001, "or_greater", "suffix:s") var min_shake_duration: float = 0.5
+@export_group("Outer(Max) Radius", "max_")
+@export_range(0.0, 1.0, 0.001, "or_greater") var max_shake_intensity: float = 0.5
+@export_range(0.0, 10.0, 0.001, "or_greater", "suffix:s") var max_shake_duration: float = 0.5
+
+
+#func _init() -> void:
+ #if Engine.is_editor_hint():
+ ## Setup hint.
+ #var sprite := Sprite3D.new()
+ #sprite.billboard = BaseMaterial3D.BILLBOARD_ENABLED
+ #sprite.shaded = false
+ #sprite.texture = preload("res://src/general/shaking_camera.svg")
+ #add_child(sprite)
+
+
+func _process(_delta: float) -> void:
+ if Engine.is_editor_hint():
+ # For some reason, Godot doesn't like this when exporting the game...
+ #var editor_selection: EditorSelection = EditorInterface.get_selection()
+ #
+ #if editor_selection.get_selected_nodes().has(self):
+ DebugDraw3D.draw_sphere(global_position, min_radius, Color.RED)
+ DebugDraw3D.draw_sphere(global_position, max_radius, Color.SKY_BLUE)
+ elif continues_shake:
+ cause_trauma()
+
+
+func cause_trauma() -> void:
+ var cameras: Array[ShakingCamera] = ShakingCamera.cameras
+
+ for camera: ShakingCamera in cameras:
+ var distance: float = Utils.node_distance(
+ self,
+ camera.origin if is_instance_valid(camera.origin) else camera
+ )
+
+ if distance > max_radius:
+ continue
+
+ var distance_ratio: float = remap(distance, min_radius, max_radius, 0.0, 1.0)
+ distance_ratio = clampf(ease(distance_ratio, distance_falloff), 0.0, 1.0)
+
+ var intensity: float = remap(distance_ratio, 0.0, 1.0, min_shake_intensity, max_shake_intensity)
+ var duration: float = remap(distance_ratio, 0.0, 1.0, min_shake_duration, max_shake_duration)
+
+ if continues_shake:
+ camera.apply_constant_shake(intensity, shake_type)
+ else:
+ camera.shake(intensity, duration, shake_type)
diff --git a/source/src/core/camera/camera_trauma_causer.gd.uid b/source/src/core/camera/camera_trauma_causer.gd.uid
new file mode 100644
index 0000000..23c52a2
--- /dev/null
+++ b/source/src/core/camera/camera_trauma_causer.gd.uid
@@ -0,0 +1 @@
+uid://dk4pqgs08xphi
diff --git a/source/src/core/camera/shaking_camera.gd b/source/src/core/camera/shaking_camera.gd
new file mode 100644
index 0000000..00577a5
--- /dev/null
+++ b/source/src/core/camera/shaking_camera.gd
@@ -0,0 +1,144 @@
+class_name ShakingCamera
+extends Camera3D
+
+enum ShakeType { POSITIONAL, ROTATIONAL, BOTH }
+#enum ShakeType { OFFSET, POSITIONAL, ROTATIONAL, BOTH }
+
+## A list containing all [ShakingCamera]'s.[br]
+## Used by the [code]static[/code] [method shake_all_cameras]
+## and [method constant_shake_all_cameras] functions.
+static var cameras: Array[ShakingCamera]
+
+@export var shake_intensity_multiplier: float = 1.0
+@export var origin: Node3D = self
+
+## The overall constant [b]positional[/b] intensity that is being
+## added up by [method apply_constant_shake].
+var constant_positional_intensity: float = 0.0
+# The overall constant [b]offset[/b] intensity that is being
+# added up by [method apply_constant_shake].
+#var constant_offset_intensity: float = 0.0
+## The overall constant [b]rotational[/b] intensity that is being
+## added up by [method apply_constant_shake].
+var constant_rotational_intensity: float = 0.0
+## The local origin at which we offset our positional shake from.
+var shake_origin: Vector3 = position
+## The local rotation at which we offset our rotational shake from.
+var shake_rotation_origin: Vector3 = rotation
+#var _offset_intensity: float = 0.0
+var _positional_intensity: float = 0.0
+var _rotational_intensity: float = 0.0
+var _duration: float = 0.001
+var _time_left: float = 0.0
+
+
+## Calls [method shake] on all cameras contained in [member cameras].
+static func shake_all_cameras(intensity: float, duration: float, shake_type := ShakeType.POSITIONAL) -> void:
+ for camera: ShakingCamera in cameras:
+ camera.shake(intensity, duration, shake_type)
+
+
+## Calls [method apply_constant_shake] on all cameras contained in [member cameras].
+static func constant_shake_all_cameras(intensity: float, shake_type := ShakeType.POSITIONAL) -> void:
+ for camera: ShakingCamera in cameras:
+ camera.apply_constant_shake(intensity, shake_type)
+
+
+func _enter_tree() -> void:
+ if not cameras.has(self):
+ cameras.append(self)
+
+
+func _exit_tree() -> void:
+ cameras.erase(self)
+
+
+func _process(delta: float) -> void:
+ var time_ratio: float = clampf(_time_left / _duration, 0.0, 1.0)
+
+ #var offset_intensity: float = maxf(_offset_intensity * time_ratio, constant_offset_intensity)
+ #var _offset := Vector3(
+ #randf_range(-1.0, 1.0) * offset_intensity,
+ #randf_range(-1.0, 1.0) * offset_intensity,
+ #randf_range(-1.0, 1.0) * offset_intensity
+ #)
+
+ var positional_intensity: float = maxf(_positional_intensity * time_ratio, constant_positional_intensity)
+ var position_offset := Vector3(
+ randf_range(-1.0, 1.0) * positional_intensity,
+ randf_range(-1.0, 1.0) * positional_intensity,
+ randf_range(-1.0, 1.0) * positional_intensity
+ )
+
+ var rotational_intensity: float = maxf(_rotational_intensity * time_ratio, constant_rotational_intensity)
+ var rotation_offset := Vector3(
+ # TAU is keeping the shake intensity similar with the position counterpart.
+ deg_to_rad(randf_range(-1.0, 1.0) * rotational_intensity) * TAU,
+ deg_to_rad(randf_range(-1.0, 1.0) * rotational_intensity) * TAU,
+ deg_to_rad(randf_range(-1.0, 1.0) * rotational_intensity) * TAU
+ )
+
+ #h_offset = _offset.x
+ #v_offset = _offset.y
+ position = shake_origin + (position_offset * shake_intensity_multiplier)
+ rotation = shake_rotation_origin + (rotation_offset * shake_intensity_multiplier)
+ _time_left = maxf(_time_left - delta, 0.0)
+
+ if is_zero_approx(_time_left):
+ #_offset_intensity = 0.0
+ _positional_intensity = 0.0
+ _rotational_intensity = 0.0
+ _duration = 0.001
+
+ #constant_offset_intensity = 0.0
+ constant_positional_intensity = 0.0
+ constant_rotational_intensity = 0.0
+
+
+# TODO: Document this better.
+## Shakes the camera using [param intensity] and [param duration].
+func shake(intensity: float, duration: float, shake_type := ShakeType.POSITIONAL) -> void:
+ if shake_type == ShakeType.POSITIONAL or shake_type == ShakeType.BOTH:
+ _add_positional_shake(intensity, duration)
+
+ if shake_type == ShakeType.ROTATIONAL or shake_type == ShakeType.BOTH:
+ _add_rotational_shake(intensity, duration)
+
+
+## Adds a constant shake to the camera which [b]needs to be called every [method Node._process] frame[/b].
+func apply_constant_shake(intensity: float, shake_type: ShakeType) -> void:
+ #if shake_type == ShakeType.OFFSET:
+ #constant_offset_intensity += intensity
+
+ if shake_type == ShakeType.POSITIONAL or shake_type == ShakeType.BOTH:
+ constant_positional_intensity += intensity
+
+ if shake_type == ShakeType.ROTATIONAL or shake_type == ShakeType.BOTH:
+ constant_rotational_intensity += intensity
+
+
+#func _add_offset_shake(intensity: float, duration: float) -> void:
+ #if intensity < _offset_intensity and duration < _time_left:
+ #return
+#
+ #_duration = maxf(maxf(_duration, duration), 0.001) # Should always be above 0 due to division.
+ #_time_left = duration
+ #_offset_intensity = maxf(intensity, _offset_intensity)
+
+
+func _add_positional_shake(intensity: float, duration: float) -> void:
+ if intensity < _positional_intensity and duration < _time_left:
+ return
+
+ _duration = maxf(maxf(_duration, duration), 0.001) # Should always be above 0 due to division.
+ _time_left = duration
+ _positional_intensity = maxf(intensity, _positional_intensity)
+
+
+func _add_rotational_shake(intensity: float, duration: float) -> void:
+ if intensity < _rotational_intensity and duration < _time_left:
+ return
+
+ _duration = maxf(maxf(_duration, duration), 0.001) # Should always be above 0 due to division.
+ _time_left = duration
+ _rotational_intensity = maxf(intensity, _rotational_intensity)
diff --git a/source/src/core/camera/shaking_camera.gd.uid b/source/src/core/camera/shaking_camera.gd.uid
new file mode 100644
index 0000000..355e486
--- /dev/null
+++ b/source/src/core/camera/shaking_camera.gd.uid
@@ -0,0 +1 @@
+uid://44s0v8mukxk4
diff --git a/source/src/core/chapter/chapter_area.gd b/source/src/core/chapter/chapter_area.gd
new file mode 100644
index 0000000..12db9f0
--- /dev/null
+++ b/source/src/core/chapter/chapter_area.gd
@@ -0,0 +1,30 @@
+class_name ChapterArea
+extends Area3D
+
+
+@export var chapter_index: int = 0
+@export var override_spawn_id: bool = true
+@export var spawn_id: StringName = &""
+@export var display_chapter: bool = true
+@export var do_save: bool = true
+
+
+# Called when the node enters the scene tree for the first time.
+func _ready() -> void:
+ body_entered.connect(_on_body_entered)
+
+
+func set_chapter() -> void:
+ if chapter_index > GameGlobals.chapter_index:
+ GameGlobals.set_chapter_index(chapter_index)
+
+ if override_spawn_id:
+ GameGlobals.set_spawn_id(spawn_id)
+
+ if do_save:
+ SaveManager.save_game()
+
+
+func _on_body_entered(body: Node3D) -> void:
+ if body == GameGlobals.get_player():
+ set_chapter()
diff --git a/source/src/core/chapter/chapter_area.gd.uid b/source/src/core/chapter/chapter_area.gd.uid
new file mode 100644
index 0000000..04eb1de
--- /dev/null
+++ b/source/src/core/chapter/chapter_area.gd.uid
@@ -0,0 +1 @@
+uid://dgsfc4i6bovwa
diff --git a/source/src/core/chapter/chapter_area.tscn b/source/src/core/chapter/chapter_area.tscn
new file mode 100644
index 0000000..92fd643
--- /dev/null
+++ b/source/src/core/chapter/chapter_area.tscn
@@ -0,0 +1,9 @@
+[gd_scene load_steps=2 format=3 uid="uid://bcu5jlicrvor3"]
+
+[ext_resource type="Script" uid="uid://dgsfc4i6bovwa" path="res://src/core/chapter/chapter_area.gd" id="1_0d8c8"]
+
+[node name="ChapterArea" type="Area3D"]
+collision_layer = 0
+collision_mask = 2
+script = ExtResource("1_0d8c8")
+metadata/_custom_type_script = "uid://dgsfc4i6bovwa"
diff --git a/source/src/core/chapter/chapter_info.gd b/source/src/core/chapter/chapter_info.gd
new file mode 100644
index 0000000..2a2759a
--- /dev/null
+++ b/source/src/core/chapter/chapter_info.gd
@@ -0,0 +1,5 @@
+class_name ChapterInfo
+extends Resource
+
+@export_multiline var chapter_name: String
+@export var chapter_index: int = 0
diff --git a/source/src/core/chapter/chapter_info.gd.uid b/source/src/core/chapter/chapter_info.gd.uid
new file mode 100644
index 0000000..66bcff5
--- /dev/null
+++ b/source/src/core/chapter/chapter_info.gd.uid
@@ -0,0 +1 @@
+uid://c44lgfadvcshb
diff --git a/source/src/core/chapter/chapter_list.gd b/source/src/core/chapter/chapter_list.gd
new file mode 100644
index 0000000..2c60f10
--- /dev/null
+++ b/source/src/core/chapter/chapter_list.gd
@@ -0,0 +1,12 @@
+class_name ChapterList
+extends Resource
+
+@export var chapters: Array[ChapterInfo] = []
+
+
+func get_chapter_by_index(index: int) -> ChapterInfo:
+ for chapter: ChapterInfo in chapters:
+ if chapter.chapter_index == index:
+ return chapter
+
+ return null
diff --git a/source/src/core/chapter/chapter_list.gd.uid b/source/src/core/chapter/chapter_list.gd.uid
new file mode 100644
index 0000000..40fb20b
--- /dev/null
+++ b/source/src/core/chapter/chapter_list.gd.uid
@@ -0,0 +1 @@
+uid://cqja8sanwo0u6
diff --git a/source/src/core/chapter/chapter_list.tres b/source/src/core/chapter/chapter_list.tres
new file mode 100644
index 0000000..f896b66
--- /dev/null
+++ b/source/src/core/chapter/chapter_list.tres
@@ -0,0 +1,20 @@
+[gd_resource type="Resource" script_class="ChapterList" load_steps=5 format=3 uid="uid://d2mcwotliowv7"]
+
+[ext_resource type="Script" uid="uid://c44lgfadvcshb" path="res://src/core/chapter/chapter_info.gd" id="1_cnrwn"]
+[ext_resource type="Script" uid="uid://cqja8sanwo0u6" path="res://src/core/chapter/chapter_list.gd" id="2_oadm2"]
+
+[sub_resource type="Resource" id="Resource_v2h50"]
+script = ExtResource("1_cnrwn")
+chapter_name = "Chapter 1: The Beginning"
+metadata/_custom_type_script = "uid://c44lgfadvcshb"
+
+[sub_resource type="Resource" id="Resource_wiqag"]
+script = ExtResource("1_cnrwn")
+chapter_name = "Chapter 2: Another Life"
+chapter_index = 1
+metadata/_custom_type_script = "uid://c44lgfadvcshb"
+
+[resource]
+script = ExtResource("2_oadm2")
+chapters = Array[ExtResource("1_cnrwn")]([SubResource("Resource_v2h50"), SubResource("Resource_wiqag")])
+metadata/_custom_type_script = "uid://cqja8sanwo0u6"
diff --git a/source/src/core/damage/death_area.gd b/source/src/core/damage/death_area.gd
new file mode 100644
index 0000000..b628919
--- /dev/null
+++ b/source/src/core/damage/death_area.gd
@@ -0,0 +1,13 @@
+class_name DeathArea
+extends Area3D
+
+@export var death_type := GameGlobals.DeathTypes.SAW
+
+
+func _ready() -> void:
+ body_entered.connect(_on_body_entered)
+
+
+func _on_body_entered(body: Node3D) -> void:
+ if body == GameGlobals.get_player():
+ GameGlobals.kill_player(death_type)
\ No newline at end of file
diff --git a/source/src/core/damage/death_area.gd.uid b/source/src/core/damage/death_area.gd.uid
new file mode 100644
index 0000000..a1c247b
--- /dev/null
+++ b/source/src/core/damage/death_area.gd.uid
@@ -0,0 +1 @@
+uid://bfv3de7iqflhv
diff --git a/source/components/collision/areas/dynamic_area_loader.gd b/source/src/core/dynamic_area_loader/dynamic_area_loader.gd
similarity index 98%
rename from source/components/collision/areas/dynamic_area_loader.gd
rename to source/src/core/dynamic_area_loader/dynamic_area_loader.gd
index 8229bfa..cabe065 100644
--- a/source/components/collision/areas/dynamic_area_loader.gd
+++ b/source/src/core/dynamic_area_loader/dynamic_area_loader.gd
@@ -3,6 +3,7 @@
class_name DynamicAreaLoader3D
extends Area3D
+## @deprecated: Replaced by LevelArea
## An [Area3D] that dynamicly load a scene based on proximity.
##
## [b]Note:[/b] By default the [signal body_entered] and [signal body_exited] signals are linked
@@ -40,10 +41,10 @@ var loaded_node: Node
func _ready() -> void:
if Engine.is_editor_hint():
return
-
+
if loaded_if_spawnpoint.has(GameGlobals.spawn_index):
load_area(null, true)
-
+
body_entered.connect(_on_body_entered)
body_exited.connect(_on_body_exited)
@@ -55,10 +56,10 @@ func _ready() -> void:
func load_area(custom_scene: PackedScene = null, forced: bool = false) -> void:
assert(is_instance_valid(placeholder_node), "[placeholder_node] needs to be set.")
assert(placeholder_node is InstancePlaceholder, "[placeholder_node] needs to be marked as 'Load As Placeholder'.")
-
+
if is_instance_valid(loaded_node) or (not forced and not overlaps_body(GameGlobals.get_player())):
return
-
+
loaded_node = placeholder_node.create_instance(false, custom_scene)
load_finished.emit(loaded_node)
@@ -70,20 +71,19 @@ func load_area(custom_scene: PackedScene = null, forced: bool = false) -> void:
func load_area_threaded(forced: bool = false) -> void:
assert(is_instance_valid(placeholder_node), "[placeholder_node] needs to be set.")
assert(placeholder_node is InstancePlaceholder, "[placeholder_node] needs to be marked as 'Load As Placeholder'.")
-
+
placeholder_node = placeholder_node as InstancePlaceholder
-
+
var path: String = placeholder_node.get_instance_path()
ResourceLoader.load_threaded_request(path, "", true)
-
+
while ResourceLoader.load_threaded_get_status(path) == ResourceLoader.THREAD_LOAD_IN_PROGRESS:
if not is_inside_tree():
return
-
+
await get_tree().process_frame
-
+
var scene: PackedScene = ResourceLoader.load_threaded_get(path)
-
load_area(scene, forced)
@@ -93,17 +93,17 @@ func load_area_threaded(forced: bool = false) -> void:
func unload_area(instantly_unload: bool = false) -> void:
if not is_instance_valid(loaded_node):
return
-
+
if not instantly_unload and keep_loaded_duration > 0.0:
var duration: float = keep_loaded_duration
-
+
while is_inside_tree() and duration > 0.0:
if overlaps_body(GameGlobals.get_player()):
return
-
+
duration -= get_process_delta_time()
await get_tree().process_frame
-
+
loaded_node.queue_free()
@@ -123,9 +123,9 @@ func _on_body_exited(body: Node3D) -> void:
func _get_configuration_warnings() -> PackedStringArray:
if not is_instance_valid(placeholder_node):
return ["'placeholder_node' is not set."]
-
+
# TODO: Find a way to detect that in the editor.
if placeholder_node is not InstancePlaceholder and false:
return ["'placeholder_node' needs to be marked as 'Load As Placeholder'"]
-
+
return []
diff --git a/source/components/collision/areas/dynamic_area_loader.gd.uid b/source/src/core/dynamic_area_loader/dynamic_area_loader.gd.uid
similarity index 100%
rename from source/components/collision/areas/dynamic_area_loader.gd.uid
rename to source/src/core/dynamic_area_loader/dynamic_area_loader.gd.uid
diff --git a/source/components/collision/areas/dynamic_area_loader.svg b/source/src/core/dynamic_area_loader/dynamic_area_loader.svg
similarity index 100%
rename from source/components/collision/areas/dynamic_area_loader.svg
rename to source/src/core/dynamic_area_loader/dynamic_area_loader.svg
diff --git a/source/src/core/dynamic_area_loader/dynamic_area_loader.svg.import b/source/src/core/dynamic_area_loader/dynamic_area_loader.svg.import
new file mode 100644
index 0000000..e979f30
--- /dev/null
+++ b/source/src/core/dynamic_area_loader/dynamic_area_loader.svg.import
@@ -0,0 +1,44 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://4qsmkgrm8frw"
+path="res://.godot/imported/dynamic_area_loader.svg-bb5edbb9d069c941e62133cf9dbec682.ctex"
+metadata={
+"has_editor_variant": true,
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://src/core/dynamic_area_loader/dynamic_area_loader.svg"
+dest_files=["res://.godot/imported/dynamic_area_loader.svg-bb5edbb9d069c941e62133cf9dbec682.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+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/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+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
+svg/scale=1.0
+editor/scale_with_editor_scale=true
+editor/convert_colors_with_editor_theme=true
diff --git a/source/src/core/dynamic_area_loader/dynamic_area_loader.tscn b/source/src/core/dynamic_area_loader/dynamic_area_loader.tscn
new file mode 100644
index 0000000..bacb15d
--- /dev/null
+++ b/source/src/core/dynamic_area_loader/dynamic_area_loader.tscn
@@ -0,0 +1,9 @@
+[gd_scene load_steps=2 format=3 uid="uid://hrdl2qmxv3ve"]
+
+[ext_resource type="Script" uid="uid://bj2bhtdul8xct" path="res://src/core/dynamic_area_loader/dynamic_area_loader.gd" id="1_gcydo"]
+
+[node name="DynamicAreaLoader" type="Area3D"]
+collision_layer = 0
+collision_mask = 2
+script = ExtResource("1_gcydo")
+metadata/_custom_type_script = "uid://bj2bhtdul8xct"
diff --git a/source/components/general/interactive_loader.gd b/source/src/core/interactive_loader.gd
similarity index 62%
rename from source/components/general/interactive_loader.gd
rename to source/src/core/interactive_loader.gd
index 5ce4559..2efb730 100644
--- a/source/components/general/interactive_loader.gd
+++ b/source/src/core/interactive_loader.gd
@@ -6,24 +6,24 @@ var load_progress: Array = []
func load_threaded(path: String) -> Resource:
if not is_inside_tree():
- Logger.print_msg("[Interactive Loader] needs to be added to the scene tree.", -1.0, Logger.ErrTypes.WARNING)
+ SPrint.print_msg("[Interactive Loader] needs to be added to the scene tree.", -1.0, SPrint.WARNING)
return null
-
+
if not ResourceLoader.exists(path):
- Logger.print_msg("[Interactive Loader] the given path (%s) doesn't exist." %path, -1.0, Logger.ErrTypes.WARNING)
+ SPrint.print_msg("[Interactive Loader] the given path (%s) doesn't exist." % path, -1.0, SPrint.WARNING)
return null
-
+
ResourceLoader.load_threaded_request(path, "", false, ResourceLoader.CACHE_MODE_REUSE)
-
+
while ResourceLoader.load_threaded_get_status(path) != ResourceLoader.THREAD_LOAD_LOADED:
match ResourceLoader.load_threaded_get_status(path, load_progress):
ResourceLoader.THREAD_LOAD_FAILED || ResourceLoader.THREAD_LOAD_INVALID_RESOURCE:
- Logger.print_msg("[Interactive Loader] load failed.", -1.0, Logger.ErrTypes.WARNING)
+ SPrint.print_msg("[Interactive Loader] load failed.", -1.0, SPrint.WARNING)
return null
-
+
if is_inside_tree():
await get_tree().process_frame
else:
- Logger.print_msg("[Interactive Loader] is no longer in the scene tree. We can't wait for a process frame anymore, resulting in a freeze.", -1.0, Logger.ErrTypes.WARNING)
-
+ SPrint.print_msg("[Interactive Loader] is no longer in the scene tree. We can't wait for a process frame anymore, resulting in a freeze.", -1.0, SPrint.WARNING)
+
return ResourceLoader.load_threaded_get(path)
diff --git a/source/components/general/interactive_loader.gd.uid b/source/src/core/interactive_loader.gd.uid
similarity index 100%
rename from source/components/general/interactive_loader.gd.uid
rename to source/src/core/interactive_loader.gd.uid
diff --git a/source/src/core/level/level.gd b/source/src/core/level/level.gd
new file mode 100644
index 0000000..d458ccb
--- /dev/null
+++ b/source/src/core/level/level.gd
@@ -0,0 +1,8 @@
+class_name Level
+extends Node3D
+
+
+#func _enter_tree() -> void:
+ #if not is_instance_valid(GameGlobals.game):
+ #print("Game not ready, spawning player.")
+ #GameGlobals
diff --git a/source/src/core/level/level.gd.uid b/source/src/core/level/level.gd.uid
new file mode 100644
index 0000000..60448d8
--- /dev/null
+++ b/source/src/core/level/level.gd.uid
@@ -0,0 +1 @@
+uid://cigop0ivp5vvu
diff --git a/source/src/core/level/level_area.gd b/source/src/core/level/level_area.gd
new file mode 100644
index 0000000..3620185
--- /dev/null
+++ b/source/src/core/level/level_area.gd
@@ -0,0 +1,47 @@
+class_name LevelArea
+extends Area3D
+
+@export var level_loader: LevelLoader
+@export var loaded_if_spawnpoint: Array[PlayerSpawnPoint] = []
+@export var keep_loaded_duration: float = 3.0
+
+
+func _enter_tree() -> void:
+ for spawnpoint: PlayerSpawnPoint in loaded_if_spawnpoint:
+ if GameGlobals.spawn_id == spawnpoint.spawn_id:
+ var was_threaded: bool = level_loader.load_threaded
+ load_level()
+ level_loader.load_threaded = was_threaded
+ return
+
+
+func _ready() -> void:
+ await get_tree().process_frame
+ await get_tree().process_frame
+
+ body_entered.connect(load_level.unbind(1))
+ body_exited.connect(unload_level.unbind(1))
+
+
+func load_level() -> void:
+ assert(is_instance_valid(level_loader), "Level loader needs to be set.")
+ level_loader.load_level()
+
+
+func unload_level() -> void:
+ assert(is_instance_valid(level_loader), "Level loader needs to be set.")
+
+ if keep_loaded_duration > 0.0:
+ var duration: float = keep_loaded_duration
+
+ while is_inside_tree() and duration > 0.0:
+ if has_overlapping_bodies():
+ return
+
+ duration -= get_process_delta_time() * float(not get_tree().paused)
+ await get_tree().process_frame
+
+ if not is_instance_valid(get_tree()):
+ return
+
+ level_loader.unload_level()
diff --git a/source/src/core/level/level_area.gd.uid b/source/src/core/level/level_area.gd.uid
new file mode 100644
index 0000000..ae91842
--- /dev/null
+++ b/source/src/core/level/level_area.gd.uid
@@ -0,0 +1 @@
+uid://b6pf67e8p8ly1
diff --git a/source/src/core/level/level_area.tscn b/source/src/core/level/level_area.tscn
new file mode 100644
index 0000000..09ed3b7
--- /dev/null
+++ b/source/src/core/level/level_area.tscn
@@ -0,0 +1,10 @@
+[gd_scene load_steps=2 format=3 uid="uid://drr80goa61wrx"]
+
+[ext_resource type="Script" uid="uid://b6pf67e8p8ly1" path="res://src/core/level/level_area.gd" id="1_b21gt"]
+
+[node name="LevelArea" type="Area3D"]
+collision_layer = 0
+collision_mask = 2
+monitorable = false
+script = ExtResource("1_b21gt")
+metadata/_custom_type_script = "uid://b6pf67e8p8ly1"
diff --git a/source/src/core/level/level_loader.gd b/source/src/core/level/level_loader.gd
new file mode 100644
index 0000000..7c5f9fb
--- /dev/null
+++ b/source/src/core/level/level_loader.gd
@@ -0,0 +1,55 @@
+@tool
+class_name LevelLoader
+extends Marker3D
+
+signal level_loaded
+signal level_unloaded
+
+@export_file("*.tscn", "*.scn") var scene_path: String
+@export var load_threaded: bool = true
+@export_tool_button("Load Level", "Slot") var editor_load: Callable = load_level
+@export_tool_button("Unload Level", "Clear") var editor_unload: Callable = unload_level
+
+var level: Node
+
+
+func load_level() -> void:
+ if is_instance_valid(level):
+ if level.scene_file_path == scene_path:
+ push_warning("Level already loaded")
+ return
+
+ unload_level()
+
+ var scene: PackedScene
+
+ if load_threaded:
+ scene = await _load_level_threaded()
+ else:
+ scene = load(scene_path)
+
+ assert(is_instance_valid(scene), "Scene is not valid.")
+
+ level = scene.instantiate()
+ add_child(level)
+
+ level_loaded.emit()
+
+
+func unload_level() -> void:
+ if is_instance_valid(level):
+ level.queue_free()
+
+ # Remove children that have no owner. Usually happens when duplicating the node (in the editor).
+ for child: Node in get_children():
+ if child.owner == null:
+ child.queue_free()
+
+ level_unloaded.emit()
+
+
+func _load_level_threaded() -> PackedScene:
+ var interactive_loader := InteractiveLoader.new()
+ add_child(interactive_loader)
+
+ return await interactive_loader.load_threaded(scene_path)
diff --git a/source/src/core/level/level_loader.gd.uid b/source/src/core/level/level_loader.gd.uid
new file mode 100644
index 0000000..5274d96
--- /dev/null
+++ b/source/src/core/level/level_loader.gd.uid
@@ -0,0 +1 @@
+uid://dfnb036hysorj
diff --git a/source/src/core/level/level_manager.gd b/source/src/core/level/level_manager.gd
new file mode 100644
index 0000000..2cb9b8c
--- /dev/null
+++ b/source/src/core/level/level_manager.gd
@@ -0,0 +1,8 @@
+class_name LevelManager
+extends Node
+
+
+var level_loaders: Array[LevelLoader]
+
+func _ready() -> void:
+ pass
diff --git a/source/src/core/level/level_manager.gd.uid b/source/src/core/level/level_manager.gd.uid
new file mode 100644
index 0000000..f39ad8f
--- /dev/null
+++ b/source/src/core/level/level_manager.gd.uid
@@ -0,0 +1 @@
+uid://c6uuja44ioul4
diff --git a/source/src/core/player_spawn_point.gd b/source/src/core/player_spawn_point.gd
new file mode 100644
index 0000000..429ae4c
--- /dev/null
+++ b/source/src/core/player_spawn_point.gd
@@ -0,0 +1,164 @@
+@tool
+class_name PlayerSpawnPoint
+extends Marker3D
+
+const _UNIQUE_NAME_GEN_PRE: Array[String] = [
+ "Be",
+ "Finish",
+ "What",
+ "Who",
+ "Slow",
+ "Come",
+ "Clean",
+ "Leave",
+ "I",
+ "No",
+ "Take",
+ "For",
+ "Good",
+ "Look",
+ "Sit",
+ "Your",
+ "Keep",
+ "Join",
+ "Dream",
+ "Stay",
+ "Inform",
+ "Eat",
+]
+const _UNIQUE_NAME_GEN_POST: Array[String] = [
+ "Quiet",
+ "Quit",
+ "Calm",
+ "It",
+ "Move",
+ "Else",
+ "Knows",
+ "Down",
+ "Along",
+ "Up",
+ "Amazing",
+ "Disagree",
+ "Problem",
+ "Happened",
+ "Care",
+ "What",
+ "Impossible",
+ "Bath",
+ "Idea",
+ "Around",
+ "Upright",
+ "Doubt",
+ "Turn",
+ "Say",
+ "Fantastic",
+ "Me",
+ "Nonsense",
+ "World",
+ "Strong",
+ "Well",
+ "Slowly",
+]
+
+static var spawn_points: Array[PlayerSpawnPoint] = []
+
+@export var spawn_id: StringName = &"": set = set_spawn_id
+@export_tool_button("Set unique identifier") var set_unique_identifier: Callable = (
+ func() -> void:
+ set_spawn_id(generate_unique_identifier())
+ update_configuration_warnings()
+)
+
+var _idx_label: Label3D
+var _config_warnings_hint: Label3D
+
+
+static func get_spawn_point_by_identifier(identifier: StringName) -> PlayerSpawnPoint:
+ for spawn_point: PlayerSpawnPoint in PlayerSpawnPoint.spawn_points:
+ if spawn_point.spawn_id == identifier:
+ return spawn_point
+
+ return null
+
+
+func _init() -> void:
+ if Engine.is_editor_hint():
+ var player_scene: PackedScene = load("uid://clhy3kiceqf2o")
+ add_child(player_scene.instantiate(), false, Node.INTERNAL_MODE_FRONT)
+
+ # Setup labels.
+ _idx_label = Label3D.new()
+ _idx_label.billboard = BaseMaterial3D.BILLBOARD_ENABLED
+ _idx_label.shaded = false
+ _idx_label.font_size = 64
+ add_child(_idx_label, false, Node.INTERNAL_MODE_FRONT)
+ _idx_label.position.y = 1.8
+ set_spawn_id(spawn_id)
+
+ _config_warnings_hint = Label3D.new()
+ _config_warnings_hint.billboard = BaseMaterial3D.BILLBOARD_ENABLED
+ _config_warnings_hint.shaded = false
+ _config_warnings_hint.no_depth_test = true
+ _config_warnings_hint.fixed_size = true
+ _config_warnings_hint.text = "!"
+ _config_warnings_hint.modulate = Color.RED
+ add_child(_config_warnings_hint, false, Node.INTERNAL_MODE_FRONT)
+ _config_warnings_hint.position.y = 1.0
+
+ var tween: Tween = create_tween().set_loops()
+ tween.tween_property(_config_warnings_hint, ^"scale", Vector3.ONE * 1.5, 0.075)
+ tween.tween_property(_config_warnings_hint, ^"scale", Vector3.ONE * 1.0, 0.075)
+
+ update_configuration_warnings()
+
+
+func _enter_tree() -> void:
+ if not spawn_points.has(self):
+ spawn_points.append(self)
+
+
+func _exit_tree() -> void:
+ spawn_points.erase(self)
+
+
+func _get_configuration_warnings() -> PackedStringArray:
+ var warnings: PackedStringArray = []
+
+ for spawn_point: PlayerSpawnPoint in spawn_points:
+ if spawn_point.spawn_id == spawn_id and spawn_point != self:
+ warnings.append(str(spawn_point, " has the same spawn identifier as us."))
+ spawn_point._config_warnings_hint.show()
+
+ spawn_point.update_configuration_warnings()
+
+ if warnings.is_empty():
+ _config_warnings_hint.hide()
+
+ return warnings
+
+
+func set_spawn_id(identifier: StringName) -> void:
+ spawn_id = identifier
+ update_configuration_warnings()
+
+ if is_instance_valid(_idx_label):
+ _idx_label.text = str(spawn_id)
+
+
+func make_current(do_autosave: bool = true) -> void:
+ GameGlobals.spawn_id = spawn_id
+
+ if do_autosave:
+ SaveManager.save_game()
+
+
+func generate_unique_identifier() -> StringName:
+ var pre: String = _UNIQUE_NAME_GEN_PRE.pick_random()
+ var post: String = _UNIQUE_NAME_GEN_POST.pick_random()
+ var unique_name: StringName = pre + post
+
+ for spawn_point: PlayerSpawnPoint in spawn_points:
+ if spawn_point.spawn_id == unique_name:
+ return generate_unique_identifier()
+
+ return unique_name
diff --git a/source/components/general/player_spawn_point.gd.uid b/source/src/core/player_spawn_point.gd.uid
similarity index 100%
rename from source/components/general/player_spawn_point.gd.uid
rename to source/src/core/player_spawn_point.gd.uid
diff --git a/source/components/general/time/stopwatch.gd b/source/src/core/time/stopwatch.gd
similarity index 100%
rename from source/components/general/time/stopwatch.gd
rename to source/src/core/time/stopwatch.gd
diff --git a/source/components/general/time/stopwatch.gd.uid b/source/src/core/time/stopwatch.gd.uid
similarity index 100%
rename from source/components/general/time/stopwatch.gd.uid
rename to source/src/core/time/stopwatch.gd.uid
diff --git a/source/components/general/time/stopwatch.svg b/source/src/core/time/stopwatch.svg
similarity index 100%
rename from source/components/general/time/stopwatch.svg
rename to source/src/core/time/stopwatch.svg
diff --git a/source/components/general/time/stopwatch.svg.import b/source/src/core/time/stopwatch.svg.import
similarity index 62%
rename from source/components/general/time/stopwatch.svg.import
rename to source/src/core/time/stopwatch.svg.import
index b9dcb2a..42ee983 100644
--- a/source/components/general/time/stopwatch.svg.import
+++ b/source/src/core/time/stopwatch.svg.import
@@ -3,21 +3,23 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://tp3a265sgd56"
-path="res://.godot/imported/stopwatch.svg-08e28e82dba60f19b1db4b5017ec9c2b.ctex"
+path="res://.godot/imported/stopwatch.svg-64a23047faca9e271f81f184f25d7e9b.ctex"
metadata={
"vram_texture": false
}
[deps]
-source_file="res://components/general/time/stopwatch.svg"
-dest_files=["res://.godot/imported/stopwatch.svg-08e28e82dba60f19b1db4b5017ec9c2b.ctex"]
+source_file="res://src/core/time/stopwatch.svg"
+dest_files=["res://.godot/imported/stopwatch.svg-64a23047faca9e271f81f184f25d7e9b.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
@@ -25,6 +27,10 @@ mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
diff --git a/source/components/general/time/timescalable_timer.gd b/source/src/core/time/timescalable_timer.gd
similarity index 98%
rename from source/components/general/time/timescalable_timer.gd
rename to source/src/core/time/timescalable_timer.gd
index 2f45800..93fbc78 100644
--- a/source/components/general/time/timescalable_timer.gd
+++ b/source/src/core/time/timescalable_timer.gd
@@ -1,4 +1,4 @@
-@icon("res://components/ui/hud/timer/stopwatch.svg")
+@icon("res://src/ui/hud/timer/stopwatch.svg")
class_name TimescalableTimer
extends Node
diff --git a/source/components/general/time/timescalable_timer.gd.uid b/source/src/core/time/timescalable_timer.gd.uid
similarity index 100%
rename from source/components/general/time/timescalable_timer.gd.uid
rename to source/src/core/time/timescalable_timer.gd.uid
diff --git a/source/src/core/world_environment_proxy.gd b/source/src/core/world_environment_proxy.gd
new file mode 100644
index 0000000..14b72b9
--- /dev/null
+++ b/source/src/core/world_environment_proxy.gd
@@ -0,0 +1,20 @@
+class_name WorldEnvironmentProxy
+extends Node
+
+@export var environment: Environment
+#@export var camera_attributes: CameraAttributes
+#@export var compositor: Compositor
+
+#var world_environment: WorldEnvironment
+
+
+func _enter_tree() -> void:
+ if not is_node_ready():
+ await ready
+
+ get_viewport().world_3d.environment = environment
+
+
+func _exit_tree() -> void:
+ if get_viewport().world_3d.environment == environment:
+ get_viewport().world_3d.environment = null
diff --git a/source/src/core/world_environment_proxy.gd.uid b/source/src/core/world_environment_proxy.gd.uid
new file mode 100644
index 0000000..f3518bf
--- /dev/null
+++ b/source/src/core/world_environment_proxy.gd.uid
@@ -0,0 +1 @@
+uid://dhchf3gl08sdi
diff --git a/source/src/dialogue/voiceline_chain.gd b/source/src/dialogue/voiceline_chain.gd
new file mode 100644
index 0000000..bd3bc63
--- /dev/null
+++ b/source/src/dialogue/voiceline_chain.gd
@@ -0,0 +1,14 @@
+class_name VoicelineChain
+extends Resource
+
+@export var voicelines: Array[VoicelineData] = []
+
+#var cached_voicelines: Array[AudioStream] = []
+#
+#
+#func _precache_voicelines() -> void:
+ #cached_voicelines.clear()
+#
+ #for data: VoicelineData in voicelines:
+ #if ResourceLoader.exists(data.voiceline_path):
+ #cached_voicelines.append(load(data.voiceline_path))
diff --git a/source/src/dialogue/voiceline_chain.gd.uid b/source/src/dialogue/voiceline_chain.gd.uid
new file mode 100644
index 0000000..7f6ba29
--- /dev/null
+++ b/source/src/dialogue/voiceline_chain.gd.uid
@@ -0,0 +1 @@
+uid://ck1o8pl1gqfio
diff --git a/source/src/dialogue/voiceline_component.gd b/source/src/dialogue/voiceline_component.gd
new file mode 100644
index 0000000..32db091
--- /dev/null
+++ b/source/src/dialogue/voiceline_component.gd
@@ -0,0 +1,80 @@
+class_name VoicelineComponent
+extends Node
+
+@export_node_path("AudioStreamPlayer", "AudioStreamPlayer2D", "AudioListener3D")
+var audio_players: Array[NodePath] = []:
+ set = set_audio_players
+@export var voiceline_chains: Dictionary[StringName, VoicelineChain] = {}
+@export var cache_voicelines: bool = false ## TODO: preload all voicelines when they need the be loaded.
+
+var voiceline_players: Array[Node] = []
+var next_voicelines: Array[VoicelineChain] = []
+var current_voiceline_chain_index: int = 0
+var _reference_player: Node
+
+
+func set_audio_players(players: Array[NodePath]) -> void:
+ audio_players = players
+ _update_player_cache()
+
+
+func push_voiceline(voiceline_chain: VoicelineChain) -> void:
+ next_voicelines.append(voiceline_chain)
+
+
+func push_next_voiceline() -> void:
+ var voiceline: VoicelineChain = next_voicelines.front()
+
+ if is_instance_valid(voiceline) and current_voiceline_chain_index < voiceline.voicelines.size():
+ current_voiceline_chain_index += 1
+ _play_voiceline(voiceline.voicelines[current_voiceline_chain_index])
+ return
+
+ next_voicelines.remove_at(0)
+ voiceline = next_voicelines.front()
+ current_voiceline_chain_index = 0
+
+ if is_instance_valid(voiceline):
+ _play_voiceline(voiceline.voicelines.front())
+
+
+func play_voiceline(vo_name: StringName) -> void:
+ if voiceline_chains.has(vo_name):
+ push_voiceline(voiceline_chains[vo_name])
+ else:
+ push_warning("[%s] No voiceline with the name '%s' found." % [self, vo_name])
+
+
+func is_audio_player(player: Node) -> bool:
+ return (
+ is_instance_valid(player)
+ and (
+ player is AudioStreamPlayer
+ or player is AudioStreamPlayer2D
+ or player is AudioStreamPlayer3D
+ )
+ )
+
+
+func _play_voiceline(voiceline_data: VoicelineData) -> void:
+ var voice: AudioStream = load(voiceline_data.voiceline_path)
+
+ for player: Node in voiceline_players:
+ player.play(voice)
+
+
+func _on_voiceline_finished() -> void:
+ push_next_voiceline()
+
+
+func _update_player_cache() -> void:
+ voiceline_players.clear()
+
+ for audio_player: NodePath in audio_players:
+ var player: Node = get_node_or_null(audio_player)
+
+ if is_audio_player(player):
+ voiceline_players.append(player)
+ _reference_player = player
+
+ _reference_player.finished.connect(_on_voiceline_finished)
diff --git a/source/src/dialogue/voiceline_component.gd.uid b/source/src/dialogue/voiceline_component.gd.uid
new file mode 100644
index 0000000..c8908ee
--- /dev/null
+++ b/source/src/dialogue/voiceline_component.gd.uid
@@ -0,0 +1 @@
+uid://chm33pvd77o5e
diff --git a/source/src/dialogue/voiceline_data.gd b/source/src/dialogue/voiceline_data.gd
new file mode 100644
index 0000000..9a5f19e
--- /dev/null
+++ b/source/src/dialogue/voiceline_data.gd
@@ -0,0 +1,9 @@
+class_name VoicelineData
+extends Resource
+
+
+@export_file("*.ogg", "*.wav", "*.mp3") var voiceline_path: String
+@export var subtitle: String = ""
+@export var volume_override: float = -1.0
+
+#var cached_voicelien: AudioStream
diff --git a/source/src/dialogue/voiceline_data.gd.uid b/source/src/dialogue/voiceline_data.gd.uid
new file mode 100644
index 0000000..44d60e3
--- /dev/null
+++ b/source/src/dialogue/voiceline_data.gd.uid
@@ -0,0 +1 @@
+uid://drl4bietwsiul
diff --git a/source/src/game.gd b/source/src/game.gd
new file mode 100644
index 0000000..5cfd3fd
--- /dev/null
+++ b/source/src/game.gd
@@ -0,0 +1,38 @@
+class_name Game
+extends Node
+
+const PLAYER: PackedScene = preload(GameGlobals.PLAYER_PATH)
+
+@export var debug_spawn_point: StringName = &""
+@export_range(-1, 0, 1, "or_greater") var debug_chapter_idx: int = -1
+
+var player_character: PlayerCharacter
+
+
+func _init() -> void:
+ if OS.has_feature("editor") and not debug_spawn_point.is_empty():
+ GameGlobals.set_spawn_id(debug_spawn_point)
+
+ if debug_chapter_idx >= 0:
+ GameGlobals.set_chapter_index(debug_chapter_idx)
+
+ GameGlobals.game = self
+
+
+# Called when the node enters the scene tree for the first time.
+func _ready() -> void:
+ Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
+ spawn_player()
+
+ AudioManager.play_audio(preload("uid://cyxvsy5wjxhl7"), AudioManager.AMBIENCE)
+
+
+func spawn_player() -> void:
+ player_character = PLAYER.instantiate()
+ add_child(player_character)
+
+ var spawnpoint := PlayerSpawnPoint.get_spawn_point_by_identifier(GameGlobals.spawn_id)
+
+ if is_instance_valid(spawnpoint):
+ player_character.global_position = spawnpoint.global_position
+ player_character.head.global_rotation = spawnpoint.global_rotation
diff --git a/source/game.gd.uid b/source/src/game.gd.uid
similarity index 100%
rename from source/game.gd.uid
rename to source/src/game.gd.uid
diff --git a/source/src/game.tscn b/source/src/game.tscn
new file mode 100644
index 0000000..68d9314
--- /dev/null
+++ b/source/src/game.tscn
@@ -0,0 +1,18 @@
+[gd_scene load_steps=5 format=3 uid="uid://s7cw6ulb7kh7"]
+
+[ext_resource type="Script" uid="uid://dbsjg3o61vuji" path="res://src/game.gd" id="1_fc0e3"]
+[ext_resource type="PackedScene" uid="uid://dawmen0hlfaaq" path="res://src/ui/menus/pause_menu/pause_menu.tscn" id="3_feb5d"]
+[ext_resource type="PackedScene" uid="uid://kne8gkorpuop" path="res://src/ui/menus/death_screen/death_screen.tscn" id="4_j5wjh"]
+[ext_resource type="PackedScene" uid="uid://dspysc2bld6eu" path="res://src/levels/expo_combined.tscn" id="6_aikvj"]
+
+[node name="Game" type="Node"]
+script = ExtResource("1_fc0e3")
+metadata/_custom_type_script = "uid://dbsjg3o61vuji"
+
+[node name="Menus" type="CanvasLayer" parent="."]
+
+[node name="DeathScreen" parent="Menus" instance=ExtResource("4_j5wjh")]
+
+[node name="PauseMenu" parent="Menus" instance=ExtResource("3_feb5d")]
+
+[node name="CombinedMaps" parent="." instance=ExtResource("6_aikvj")]
diff --git a/source/components/characters/character_base.gd b/source/src/gameplay/characters/character.gd
similarity index 83%
rename from source/components/characters/character_base.gd
rename to source/src/gameplay/characters/character.gd
index 03a4170..22f1be3 100644
--- a/source/components/characters/character_base.gd
+++ b/source/src/gameplay/characters/character.gd
@@ -1,7 +1,8 @@
-class_name CharacterBase3D
+class_name Character3D
extends CharacterBody3D
-@export var movement: CharacterMovementBase
+@export var movement: CharacterMovement
+@export var speed_scale: float = 1.0
var speed: float = 0.0
var movement_direction: Vector3
@@ -11,76 +12,80 @@ var air_control: float = 1.0
var freeze_air_control: bool = false
var last_platform_velocity := Vector3.ZERO
var _was_on_floor: bool = false
+var _previous_velocity: Vector3
func move(direction: Vector3, delta: float) -> void:
- direction *= speed
-
+ direction *= (speed * speed_scale)
+
var on_floor: bool = is_on_floor()
-
+
if on_floor:
last_platform_velocity = get_platform_velocity()
-
+
# Remove platform velocity when landing.
if not _was_on_floor:
- velocity -= get_platform_velocity() # TODO: Test if last_platform_velocity is desired.
+ velocity -= get_platform_velocity() # TODO: Test if last_platform_velocity is desired.
else:
direction += last_platform_velocity
-
+
_was_on_floor = on_floor
-
+
var acceleration: float = movement.max_acceleration if on_floor else movement.max_air_acceleration
var deceleration: float = movement.max_friction if on_floor else movement.max_air_friction
var turning_speed: float = movement.max_turning_speed if on_floor else movement.max_air_turning_speed
-
+
var speed_change: float = acceleration
-
+
if direction.is_zero_approx():
speed_change = deceleration
else:
var flat_velocity: Vector3 = velocity * Utils.VEC3_HOR
-
+
if direction.sign() != flat_velocity.sign():
speed_change = turning_speed
-
+
#DebugDraw3D.draw_arrow(global_position, global_position + direction, Color.ORANGE, 0.5, true)
direction.y = velocity.y
-
+
speed_change *= ground_control if on_floor else air_control
-
+
if on_floor and not freeze_air_control:
air_control = 1.0
-
+
velocity = velocity.move_toward(direction, speed_change * delta)
+
+ await get_tree().physics_frame
+ _previous_velocity = velocity
#DebugDraw3D.draw_arrow(global_position, global_position + velocity, Color.BLUE, 0.5, true)
- #Logger.print_msg("%s Velocity: %s" %[self , velocity], 0.02)
+ #SPrint.print_msg("%s Velocity: %s" %[self , velocity], 0.02)
## @tutorial: https://gmtk.itch.io/platformer-toolkit/devlog/395523/behind-the-code
func apply_gravity(delta: float) -> void:
var margin: float = movement.gravity_check_margin
var gravity_multiplier: float = 1.0
-
+
if velocity.y < -margin:
- #Logger.print_msg("Falling\n%s" %velocity.y, 0.02)
+ #SPrint.print_msg("Falling\n%s" %velocity.y, 0.02)
gravity_multiplier = movement.fall_gravity_multiplier
elif velocity.y > margin:
- #Logger.print_msg("Rising\n%s" %velocity.y, 0.02)
+ #SPrint.print_msg("Rising\n%s" %velocity.y, 0.02)
gravity_multiplier = movement.rise_gravity_multiplier
else:
- #Logger.print_msg("Peaking\n%s" %velocity.y, 0.02)
+ #SPrint.print_msg("Peaking\n%s" %velocity.y, 0.02)
gravity_multiplier = movement.peak_gravity_multiplier
-
+
velocity.y -= (movement.get_gravity() * gravity_multiplier) * delta
## @tutorial: https://gmtk.itch.io/platformer-toolkit/devlog/395523/behind-the-code
func jump() -> void:
var jump_strength: float = sqrt(-2.0 * -movement.get_gravity() * movement.jump_height)
-
+
if velocity.y > 0.0:
jump_strength = maxf(jump_strength - velocity.y, 0.0)
elif velocity.y < 0.0:
jump_strength += absf(velocity.y)
-
+
velocity.y += jump_strength
diff --git a/source/components/characters/character_base.gd.uid b/source/src/gameplay/characters/character.gd.uid
similarity index 100%
rename from source/components/characters/character_base.gd.uid
rename to source/src/gameplay/characters/character.gd.uid
diff --git a/source/components/characters/character_movement_base.gd b/source/src/gameplay/characters/character_movement.gd
similarity index 97%
rename from source/components/characters/character_movement_base.gd
rename to source/src/gameplay/characters/character_movement.gd
index 2d0b70a..40226c7 100644
--- a/source/components/characters/character_movement_base.gd
+++ b/source/src/gameplay/characters/character_movement.gd
@@ -1,4 +1,4 @@
-class_name CharacterMovementBase
+class_name CharacterMovement
extends Resource
@export var jump_height: float = 1.25
diff --git a/source/components/characters/character_movement_base.gd.uid b/source/src/gameplay/characters/character_movement.gd.uid
similarity index 100%
rename from source/components/characters/character_movement_base.gd.uid
rename to source/src/gameplay/characters/character_movement.gd.uid
diff --git a/source/components/characters/common/footstep_component.gd b/source/src/gameplay/characters/common/footstep_component.gd
similarity index 81%
rename from source/components/characters/common/footstep_component.gd
rename to source/src/gameplay/characters/common/footstep_component.gd
index 84e7e80..eaa71cf 100644
--- a/source/components/characters/common/footstep_component.gd
+++ b/source/src/gameplay/characters/common/footstep_component.gd
@@ -18,42 +18,40 @@ func _ready() -> void:
func _physics_process(delta: float) -> void:
- # Don't process if it isn't necessary.
- if not is_instance_valid(character):
+ if not is_instance_valid(character) or audio_player.is_empty():
return
-
- if audio_player.is_empty():
- return
-
+
var on_floor: bool = character.is_on_floor()
+
if on_floor:
if _was_in_air:
# We landed. Play a footstep.
play_footstep()
_distance_traveled = 0.0
-
- var velocity: Vector3 = abs(character.velocity)
- velocity.y = 0.0
-
+
+ var velocity: Vector3 = character.velocity * Utils.VEC3_HOR
+
if velocity.is_zero_approx():
_distance_traveled = 0.0
else:
_distance_traveled += velocity.length() * delta
-
+
if _distance_traveled >= step_measure:
_distance_traveled = 0.0
play_footstep()
-
+
_was_in_air = not on_floor
func play_footstep() -> void:
footstep_occured.emit()
-
+
if is_instance_valid(_audio_player) and _audio_player.has_method(&"play"):
_audio_player.play()
func set_audio_player(new_player_path: NodePath) -> void:
audio_player = new_player_path
- _audio_player = get_node_or_null(new_player_path)
+
+ var player: Node = get_node_or_null(new_player_path)
+ _audio_player = player if Utils.is_node_audioplayer(player) else null
diff --git a/source/components/characters/common/footstep_component.gd.uid b/source/src/gameplay/characters/common/footstep_component.gd.uid
similarity index 100%
rename from source/components/characters/common/footstep_component.gd.uid
rename to source/src/gameplay/characters/common/footstep_component.gd.uid
diff --git a/source/components/characters/player/head.gd b/source/src/gameplay/characters/player/head.gd
similarity index 80%
rename from source/components/characters/player/head.gd
rename to source/src/gameplay/characters/player/head.gd
index 0429a00..91e5f74 100644
--- a/source/components/characters/player/head.gd
+++ b/source/src/gameplay/characters/player/head.gd
@@ -13,7 +13,7 @@ const INVERT_Y_PATH: StringName = &"game/input/camera_invert_y"
const CONTROLLER_INVERT_X_PATH: StringName = &"game/input/camera_controller_invert_x"
const CONTROLLER_INVERT_Y_PATH: StringName = &"game/input/camera_controller_invert_y"
-@export var camera: Camera3D
+@export var camera: ShakingCamera
@export_range(-360, 360, 0.5, "suffix:°") var look_min_vertical_angle: float = -85.0
@export_range(-360, 360, 0.5, "suffix:°") var look_max_vertical_angle: float = 85.0
@@ -33,10 +33,18 @@ const CONTROLLER_INVERT_Y_PATH: StringName = &"game/input/camera_controller_inve
@export var controller_invert_x: bool = false
@export var controller_invert_y: bool = false
+@export_group("Headbobbing", "headbob_")
+@export var headbob_range: float = 0.25
+@export var headbob_frequency: float = 0.5
+@export var headbob_multiplier: float = 1.0
+@export var headbob_character: Character3D
+
var rotational_direction: Vector2
var rotational_velocity: Vector2
var input_event: InputEvent
var using_controller: bool = false
+var headbob_time: float = 0.0
+var headbob_enabled: bool = true
func _ready() -> void:
@@ -48,13 +56,17 @@ func _ready() -> void:
invert_y = ProjectSettings.get_setting(INVERT_Y_PATH, false)
controller_invert_x = ProjectSettings.get_setting(CONTROLLER_INVERT_X_PATH, false)
controller_invert_y = ProjectSettings.get_setting(CONTROLLER_INVERT_Y_PATH, false)
-
+ headbob_enabled = SettingsManager.get_setting(&"misc", &"headbobbing")
+
+ SettingsManager.settings_changed.connect(_update_settings)
ProjectSettings.settings_changed.connect(_update_settings)
_update_settings.call()
func _physics_process(delta: float) -> void:
- _process_input(delta)
+ if not GameGlobals.in_cutscene:
+ _process_input(delta)
+ _perform_head_bob(delta)
func _unhandled_input(event: InputEvent) -> void:
@@ -73,29 +85,29 @@ func get_sensitivity() -> float:
var frame_rate: float = Engine.get_frames_per_second() / 60.0
sensitivity *= frame_rate
#print(frame_rate)
-
+
return sensitivity
func _process_input(delta: float) -> void:
if Input.mouse_mode != Input.MOUSE_MODE_CAPTURED or not InputManager.window_focused():
return
-
+
if input_event is InputEventMouseMotion:
_process_mouse(input_event, delta)
using_controller = false
rotational_direction = Vector2.ZERO
input_event = null
-
+
elif input_event is InputEventJoypadMotion:
_process_controller(delta)
using_controller = true
rotational_direction = Vector2.ZERO
-
+
# Decelerating when nothing is being pressed.
elif not rotational_velocity.is_zero_approx() and rotational_direction.is_zero_approx():
input_event = null
-
+
if not using_controller and mouse_acceleration:
rotational_velocity = _lerp_rotational_velocity(get_sensitivity() / 10, mouse_friction, delta)
elif using_controller and controller_acceleration:
@@ -103,7 +115,7 @@ func _process_input(delta: float) -> void:
apply_rotation(rotational_velocity)
else:
rotational_velocity = Vector2.ZERO
-
+
apply_rotation(rotational_velocity)
@@ -112,13 +124,13 @@ func _process_mouse(event: InputEventMouseMotion, delta: float) -> void:
# https://yosoyfreeman.github.io/godot/achieving-better-mouse-input-in-godot-4-the-perfect-camera-controller-full-project/
var viewport_transform: Transform2D = get_tree().get_root().get_final_transform()
rotational_direction = event.xformed_by(viewport_transform).get_relative()
-
+
if invert_x:
rotational_direction.x = -rotational_direction.x
-
+
if invert_y:
rotational_direction.y = -rotational_direction.y
-
+
if mouse_acceleration:
rotational_velocity = _lerp_rotational_velocity(deg_to_rad(get_sensitivity() / 10.0), mouse_friction, delta)
apply_rotation(rotational_velocity)
@@ -128,13 +140,13 @@ func _process_mouse(event: InputEventMouseMotion, delta: float) -> void:
func _process_controller(delta: float) -> void:
rotational_direction = Input.get_vector(ACTION_CAMERA_LEFT, ACTION_CAMERA_RIGHT, ACTION_CAMERA_UP, ACTION_CAMERA_DOWN)
-
+
if controller_invert_x:
rotational_direction.x = -rotational_direction.x
-
+
if controller_invert_y:
rotational_direction.y = -rotational_direction.y
-
+
if controller_acceleration:
rotational_velocity = _lerp_rotational_velocity(deg_to_rad(get_sensitivity()), controller_friction, delta)
apply_rotation(rotational_velocity)
@@ -144,3 +156,23 @@ func _process_controller(delta: float) -> void:
func _lerp_rotational_velocity(sensitivity: float, friction: float, delta: float) -> Vector2:
return rotational_velocity.lerp(rotational_direction * sensitivity, friction * delta)
+
+
+func _perform_head_bob(delta: float) -> void:
+ if not headbob_enabled:
+ camera.position = Vector3.ZERO
+ camera.rotation.z = 0.0
+ headbob_time = 0.0
+ return
+
+ var headbob_speed: float = maxf((headbob_character.velocity * Utils.VEC3_HOR).length(), 1.0)
+ SPrint.print_msgf(str("Headbob-Speed: ", headbob_speed), true)
+ SPrint.print_msgf(str("Headbob-Clock: ", headbob_time), true)
+
+ headbob_time += delta * headbob_speed * headbob_multiplier
+ headbob_time = fposmod(headbob_time, TAU)
+
+ camera.position.y = sin(headbob_time * headbob_frequency) * headbob_range
+ camera.position.x = cos(headbob_time * headbob_frequency / 2) * headbob_range
+ camera.rotation.z = deg_to_rad(lerp(camera.position.x, camera.position.y, 0.5)) * TAU
+ SPrint.print_msgf(str("Head Z-Rotation: ", camera.rotation.z), true)
diff --git a/source/components/characters/player/head.gd.uid b/source/src/gameplay/characters/player/head.gd.uid
similarity index 100%
rename from source/components/characters/player/head.gd.uid
rename to source/src/gameplay/characters/player/head.gd.uid
diff --git a/source/src/gameplay/characters/player/player_character.gd b/source/src/gameplay/characters/player/player_character.gd
new file mode 100644
index 0000000..5223730
--- /dev/null
+++ b/source/src/gameplay/characters/player/player_character.gd
@@ -0,0 +1,122 @@
+class_name PlayerCharacter
+extends Character3D
+
+
+const ACTION_RUN: StringName = &"run"
+const ACTION_JUMP: StringName = &"jump"
+const ACTION_CROUCH: StringName = &"crouch"
+const ACTION_MOVE_LEFT: StringName = &"move_left"
+const ACTION_MOVE_RIGHT: StringName = &"move_right"
+const ACTION_MOVE_FORWARD: StringName = &"move_forward"
+const ACTION_MOVE_BACKWARD: StringName = &"move_backward"
+
+@export_group("Crouching")
+@export var crouch_walk_speed_multiplier: float = 0.4
+@export var crouch_speed: float = 7.25
+@export var standup_speed: float = 5.3
+@export var standup_speed_affection: float = 0.5
+@export var standup_speed_affection_speed_multiplier: float = 0.25
+@export var standing_collision_height: float = 1.8
+@export var standing_camera_height: float = 1.6
+@export var crouch_collision_height: float = 0.9
+@export var crouch_camera_height: float = 0.81
+
+var has_control: bool = true
+var is_crouching: bool = false
+var crouch_speed_affection: float = 0.0
+
+@onready var head: GameCamera3D = $Head
+@onready var collision_shape: CollisionShape3D = $CollisionShape3D
+@onready var standup_checker: Area3D = $StandupChecker
+
+
+func _ready() -> void:
+ GameGlobals.player = self
+
+ #if not get_tree().current_scene.is_node_ready():
+ #await get_tree().current_scene.ready
+#
+ #var spawn_point := PlayerSpawnPoint.get_spawn_point_by_identifier(GameGlobals.spawn_id)
+#
+ #if is_instance_valid(spawn_point):
+ #global_position = spawn_point.global_position
+ #head.global_rotation = spawn_point.global_rotation
+
+
+func _physics_process(delta: float) -> void:
+ if GameGlobals.in_cutscene:
+ return
+
+ # Add the gravity.
+ if not is_on_floor():
+ apply_gravity(delta)
+ elif not _was_on_floor:
+ if _previous_velocity.y <= -2.0:
+ head.camera.shake(0.025, 0.175)
+
+ if not has_control:
+ move(Vector3.ZERO, delta)
+ move_and_slide()
+ return
+
+ # Handle jump.
+ if Input.is_action_just_pressed(ACTION_JUMP) and is_on_floor() and not is_crouching:
+ jump()
+
+ handle_crouching(delta)
+
+ var input_dir: Vector3 = get_input_direction()
+ movement_direction = input_dir.normalized()
+
+ # Rotate the movement direction based on the cameras orientation.
+ movement_direction = movement_direction.rotated(Vector3.UP, head.global_rotation.y)
+
+ speed = get_desired_speed() * input_dir.length()
+ speed *= crouch_walk_speed_multiplier if is_crouching else 1.0
+
+ if not is_crouching:
+ speed *= remap(crouch_speed_affection, 0.0, 1.0, 1.0, standup_speed_affection)
+
+ move(movement_direction, delta)
+
+ move_and_slide()
+
+
+func apply_gravity(delta: float) -> void:
+ super(delta)
+
+
+func get_input_direction() -> Vector3:
+ if not InputManager.window_focused():
+ return Vector3.ZERO
+
+ var input_dir := Input.get_vector(ACTION_MOVE_LEFT, ACTION_MOVE_RIGHT, ACTION_MOVE_FORWARD, ACTION_MOVE_BACKWARD)
+ var direction: Vector3 = (transform.basis * Vector3(input_dir.x, 1, input_dir.y))#.normalized()
+ direction.y = 0.0
+ return direction
+
+
+func get_desired_speed() -> float:
+ if Input.is_action_pressed(ACTION_RUN) and not is_crouching:
+ return movement.running_speed if is_on_floor() else movement.air_running_speed
+
+ return movement.walking_speed if is_on_floor() else movement.air_walking_speed
+
+
+func handle_crouching(delta: float) -> void:
+ var should_crouch: bool = Input.is_action_pressed(ACTION_CROUCH) and (is_on_floor() or is_crouching)
+ var would_ceiling_collide: bool = standup_checker.has_overlapping_bodies()
+
+ is_crouching = should_crouch or would_ceiling_collide
+ var crouching_speed: float = crouch_speed if is_crouching else standup_speed
+
+ var target_collision_height: float = crouch_collision_height if is_crouching else standing_collision_height
+ collision_shape.shape.height = target_collision_height #lerp(collision_shape.shape.height, target_collision_height, crouching_speed * delta * 5.0)
+ collision_shape.position.y = collision_shape.shape.height / 2.0
+
+ var target_camera_height: float = crouch_camera_height if is_crouching else standing_camera_height
+ var weight: float = 1.0 - pow(0.5, delta * crouching_speed)
+ head.position.y = lerp(head.position.y, target_camera_height, weight)
+
+ crouch_speed_affection = lerp(crouch_speed_affection, float(is_crouching), weight * standup_speed_affection_speed_multiplier if not is_crouching else 1.0)
+ SPrint.print_msgf("Crouching Speed Affection: %s\n%s" % [crouch_speed_affection, is_crouching], true)
diff --git a/source/components/characters/player/player_character.gd.uid b/source/src/gameplay/characters/player/player_character.gd.uid
similarity index 100%
rename from source/components/characters/player/player_character.gd.uid
rename to source/src/gameplay/characters/player/player_character.gd.uid
diff --git a/source/src/gameplay/characters/player/player_character.tscn b/source/src/gameplay/characters/player/player_character.tscn
new file mode 100644
index 0000000..bb965a5
--- /dev/null
+++ b/source/src/gameplay/characters/player/player_character.tscn
@@ -0,0 +1,57 @@
+[gd_scene load_steps=9 format=3 uid="uid://clhy3kiceqf2o"]
+
+[ext_resource type="Script" uid="uid://day6rhxicaxqf" path="res://src/gameplay/characters/player/player_character.gd" id="1_hqu6r"]
+[ext_resource type="Script" uid="uid://dsjlv8midt2g2" path="res://src/gameplay/characters/character_movement.gd" id="2_1ixuj"]
+[ext_resource type="Script" uid="uid://2y3gnaqtrfnx" path="res://src/gameplay/characters/player/head.gd" id="2_fjt7c"]
+[ext_resource type="Script" uid="uid://44s0v8mukxk4" path="res://src/core/camera/shaking_camera.gd" id="4_ci1ud"]
+[ext_resource type="Script" uid="uid://nuwb55sbveaf" path="res://src/gameplay/characters/common/footstep_component.gd" id="4_vq0uu"]
+
+[sub_resource type="Resource" id="Resource_vq0uu"]
+script = ExtResource("2_1ixuj")
+jump_height = 0.25
+max_turning_speed = 70.0
+peak_gravity_multiplier = 0.3
+metadata/_custom_type_script = "uid://dsjlv8midt2g2"
+
+[sub_resource type="CylinderShape3D" id="CylinderShape3D_fjt7c"]
+height = 1.8
+
+[sub_resource type="CylinderShape3D" id="CylinderShape3D_gy1j0"]
+height = 1.59
+radius = 0.49
+
+[node name="PlayerCharacter" type="CharacterBody3D"]
+collision_layer = 2
+script = ExtResource("1_hqu6r")
+standup_speed_affection = 0.15
+standup_speed_affection_speed_multiplier = 0.5
+movement = SubResource("Resource_vq0uu")
+metadata/_custom_type_script = "uid://day6rhxicaxqf"
+
+[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.9, 0)
+shape = SubResource("CylinderShape3D_fjt7c")
+
+[node name="Head" type="Node3D" parent="." node_paths=PackedStringArray("camera", "headbob_character")]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.6, 0)
+script = ExtResource("2_fjt7c")
+camera = NodePath("ShakingCamera")
+headbob_range = 0.05
+headbob_frequency = 2.0
+headbob_character = NodePath("..")
+
+[node name="ShakingCamera" type="Camera3D" parent="Head"]
+fov = 85.0
+script = ExtResource("4_ci1ud")
+metadata/_custom_type_script = "uid://44s0v8mukxk4"
+
+[node name="FootstepComponent" type="Node" parent="." node_paths=PackedStringArray("character")]
+script = ExtResource("4_vq0uu")
+character = NodePath("..")
+
+[node name="StandupChecker" type="Area3D" parent="."]
+input_ray_pickable = false
+
+[node name="CollisionShape3D" type="CollisionShape3D" parent="StandupChecker"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.99, 0)
+shape = SubResource("CylinderShape3D_gy1j0")
diff --git a/source/components/hazards/saw/saw.blend b/source/src/gameplay/hazards/saw/saw.blend
similarity index 100%
rename from source/components/hazards/saw/saw.blend
rename to source/src/gameplay/hazards/saw/saw.blend
diff --git a/source/components/hazards/saw/saw.blend.import b/source/src/gameplay/hazards/saw/saw.blend.import
similarity index 73%
rename from source/components/hazards/saw/saw.blend.import
rename to source/src/gameplay/hazards/saw/saw.blend.import
index 4aa0618..dd586a5 100644
--- a/source/components/hazards/saw/saw.blend.import
+++ b/source/src/gameplay/hazards/saw/saw.blend.import
@@ -4,20 +4,22 @@ importer="scene"
importer_version=1
type="PackedScene"
uid="uid://u56f1ks46ob6"
-path="res://.godot/imported/saw.blend-3146841855ef00b916ccba50c122f9a9.scn"
+path="res://.godot/imported/saw.blend-4dd5d535df2fead0c723cb77c33c0ad9.scn"
[deps]
-source_file="res://components/hazards/saw/saw.blend"
-dest_files=["res://.godot/imported/saw.blend-3146841855ef00b916ccba50c122f9a9.scn"]
+source_file="res://src/gameplay/hazards/saw/saw.blend"
+dest_files=["res://.godot/imported/saw.blend-4dd5d535df2fead0c723cb77c33c0ad9.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
+nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
+nodes/use_name_suffixes=true
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
@@ -32,7 +34,16 @@ animation/trimming=false
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
-_subresources={}
+materials/extract=0
+materials/extract_format=0
+materials/extract_path=""
+_subresources={
+"nodes": {
+"PATH:Cylinder": {
+"mesh_instance/layers": 2
+}
+}
+}
blender/nodes/visible=0
blender/nodes/active_collection_only=false
blender/nodes/punctual_lights=true
@@ -51,3 +62,4 @@ blender/materials/export_materials=1
blender/animation/limit_playback=true
blender/animation/always_sample=true
blender/animation/group_tracks=true
+gltf/naming_version=0
diff --git a/source/components/hazards/saw/saw.blend1 b/source/src/gameplay/hazards/saw/saw.blend1
similarity index 100%
rename from source/components/hazards/saw/saw.blend1
rename to source/src/gameplay/hazards/saw/saw.blend1
diff --git a/source/src/gameplay/hazards/saw/saw.gd b/source/src/gameplay/hazards/saw/saw.gd
new file mode 100644
index 0000000..06c79a9
--- /dev/null
+++ b/source/src/gameplay/hazards/saw/saw.gd
@@ -0,0 +1,29 @@
+@tool
+extends Node3D
+
+@export var spin_speed: float = 7.0
+
+var speed: float = 0.0
+
+@onready var saw_skin: Node3D = $SawSkin
+
+
+func _ready() -> void:
+ if Engine.is_editor_hint() and _editor_is_scene_root():
+ return
+
+ saw_skin.rotation.z = randf() * TAU
+
+
+# Called every frame. 'delta' is the elapsed time since the previous frame.
+func _physics_process(delta: float) -> void:
+ if Engine.is_editor_hint() and _editor_is_scene_root():
+ return
+
+ speed = move_toward(speed, spin_speed, delta)
+ saw_skin.rotate_z(speed * delta)
+
+
+func _editor_is_scene_root() -> bool:
+ var ed_interface: Object = Engine.get_singleton(&"EditorInterface")
+ return Engine.is_editor_hint() and ed_interface.get_edited_scene_root() == self
diff --git a/source/components/hazards/saw/saw.gd.uid b/source/src/gameplay/hazards/saw/saw.gd.uid
similarity index 100%
rename from source/components/hazards/saw/saw.gd.uid
rename to source/src/gameplay/hazards/saw/saw.gd.uid
diff --git a/source/src/gameplay/hazards/saw/saw.tscn b/source/src/gameplay/hazards/saw/saw.tscn
new file mode 100644
index 0000000..8d54511
--- /dev/null
+++ b/source/src/gameplay/hazards/saw/saw.tscn
@@ -0,0 +1,24 @@
+[gd_scene load_steps=5 format=3 uid="uid://c0jearfhlqcvr"]
+
+[ext_resource type="Script" uid="uid://cd1p1fxbdglwu" path="res://src/gameplay/hazards/saw/saw.gd" id="1_bec0m"]
+[ext_resource type="PackedScene" uid="uid://u56f1ks46ob6" path="res://src/gameplay/hazards/saw/saw.blend" id="1_eq5lu"]
+[ext_resource type="Script" uid="uid://bfv3de7iqflhv" path="res://src/core/damage/death_area.gd" id="3_mj8ja"]
+
+[sub_resource type="CylinderShape3D" id="CylinderShape3D_bec0m"]
+height = 0.2
+radius = 0.8
+
+[node name="Saw" type="Node3D"]
+script = ExtResource("1_bec0m")
+
+[node name="SawSkin" parent="." instance=ExtResource("1_eq5lu")]
+
+[node name="DeathArea" type="Area3D" parent="."]
+collision_layer = 0
+collision_mask = 2
+script = ExtResource("3_mj8ja")
+
+[node name="CollisionShape3D" type="CollisionShape3D" parent="DeathArea"]
+transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 0, 0)
+shape = SubResource("CylinderShape3D_bec0m")
+debug_color = Color(0.999874, 0, 0.0979987, 0.42)
diff --git a/source/src/gameplay/illusionary/illusionary_wall.gd b/source/src/gameplay/illusionary/illusionary_wall.gd
new file mode 100644
index 0000000..7b7047d
--- /dev/null
+++ b/source/src/gameplay/illusionary/illusionary_wall.gd
@@ -0,0 +1,85 @@
+class_name IllusionaryWall
+extends Node3D
+
+
+@export var locked: bool = false: set = set_locked
+@export var inverse: bool = false
+@export var dissolve_duration: float = 0.45
+@export var static_body: StaticBody3D
+@export var mesh: MeshInstance3D
+@export_group("Areas")
+@export var appear_area: Area3D:
+ set(value):
+ if is_instance_valid(appear_area):
+ appear_area.body_exited.disconnect(_on_appear_area_body_exited)
+
+ appear_area = value
+
+ if not appear_area.is_node_ready():
+ await appear_area.ready
+
+ appear_area.body_exited.connect(_on_appear_area_body_exited)
+@export var disappear_area: Area3D:
+ set(value):
+ if is_instance_valid(disappear_area):
+ disappear_area.body_entered.disconnect(_on_disappear_area_body_entered)
+
+ disappear_area = value
+
+ if not disappear_area.is_node_ready():
+ await disappear_area.ready
+
+ disappear_area.body_entered.connect(_on_disappear_area_body_entered)
+
+
+func _ready() -> void:
+ force_update()
+
+
+func set_locked(value: bool) -> void:
+ locked = value
+ force_update()
+
+
+func unlock() -> void:
+ locked = false
+
+
+func force_update() -> void:
+ if disappear_area.overlaps_body(GameGlobals.get_player()):
+ (disappear if not inverse else appear).call()
+ elif not appear_area.overlaps_body(GameGlobals.get_player()):
+ (appear if not inverse else disappear).call()
+
+
+func disappear() -> void:
+ assert(is_instance_valid(mesh), "'mesh' needs to be set.")
+
+ if locked:
+ return
+
+ if is_instance_valid(static_body):
+ static_body.process_mode = Node.PROCESS_MODE_DISABLED
+
+ var tween: Tween = create_tween()
+ tween.tween_property(mesh, ^"material_override:shader_parameter/alpha_scissor_threshold", 1.0, dissolve_duration)
+
+
+func appear() -> void:
+ assert(is_instance_valid(mesh), "'mesh' needs to be set.")
+
+ if is_instance_valid(static_body):
+ static_body.process_mode = Node.PROCESS_MODE_INHERIT
+
+ var tween: Tween = create_tween()
+ tween.tween_property(mesh, ^"material_override:shader_parameter/alpha_scissor_threshold", 0.0, dissolve_duration)
+
+
+func _on_appear_area_body_exited(body: Node3D) -> void:
+ if body == GameGlobals.get_player():
+ force_update()
+
+
+func _on_disappear_area_body_entered(body: Node3D) -> void:
+ if body == GameGlobals.get_player():
+ force_update()
diff --git a/source/src/gameplay/illusionary/illusionary_wall.gd.uid b/source/src/gameplay/illusionary/illusionary_wall.gd.uid
new file mode 100644
index 0000000..4aa4a14
--- /dev/null
+++ b/source/src/gameplay/illusionary/illusionary_wall.gd.uid
@@ -0,0 +1 @@
+uid://cy2248x8tuoj4
diff --git a/source/globals/autoloads/audio/audio_manager.gd b/source/src/globals/autoloads/audio/audio_manager.gd
similarity index 68%
rename from source/globals/autoloads/audio/audio_manager.gd
rename to source/src/globals/autoloads/audio/audio_manager.gd
index 95f7963..894d548 100644
--- a/source/globals/autoloads/audio/audio_manager.gd
+++ b/source/src/globals/autoloads/audio/audio_manager.gd
@@ -12,10 +12,10 @@ func play_audio(stream: AudioStream, bus: StringName, force_restart: bool = fals
var existing_player: AudioStreamPlayer = get_audio_player_for_stream(stream, bus)
existing_player.stop()
existing_player.play()
-
+
return
-
- var player: AudioStreamPlayer = _create_audio_player(stream, bus)
+
+ var player: AudioStreamPlayer = create_audio_player(stream, bus)
player.finished.connect(stop_audio.bind(stream, bus))
add_child(player)
@@ -24,27 +24,39 @@ func play_audio(stream: AudioStream, bus: StringName, force_restart: bool = fals
func stop_audio(stream: AudioStream, bus: StringName) -> void:
var player: AudioStreamPlayer = get_audio_player_for_stream(stream, bus)
-
+
if is_instance_valid(player):
player.queue_free()
-func fade_audio(stream: AudioStream, volume_db: float, duration: float, bus: StringName, stop_on_finish: bool = false) -> void:
+func fade_audio(
+ stream: AudioStream,
+ volume_db: float,
+ duration: float,
+ bus: StringName,
+ stop_on_finish: bool = false
+) -> void:
var player: AudioStreamPlayer = get_audio_player_for_stream(stream, bus)
if not is_instance_valid(player):
return
- var tween: Tween = create_tween()
+ var tween: Tween = create_tween().bind_node(player)
tween.tween_property(player, ^"volume_db", volume_db, duration)
-
+
+ if stop_on_finish:
+ tween.tween_callback(stop_audio.bind(stream, bus))
+
await tween.finished
- if stop_on_finish and is_instance_valid(player):
- stop_audio(stream, bus)
-
-func fade_audio_linear(stream: AudioStream, volume_linear: float, bus: StringName, duration: float, stop_on_finish: bool = false) -> void:
+func fade_audio_linear(
+ stream: AudioStream,
+ volume_linear: float,
+ bus: StringName,
+ duration: float,
+ stop_on_finish: bool = false
+) -> void:
await fade_audio(stream, linear_to_db(volume_linear), duration, bus, stop_on_finish)
@@ -52,7 +64,7 @@ func get_audio_player_for_stream(stream: AudioStream, bus: StringName) -> AudioS
for player: AudioStreamPlayer in get_children():
if player.stream == stream and player.bus == bus:
return player
-
+
return null
@@ -60,7 +72,13 @@ func is_playing_audio(stream: AudioStream, bus: StringName) -> bool:
return is_instance_valid(get_audio_player_for_stream(stream, bus))
-func _create_audio_player(stream: AudioStream, bus: StringName) -> AudioStreamPlayer:
+func flush_audio_by_bus(bus: StringName) -> void:
+ for player: AudioStreamPlayer in get_children():
+ if player.bus == bus:
+ player.queue_free()
+
+
+func create_audio_player(stream: AudioStream, bus: StringName) -> AudioStreamPlayer:
var player := AudioStreamPlayer.new()
player.bus = bus
player.stream = stream
diff --git a/source/globals/autoloads/audio/audio_manager.gd.uid b/source/src/globals/autoloads/audio/audio_manager.gd.uid
similarity index 100%
rename from source/globals/autoloads/audio/audio_manager.gd.uid
rename to source/src/globals/autoloads/audio/audio_manager.gd.uid
diff --git a/source/globals/autoloads/audio/audio_manager.tscn b/source/src/globals/autoloads/audio/audio_manager.tscn
similarity index 75%
rename from source/globals/autoloads/audio/audio_manager.tscn
rename to source/src/globals/autoloads/audio/audio_manager.tscn
index 78152ce..19770c8 100644
--- a/source/globals/autoloads/audio/audio_manager.tscn
+++ b/source/src/globals/autoloads/audio/audio_manager.tscn
@@ -1,6 +1,6 @@
[gd_scene load_steps=2 format=3 uid="uid://diduaxhewgjwa"]
-[ext_resource type="Script" uid="uid://chwfg6slvsay8" path="res://globals/autoloads/audio/audio_manager.gd" id="1_pjc45"]
+[ext_resource type="Script" uid="uid://chwfg6slvsay8" path="res://src/globals/autoloads/audio/audio_manager.gd" id="1_pjc45"]
[node name="AudioManager" type="Node"]
script = ExtResource("1_pjc45")
diff --git a/source/src/globals/autoloads/game_globals.gd b/source/src/globals/autoloads/game_globals.gd
new file mode 100644
index 0000000..d9a4652
--- /dev/null
+++ b/source/src/globals/autoloads/game_globals.gd
@@ -0,0 +1,71 @@
+extends Node
+
+signal player_died(death_type: DeathTypes)
+
+const MAIN_MENU_PATH: String = "uid://dwd8wf02j2epn"
+const GAME_PATH: String = "uid://s7cw6ulb7kh7"
+const PLAYER_PATH: String = "uid://clhy3kiceqf2o"
+const CHAPTER_LIST: ChapterList = preload("uid://d2mcwotliowv7")
+
+enum DeathTypes {
+ SAW,
+}
+
+var game: Game
+var player: PlayerCharacter
+var player_alive: bool = true
+var spawn_id: StringName = &"": set = set_spawn_id
+var chapter_index: int = 0: set = set_chapter_index
+var in_cutscene: bool = false
+
+
+func get_player() -> PlayerCharacter:
+ return player
+
+
+func reset_game() -> void:
+ player_alive = true
+ spawn_id = &""
+ chapter_index = 0
+ in_cutscene = false
+
+
+func load_from_save() -> void:
+ SaveManager.load_game()
+
+ var data: Dictionary[StringName, Variant] = SaveManager.persistent_data
+ spawn_id = data.get(&"spawn_id")
+ chapter_index = data.get(&"chapter_index")
+
+
+func set_spawn_id(id: StringName) -> void:
+ spawn_id = id
+
+ SaveManager.persistent_data[&"spawn_id"] = spawn_id
+
+
+func set_chapter_index(index: int) -> void:
+ chapter_index = index
+
+ SaveManager.persistent_data[&"chapter_index"] = chapter_index
+
+
+func kill_player(death_type: DeathTypes) -> void:
+ if not player_alive:
+ return
+
+ get_tree().paused = true
+
+ SPrint.print_msg(
+ "Killed player. Death Type: %s" % death_type, -1.0, SPrint.NORMAL_RICH, Color.ORANGE_RED
+ )
+
+ if is_instance_valid(player):
+ player.process_mode = Node.PROCESS_MODE_DISABLED
+
+ AudioManager.flush_audio_by_bus(AudioManager.SFX)
+ AudioManager.flush_audio_by_bus(AudioManager.MUSIC)
+ AudioManager.flush_audio_by_bus(AudioManager.AMBIENCE)
+
+ player_alive = false
+ player_died.emit(death_type)
diff --git a/source/globals/autoloads/game_globals.gd.uid b/source/src/globals/autoloads/game_globals.gd.uid
similarity index 100%
rename from source/globals/autoloads/game_globals.gd.uid
rename to source/src/globals/autoloads/game_globals.gd.uid
diff --git a/source/globals/autoloads/input_manager.gd b/source/src/globals/autoloads/input_manager.gd
similarity index 61%
rename from source/globals/autoloads/input_manager.gd
rename to source/src/globals/autoloads/input_manager.gd
index 671690e..e937eed 100644
--- a/source/globals/autoloads/input_manager.gd
+++ b/source/src/globals/autoloads/input_manager.gd
@@ -9,14 +9,14 @@ func _input(event: InputEvent) -> void:
if not window_focused():
get_viewport().set_input_as_handled()
return
-
+
if event is InputEventMouseButton or event is InputEventKey:
if using_controller:
using_controller = false
elif event is InputEventJoypadButton or event is InputEventJoypadMotion:
if not using_controller:
using_controller = true
-
+
if event.is_action_pressed(TOGGLE_MOUSE_BUTTON):
toggle_mouse()
@@ -26,4 +26,20 @@ func window_focused() -> bool:
func toggle_mouse() -> void:
- Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED if Input.mouse_mode == Input.MOUSE_MODE_VISIBLE else Input.MOUSE_MODE_VISIBLE)
+ Input.set_mouse_mode(
+ Input.MOUSE_MODE_CAPTURED
+ if Input.mouse_mode == Input.MOUSE_MODE_VISIBLE
+ else Input.MOUSE_MODE_VISIBLE
+ )
+
+
+func set_mouse_captured(captured: bool) -> void:
+ (capture_mouse if captured else release_mouse).call()
+
+
+func capture_mouse() -> void:
+ Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
+
+
+func release_mouse() -> void:
+ Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
diff --git a/source/globals/autoloads/input_manager.gd.uid b/source/src/globals/autoloads/input_manager.gd.uid
similarity index 100%
rename from source/globals/autoloads/input_manager.gd.uid
rename to source/src/globals/autoloads/input_manager.gd.uid
diff --git a/source/src/globals/autoloads/save_manager.gd b/source/src/globals/autoloads/save_manager.gd
new file mode 100644
index 0000000..1b06d7f
--- /dev/null
+++ b/source/src/globals/autoloads/save_manager.gd
@@ -0,0 +1,46 @@
+extends Node
+
+const SAVE_PATH: String = "user://saves/"
+const SAVE_FILENAME: String = "saved_game.dat"
+const SAVE_FILE: String = SAVE_PATH + SAVE_FILENAME
+
+var persistent_data: Dictionary[StringName, Variant] = {
+ &"spawn_id": &"",
+ &"sequence_index": 0,
+ &"chapter_index": 0,
+ &"level_data": {
+
+ }
+}
+
+func save_game() -> void:
+ DirAccess.make_dir_recursive_absolute(SAVE_PATH)
+
+ var file := FileAccess.open(SAVE_FILE, FileAccess.WRITE)
+
+ # Store the variables.
+ file.store_var(persistent_data)
+
+
+func load_game() -> bool:
+ if not save_exists():
+ return false
+
+ var file := FileAccess.open(SAVE_FILE, FileAccess.READ)
+
+ # Load the variables.
+ var loaded_data: Variant = file.get_var()
+
+ if loaded_data is Dictionary:
+ persistent_data = loaded_data
+ return true
+
+ return false
+
+
+func delete_save() -> void:
+ DirAccess.remove_absolute(SAVE_FILE)
+
+
+func save_exists() -> bool:
+ return FileAccess.file_exists(SAVE_FILE)
diff --git a/source/globals/autoloads/save_manager.gd.uid b/source/src/globals/autoloads/save_manager.gd.uid
similarity index 100%
rename from source/globals/autoloads/save_manager.gd.uid
rename to source/src/globals/autoloads/save_manager.gd.uid
diff --git a/source/globals/autoloads/scene_fader/scene_fader.gd b/source/src/globals/autoloads/scene_fader/scene_fader.gd
similarity index 62%
rename from source/globals/autoloads/scene_fader/scene_fader.gd
rename to source/src/globals/autoloads/scene_fader/scene_fader.gd
index 70869dc..4eab9d6 100644
--- a/source/globals/autoloads/scene_fader/scene_fader.gd
+++ b/source/src/globals/autoloads/scene_fader/scene_fader.gd
@@ -1,6 +1,6 @@
extends CanvasLayer
-
+const _ANIM_LOADING: StringName = &"hover"
var fade_in_duration: float = 2.0
var fade_out_duration: float = 2.0
@@ -8,33 +8,33 @@ var is_fading: bool = false
var is_loading: bool = false
-@onready var interactive_loader: InteractiveLoader = $InteractiveLoader
-@onready var color_rect: ColorRect = $ColorRect
-@onready var loading_hint_animations: AnimationPlayer = $HintMargin/Control/LoadingHint/LoadingHintAnimations
-@onready var loading_hint: TextureRect = $HintMargin/Control/LoadingHint
+@onready var interactive_loader: InteractiveLoader = %InteractiveLoader
+@onready var color_rect: ColorRect = %ColorRect
+@onready var loading_hint_animations: AnimationPlayer = %LoadingHintAnimations
+@onready var loading_hint: TextureRect = %LoadingHint
func _ready() -> void:
color_rect.hide()
+ color_rect.color.a = 0.0
-func load_to_path(path: String, unpause_game: bool = false) -> void:
+func load_to_path(path: String) -> void:
if is_loading:
return
-
+
is_loading = true
await fade_in()
-
+ await get_tree().create_timer(1.0).timeout
+
var scene: PackedScene = await interactive_loader.load_threaded(path)
-
- assert(is_instance_valid(scene))
-
+
+ assert(is_instance_valid(scene), "Scene is invalid.")
+
get_tree().change_scene_to_packed(scene)
-
- if unpause_game:
- get_tree().paused = false
-
+ get_tree().paused = false
+
fade_out()
is_loading = false
@@ -42,26 +42,26 @@ func load_to_path(path: String, unpause_game: bool = false) -> void:
func fade_in() -> void:
color_rect.show()
is_fading = true
-
+
var tween: Tween = create_tween()
tween.tween_property(color_rect, ^"color:a", 1.0, fade_in_duration)
await tween.finished
-
+
is_fading = false
- loading_hint_animations.play(&"hover")
+ loading_hint_animations.play(_ANIM_LOADING)
loading_hint.show()
func fade_out() -> void:
loading_hint_animations.stop()
loading_hint.hide()
-
+
is_fading = true
-
+
var tween: Tween = create_tween()
tween.tween_property(color_rect, ^"color:a", 0.0, fade_out_duration)
await tween.finished
-
+
color_rect.hide()
is_fading = false
diff --git a/source/globals/autoloads/scene_fader/scene_fader.gd.uid b/source/src/globals/autoloads/scene_fader/scene_fader.gd.uid
similarity index 100%
rename from source/globals/autoloads/scene_fader/scene_fader.gd.uid
rename to source/src/globals/autoloads/scene_fader/scene_fader.gd.uid
diff --git a/source/globals/autoloads/scene_fader/scene_fader.tscn b/source/src/globals/autoloads/scene_fader/scene_fader.tscn
similarity index 93%
rename from source/globals/autoloads/scene_fader/scene_fader.tscn
rename to source/src/globals/autoloads/scene_fader/scene_fader.tscn
index 5727e28..f624103 100644
--- a/source/globals/autoloads/scene_fader/scene_fader.tscn
+++ b/source/src/globals/autoloads/scene_fader/scene_fader.tscn
@@ -1,7 +1,7 @@
[gd_scene load_steps=7 format=3 uid="uid://dis4efdm5s2fc"]
-[ext_resource type="Script" uid="uid://cynllcoh2smgv" path="res://globals/autoloads/scene_fader/scene_fader.gd" id="1_7tt87"]
-[ext_resource type="Script" uid="uid://d0k03wk1s7cw0" path="res://components/general/interactive_loader.gd" id="2_dwqb8"]
+[ext_resource type="Script" uid="uid://cynllcoh2smgv" path="res://src/globals/autoloads/scene_fader/scene_fader.gd" id="1_7tt87"]
+[ext_resource type="Script" uid="uid://d0k03wk1s7cw0" path="res://src/core/interactive_loader.gd" id="2_dwqb8"]
[ext_resource type="Texture2D" uid="uid://dhw8y2oqxvgwu" path="res://godot_icon.svg" id="3_dwqb8"]
[sub_resource type="Animation" id="Animation_t3447"]
@@ -71,10 +71,12 @@ layer = 10
script = ExtResource("1_7tt87")
[node name="InteractiveLoader" type="Node" parent="."]
+unique_name_in_owner = true
script = ExtResource("2_dwqb8")
metadata/_custom_type_script = "uid://d0k03wk1s7cw0"
[node name="ColorRect" type="ColorRect" parent="."]
+unique_name_in_owner = true
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
@@ -103,6 +105,7 @@ size_flags_vertical = 8
mouse_filter = 2
[node name="LoadingHint" type="TextureRect" parent="HintMargin/Control"]
+unique_name_in_owner = true
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
@@ -120,6 +123,7 @@ texture = ExtResource("3_dwqb8")
expand_mode = 5
[node name="LoadingHintAnimations" type="AnimationPlayer" parent="HintMargin/Control/LoadingHint"]
+unique_name_in_owner = true
libraries = {
&"": SubResource("AnimationLibrary_e571n")
}
diff --git a/source/src/globals/autoloads/settings/graphic_settings_preset.gd b/source/src/globals/autoloads/settings/graphic_settings_preset.gd
new file mode 100644
index 0000000..a56e162
--- /dev/null
+++ b/source/src/globals/autoloads/settings/graphic_settings_preset.gd
@@ -0,0 +1,42 @@
+class_name GraphicSettingPreset
+extends Resource
+
+const PATH_MSAA2D: String = "rendering/anti_aliasing/quality/msaa_2d"
+const PATH_MSAA3D: String = "rendering/anti_aliasing/quality/msaa_3d"
+const PATH_SSAO_QUALITY: String = "rendering/environment/ssao/quality"
+const PATH_SSIL_QUALITY: String = "rendering/environment/ssil/quality"
+const PATH_SSR_QUALITY: String = "rendering/environment/screen_space_reflection/roughness_quality"
+const PATH_FOG_SIZE: String = "rendering/environment/volumetric_fog/volume_size"
+const PATH_FOG_DEPTH: String = "rendering/environment/volumetric_fog/volume_depth"
+const PATH_FOG_FILTER: String = "rendering/environment/volumetric_fog/use_filter"
+
+@export_group("Shadows")
+@export_group("Lightning")
+@export_group("Textures")
+@export_group("Anti-Aliasing")
+@export var msaa_2d := Viewport.MSAA.MSAA_DISABLED
+@export var msaa_3d := Viewport.MSAA.MSAA_DISABLED
+@export_group("Textures")
+@export_group("Environment")
+@export var ssao := RenderingServer.EnvironmentSSAOQuality.ENV_SSAO_QUALITY_MEDIUM
+@export var ssil := RenderingServer.EnvironmentSSILQuality.ENV_SSIL_QUALITY_MEDIUM
+@export var ssr := RenderingServer.EnvironmentSSRRoughnessQuality.ENV_SSR_ROUGHNESS_QUALITY_LOW
+@export_subgroup("Volumetric Fog")
+@export_range(16, 512) var volumetric_fog_size: int = 64
+@export_range(16, 512) var volumetric_fog_depth: int = 64
+@export_enum("No (Faster)", "Yes (Higher Quality)") var volumetric_use_filter: int = 1
+
+
+func apply_settings() -> void:
+ # --Anti-Aliasing
+ ProjectSettings.set_setting(PATH_MSAA2D, msaa_2d)
+ ProjectSettings.set_setting(PATH_MSAA3D, msaa_3d)
+ # --Environment--
+ # SSAO/SSIL/SSR
+ ProjectSettings.set_setting(PATH_SSAO_QUALITY, ssao)
+ ProjectSettings.set_setting(PATH_SSIL_QUALITY, ssil)
+ ProjectSettings.set_setting(PATH_SSR_QUALITY, ssr)
+ # Volumetric Fog
+ ProjectSettings.set_setting(PATH_FOG_SIZE, volumetric_fog_size)
+ ProjectSettings.set_setting(PATH_FOG_DEPTH, volumetric_fog_depth)
+ ProjectSettings.set_setting(PATH_FOG_FILTER, volumetric_use_filter)
diff --git a/source/src/globals/autoloads/settings/graphic_settings_preset.gd.uid b/source/src/globals/autoloads/settings/graphic_settings_preset.gd.uid
new file mode 100644
index 0000000..9a62361
--- /dev/null
+++ b/source/src/globals/autoloads/settings/graphic_settings_preset.gd.uid
@@ -0,0 +1 @@
+uid://b8i3hscq7hvby
diff --git a/source/globals/autoloads/settings/settings_manager.gd b/source/src/globals/autoloads/settings/settings_manager.gd
similarity index 81%
rename from source/globals/autoloads/settings/settings_manager.gd
rename to source/src/globals/autoloads/settings/settings_manager.gd
index 206e7fa..cc3d0bc 100644
--- a/source/globals/autoloads/settings/settings_manager.gd
+++ b/source/src/globals/autoloads/settings/settings_manager.gd
@@ -1,5 +1,7 @@
extends Node
+signal settings_changed
+
const SETTINGS_PATH: String = "user://settings.cfg"
var settings: Dictionary[String, Dictionary] = {
@@ -14,6 +16,10 @@ var settings: Dictionary[String, Dictionary] = {
},
&"video": {
&"fullscreen": true
+ },
+ &"misc": {
+ &"language": -1,
+ &"headbobbing": true
}
}
@@ -26,10 +32,10 @@ func load_settings() -> void:
if not FileAccess.file_exists(SETTINGS_PATH):
save_settings()
return
-
+
var config := ConfigFile.new()
config.load(SETTINGS_PATH)
-
+
for section: String in settings.keys():
for key: String in settings[section].keys():
var default: Variant = get_setting(section, key)
@@ -38,17 +44,18 @@ func load_settings() -> void:
func save_settings() -> void:
var config := ConfigFile.new()
-
+
for section: String in settings.keys():
for key: String in settings[section].keys():
config.set_value(section, key, settings[section][key])
-
+
config.save(SETTINGS_PATH)
func set_setting(section: String, key: String, value: Variant, do_save: bool = true) -> void:
settings[section][key] = value
-
+ settings_changed.emit()
+
if do_save:
save_settings()
@@ -59,13 +66,14 @@ func get_setting(section: String, key: String) -> Variant:
func adjust_volume(bus: StringName, volume: float) -> void:
set_setting(&"audio", bus, volume, false)
- return
-
- var fmod_bus: FmodBus = FmodServer.get_bus(str("res://components/fmod/Build/Desktop/", bus, ".bank"))
- if is_instance_valid(fmod_bus):
- fmod_bus.volume = volume
func set_fullscreen(fullscreened: bool) -> void:
- DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_FULLSCREEN if fullscreened else DisplayServer.WINDOW_MODE_WINDOWED)
+ DisplayServer.window_set_mode(
+ DisplayServer.WINDOW_MODE_FULLSCREEN if fullscreened else DisplayServer.WINDOW_MODE_WINDOWED
+ )
set_setting(&"video", &"fullscreen", fullscreened)
+
+
+func set_language(index: int) -> void:
+ set_setting(&"misc", &"language", index)
diff --git a/source/globals/autoloads/settings/settings_manager.gd.uid b/source/src/globals/autoloads/settings/settings_manager.gd.uid
similarity index 100%
rename from source/globals/autoloads/settings/settings_manager.gd.uid
rename to source/src/globals/autoloads/settings/settings_manager.gd.uid
diff --git a/source/src/globals/general/utils.gd b/source/src/globals/general/utils.gd
new file mode 100644
index 0000000..677dee3
--- /dev/null
+++ b/source/src/globals/general/utils.gd
@@ -0,0 +1,96 @@
+class_name Utils
+extends Object
+
+
+const VEC3_HOR := Vector3(1.0, 0.0, 1.0)
+
+
+static func free_node_safely(node: Node) -> void:
+ if is_instance_valid(node) and node.is_inside_tree():
+ node.queue_free()
+
+
+static func free_nodes(nodes: Array[Node]) -> void:
+ for node: Variant in nodes:
+ if is_instance_valid(node) and node is Node:
+ Utils.free_node_safely(node)
+
+
+static func validate_array(array: Array) -> Array:
+ return array.filter(
+ func(element: Variant) -> bool:
+ if element == null or not is_instance_valid(element):
+ return false
+
+ if element is Node:
+ return not element.is_queued_for_deletion()
+
+ return true
+ )
+
+
+static func get_all_children(node: Node, internal: bool = false) -> Array[Node]:
+ if not is_instance_valid(node):
+ return []
+
+ var children: Array[Node] = []
+ for child: Node in node.get_children(internal):
+ children.append(child)
+ if child.get_child_count(internal) > 0:
+ children.append_array(get_all_children(child, internal))
+
+ return children
+
+
+static func node_distance(
+ node_a: Node3D, node_b: Node3D, position_modifier := Vector3.ONE
+) -> float:
+ if not is_instance_valid(node_a) or not is_instance_valid(node_b):
+ return -1.0
+
+ return (node_a.global_position * position_modifier).distance_to(
+ node_b.global_position * position_modifier
+ )
+
+
+## Returns [code]true[/code] when [param node_a] is close to the [param from] node than [param node_b].[br]
+## [b]Note:[/b] Meant to be used with the [method Array.sort_custom] function.
+static func sort_by_distance(from: Node3D, node_a: Node3D, node_b: Node3D) -> bool:
+ return Utils.node_distance(from, node_a) <= Utils.node_distance(from, node_b)
+
+
+static func center_aabb(point: Vector3, aabb: AABB) -> AABB:
+ return AABB(point + (aabb.get_center() - aabb.size), aabb.size)
+
+
+## Returns [code]true[/code] if the given [param node] is of type
+## [AudioStreamPlayer], [AudioStreamPlayer3D] or [AudioStreamPlayer2D].
+static func is_node_audioplayer(node: Node) -> bool:
+ return (
+ is_instance_valid(node)
+ and (
+ node is AudioStreamPlayer
+ or node is AudioStreamPlayer2D
+ or node is AudioStreamPlayer3D
+ )
+ )
+
+
+static func full_rotation(transform: Transform3D, direction: Vector3, delta: float) -> Transform3D:
+ var old := Quaternion(transform.basis.orthonormalized()).normalized()
+ var target := Basis(Vector3.UP, atan2(-direction.x, -direction.z))
+ var new := Quaternion(target).normalized()
+ var c: Quaternion = old.slerp(new, delta)
+ transform.basis = Basis(c)
+ return transform
+
+
+static func full_rotation_float(
+ transform: Transform3D, y_rotation: float, delta: float, rotation_vector := Vector3.UP
+) -> Transform3D:
+ var old := Quaternion(transform.basis).normalized()
+ var target := Basis(rotation_vector, deg_to_rad(y_rotation))
+ var new := Quaternion(target).normalized()
+ var c: Quaternion = old.slerp(new, delta)
+ transform.basis = Basis(c)
+ return transform
diff --git a/source/globals/general/utils.gd.uid b/source/src/globals/general/utils.gd.uid
similarity index 100%
rename from source/globals/general/utils.gd.uid
rename to source/src/globals/general/utils.gd.uid
diff --git a/source/src/levels/expo_combined.tscn b/source/src/levels/expo_combined.tscn
new file mode 100644
index 0000000..07dfbfe
--- /dev/null
+++ b/source/src/levels/expo_combined.tscn
@@ -0,0 +1,78 @@
+[gd_scene load_steps=8 format=3 uid="uid://dspysc2bld6eu"]
+
+[ext_resource type="Script" uid="uid://dfnb036hysorj" path="res://src/core/level/level_loader.gd" id="1_kntr3"]
+[ext_resource type="PackedScene" uid="uid://drr80goa61wrx" path="res://src/core/level/level_area.tscn" id="2_5mqkb"]
+[ext_resource type="Script" uid="uid://3hlvt5k34xva" path="res://src/core/player_spawn_point.gd" id="3_aoi14"]
+[ext_resource type="Script" uid="uid://dgsfc4i6bovwa" path="res://src/core/chapter/chapter_area.gd" id="4_sujqt"]
+
+[sub_resource type="BoxShape3D" id="BoxShape3D_aoi14"]
+size = Vector3(17, 9, 36)
+
+[sub_resource type="BoxShape3D" id="BoxShape3D_5mqkb"]
+size = Vector3(31, 19, 37)
+
+[sub_resource type="BoxShape3D" id="BoxShape3D_sujqt"]
+size = Vector3(4, 3, 1)
+
+[node name="ExpoCombined" type="Node"]
+
+[node name="LevelLoaders" type="Node" parent="."]
+
+[node name="OutsideArea" type="Marker3D" parent="LevelLoaders"]
+script = ExtResource("1_kntr3")
+scene_path = "uid://lraild3yetsh"
+metadata/_custom_type_script = "uid://dfnb036hysorj"
+
+[node name="EntranceHall" type="Marker3D" parent="LevelLoaders"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.3, 3.5, 33)
+script = ExtResource("1_kntr3")
+scene_path = "uid://cmdy6f6kesmbj"
+metadata/_custom_type_script = "uid://dfnb036hysorj"
+
+[node name="LevelAreas" type="Node" parent="."]
+
+[node name="OutsideArea" parent="LevelAreas" node_paths=PackedStringArray("level_loader", "loaded_if_spawnpoint") instance=ExtResource("2_5mqkb")]
+level_loader = NodePath("../../LevelLoaders/OutsideArea")
+loaded_if_spawnpoint = [NodePath("../../Spawnpoints/OutsideSpawnPoint")]
+
+[node name="CollisionShape3D" type="CollisionShape3D" parent="LevelAreas/OutsideArea"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 4, 17.5)
+shape = SubResource("BoxShape3D_aoi14")
+debug_color = Color(1, 1, 0, 0.41960785)
+
+[node name="EntranceHall" parent="LevelAreas" node_paths=PackedStringArray("level_loader", "loaded_if_spawnpoint") instance=ExtResource("2_5mqkb")]
+level_loader = NodePath("../../LevelLoaders/EntranceHall")
+loaded_if_spawnpoint = [NodePath("../../Spawnpoints/EntranceHallSpawnPoint")]
+
+[node name="CollisionShape3D" type="CollisionShape3D" parent="LevelAreas/EntranceHall"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 9, 53)
+shape = SubResource("BoxShape3D_5mqkb")
+debug_color = Color(1, 1, 0, 0.41960785)
+
+[node name="Spawnpoints" type="Node" parent="."]
+
+[node name="OutsideSpawnPoint" type="Marker3D" parent="Spawnpoints"]
+transform = Transform3D(-1, 0, 8.742278e-08, 0, 1, 0, -8.742278e-08, 0, -1, 1, 1, 1)
+script = ExtResource("3_aoi14")
+metadata/_custom_type_script = "uid://3hlvt5k34xva"
+
+[node name="EntranceHallSpawnPoint" type="Marker3D" parent="Spawnpoints"]
+transform = Transform3D(-1, 0, 8.742278e-08, 0, 1, 0, -8.742278e-08, 0, -1, 0, 3.4999995, 44)
+script = ExtResource("3_aoi14")
+spawn_id = &"NoKnows"
+metadata/_custom_type_script = "uid://3hlvt5k34xva"
+
+[node name="Checkpoints" type="Node" parent="."]
+
+[node name="CheckpointEntranceHall" type="Area3D" parent="Checkpoints"]
+collision_layer = 0
+collision_mask = 2
+script = ExtResource("4_sujqt")
+chapter_index = 1
+spawn_id = &"NoKnows"
+metadata/_custom_type_script = "uid://dgsfc4i6bovwa"
+
+[node name="CollisionShape3D" type="CollisionShape3D" parent="Checkpoints/CheckpointEntranceHall"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.8, 5, 37)
+shape = SubResource("BoxShape3D_sujqt")
+debug_color = Color(0.970704, 0, 0.45613372, 0.41960785)
diff --git a/source/src/levels/levels/entrance_hall.tscn b/source/src/levels/levels/entrance_hall.tscn
new file mode 100644
index 0000000..3004350
--- /dev/null
+++ b/source/src/levels/levels/entrance_hall.tscn
@@ -0,0 +1,270 @@
+[gd_scene load_steps=8 format=3 uid="uid://cmdy6f6kesmbj"]
+
+[ext_resource type="Script" uid="uid://cigop0ivp5vvu" path="res://src/core/level/level.gd" id="1_s41bt"]
+[ext_resource type="Script" uid="uid://dk4pqgs08xphi" path="res://src/core/camera/camera_trauma_causer.gd" id="2_ht7mm"]
+[ext_resource type="Material" uid="uid://c38215ysnknyk" path="res://assets/materials/dev/dark/dark_01.tres" id="3_8clfj"]
+[ext_resource type="PackedScene" uid="uid://c0jearfhlqcvr" path="res://src/gameplay/hazards/saw/saw.tscn" id="4_jdv38"]
+[ext_resource type="PackedScene" uid="uid://u56f1ks46ob6" path="res://src/gameplay/hazards/saw/saw.blend" id="5_y0n8k"]
+
+[sub_resource type="Environment" id="Environment_ht7mm"]
+ambient_light_source = 2
+ambient_light_color = Color(0.28118682, 0.28118688, 0.28118682, 1)
+tonemap_mode = 2
+glow_enabled = true
+
+[sub_resource type="CylinderShape3D" id="CylinderShape3D_bsmr2"]
+height = 2.75
+radius = 0.8
+
+[node name="OutsideArea" type="Node3D"]
+script = ExtResource("1_s41bt")
+metadata/_custom_type_script = "uid://cigop0ivp5vvu"
+
+[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
+environment = SubResource("Environment_ht7mm")
+
+[node name="CameraTraumaCauser" type="Marker3D" parent="."]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -13, 1, 32)
+script = ExtResource("2_ht7mm")
+continues_shake = true
+distance_falloff = 0.392292
+max_shake_intensity = 0.1
+metadata/_custom_type_script = "uid://dk4pqgs08xphi"
+
+[node name="OmniLight3D" type="OmniLight3D" parent="."]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 20)
+omni_range = 20.0
+
+[node name="Blockout" type="Node3D" parent="."]
+
+[node name="Outline" type="CSGCombiner3D" parent="Blockout"]
+use_collision = true
+
+[node name="CSGBox3D" type="CSGBox3D" parent="Blockout/Outline"]
+transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, -2, 1.5, 4.75)
+size = Vector3(1, 3, 9.5)
+material = ExtResource("3_8clfj")
+
+[node name="CSGBox3D2" type="CSGBox3D" parent="Blockout/Outline"]
+transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 3, 1.5, 4.75)
+size = Vector3(1, 3, 9.5)
+material = ExtResource("3_8clfj")
+
+[node name="CSGBox3D3" type="CSGBox3D" parent="Blockout/Outline"]
+transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 0.5000001, 3.5, 4.75)
+size = Vector3(6, 1, 9.5)
+material = ExtResource("3_8clfj")
+
+[node name="CSGBox3D4" type="CSGBox3D" parent="Blockout/Outline"]
+transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 0.5000001, -0.5, 4.75)
+size = Vector3(6, 1, 9.5)
+material = ExtResource("3_8clfj")
+
+[node name="CSGBox3D5" type="CSGBox3D" parent="Blockout/Outline"]
+transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, -15.5, 7, 22.000002)
+size = Vector3(1, 14, 27)
+material = ExtResource("3_8clfj")
+
+[node name="CSGBox3D6" type="CSGBox3D" parent="Blockout/Outline"]
+transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 16.5, 7, 22.000002)
+size = Vector3(1, 14, 27)
+material = ExtResource("3_8clfj")
+
+[node name="CSGBox3D7" type="CSGBox3D" parent="Blockout/Outline"]
+transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 0.49999896, 7, 9.000001)
+size = Vector3(31, 14, 1)
+material = ExtResource("3_8clfj")
+
+[node name="CSGBox3D" type="CSGBox3D" parent="Blockout/Outline/CSGBox3D7"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.6093254e-06, -5.5, -0.09999943)
+operation = 2
+size = Vector3(4, 3, 3)
+material = ExtResource("3_8clfj")
+
+[node name="CSGBox3D8" type="CSGBox3D" parent="Blockout/Outline"]
+transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 0.49999896, 7, 35)
+size = Vector3(31, 14, 1)
+material = ExtResource("3_8clfj")
+
+[node name="CSGBox3D9" type="CSGBox3D" parent="Blockout/Outline"]
+transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 0.49999782, -0.5, 22)
+size = Vector3(33, 1, 27)
+material = ExtResource("3_8clfj")
+
+[node name="CSGBox3D10" type="CSGBox3D" parent="Blockout/Outline"]
+transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 0.49999782, 14.5, 22)
+size = Vector3(33, 1, 27)
+material = ExtResource("3_8clfj")
+
+[node name="TEMPRamps" type="CSGCombiner3D" parent="Blockout"]
+use_collision = true
+
+[node name="Ramp" type="CSGBox3D" parent="Blockout/TEMPRamps"]
+transform = Transform3D(-1, -4.371139e-08, -7.571031e-08, 0, 0.8660251, -0.50000006, 8.7422784e-08, -0.50000006, -0.8660251, 12.6, 2.02, 24)
+size = Vector3(4, 1, 10)
+
+[node name="Ramp2" type="CSGBox3D" parent="Blockout/TEMPRamps"]
+transform = Transform3D(-1, -2.2626677e-08, -8.444393e-08, 0, 0.96592593, -0.25881898, 8.742277e-08, -0.25881898, -0.96592593, 8.5, 2.02, 24)
+size = Vector3(4, 1, 10)
+
+[node name="Ramp3" type="CSGBox3D" parent="Blockout/TEMPRamps"]
+transform = Transform3D(-1, -1.5180792e-08, -8.609465e-08, 0, 0.984808, -0.17364801, 8.742278e-08, -0.17364801, -0.984808, 5.5, 1.72, 24)
+size = Vector3(2, 1, 10)
+
+[node name="Ramp4" type="CSGBox3D" parent="Blockout/TEMPRamps"]
+transform = Transform3D(-1, -7.619402e-09, -8.7090136e-08, 0, 0.996195, -0.0871558, 8.742278e-08, -0.0871558, -0.996195, 3.5, 2.32, 24)
+size = Vector3(2, 1, 10)
+
+[node name="CrouchAndStairTest" type="CSGCombiner3D" parent="Blockout"]
+use_collision = true
+
+[node name="CSGBox3D3" type="CSGBox3D" parent="Blockout/CrouchAndStairTest"]
+transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 2.5, 0.92, 15)
+
+[node name="CSGBox3D4" type="CSGBox3D" parent="Blockout/CrouchAndStairTest"]
+transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 3.5, 1.12, 15)
+
+[node name="CSGBox3D5" type="CSGBox3D" parent="Blockout/CrouchAndStairTest"]
+transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 4.5, 1.32, 15)
+
+[node name="CSGBox3D6" type="CSGBox3D" parent="Blockout/CrouchAndStairTest"]
+transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 5.5, 1.52, 15)
+
+[node name="CSGBox3D7" type="CSGBox3D" parent="Blockout/CrouchAndStairTest"]
+transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 6.5, 1.72, 15)
+
+[node name="CSGBox3D8" type="CSGBox3D" parent="Blockout/CrouchAndStairTest"]
+transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 7.5, 1.92, 15)
+
+[node name="CSGBox3D9" type="CSGBox3D" parent="Blockout/CrouchAndStairTest"]
+transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 8.5, 2.12, 15)
+
+[node name="CSGBox3D10" type="CSGBox3D" parent="Blockout/CrouchAndStairTest"]
+transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 9.5, 2.32, 15)
+
+[node name="CSGBox3D11" type="CSGBox3D" parent="Blockout/CrouchAndStairTest"]
+transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 10.5, 2.52, 15)
+
+[node name="CSGBox3D12" type="CSGBox3D" parent="Blockout/CrouchAndStairTest"]
+transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 11.5, 2.72, 15)
+
+[node name="CSGBox3D13" type="CSGBox3D" parent="Blockout/CrouchAndStairTest"]
+transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 12.5, 2.92, 15)
+
+[node name="Gameplay" type="Node3D" parent="."]
+
+[node name="Hazards" type="Node3D" parent="Gameplay"]
+
+[node name="Saw" parent="Gameplay/Hazards" instance=ExtResource("4_jdv38")]
+transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -6, 0.5, 23)
+
+[node name="Saw2" parent="Gameplay/Hazards" instance=ExtResource("4_jdv38")]
+transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -5.8, 0.5, 23)
+
+[node name="Saw3" parent="Gameplay/Hazards" instance=ExtResource("4_jdv38")]
+transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -5.6, 0.5, 23)
+
+[node name="Saw4" parent="Gameplay/Hazards" instance=ExtResource("4_jdv38")]
+transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -5.4, 0.5, 23)
+
+[node name="Saw5" parent="Gameplay/Hazards" instance=ExtResource("4_jdv38")]
+transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -5.2, 0.5, 23)
+
+[node name="Saw6" parent="Gameplay/Hazards" instance=ExtResource("4_jdv38")]
+transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -5, 0.5, 23)
+
+[node name="Saw7" parent="Gameplay/Hazards" instance=ExtResource("4_jdv38")]
+transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -1, 0.5, 23)
+
+[node name="SawSkin" parent="Gameplay/Hazards/Saw7" index="0"]
+transform = Transform3D(-0.83029896, -0.4343731, 0, 0.4343731, -0.83029896, 0, 0, 0, 1, 0, 0, 0)
+
+[node name="SawSkin2" parent="Gameplay/Hazards/Saw7/SawSkin" index="1" instance=ExtResource("5_y0n8k")]
+transform = Transform3D(0.907697, -0.41963, -2.22045e-16, 0.41963, 0.907697, 0, -3.55271e-15, -3.55271e-15, 1, 0, 0, 0.0999999)
+
+[node name="SawSkin3" parent="Gameplay/Hazards/Saw7/SawSkin" index="2" instance=ExtResource("5_y0n8k")]
+transform = Transform3D(0.438149, 0.898906, -3.55271e-15, -0.898906, 0.438149, 0, 3.55271e-15, 1.77636e-15, 1, 0, 0, 0.2)
+
+[node name="SawSkin4" parent="Gameplay/Hazards/Saw7/SawSkin" index="3" instance=ExtResource("5_y0n8k")]
+transform = Transform3D(-0.575553, 0.817769, 3.55271e-15, -0.817769, -0.575553, 5.32907e-15, 7.10543e-15, 0, 1, 0, 0, 0.3)
+
+[node name="SawSkin5" parent="Gameplay/Hazards/Saw7/SawSkin" index="4" instance=ExtResource("5_y0n8k")]
+transform = Transform3D(0.0698509, 0.997561, 3.55271e-15, -0.997561, 0.0698509, 6.38378e-15, 7.32747e-15, -7.10543e-15, 1, 0, 0, 0.4)
+
+[node name="SawSkin6" parent="Gameplay/Hazards/Saw7/SawSkin" index="5" instance=ExtResource("5_y0n8k")]
+transform = Transform3D(0.834063, 0.551677, 0, -0.551677, 0.834063, 7.10543e-15, 1.42109e-14, -6.21725e-15, 1, 0, 0, 0.5)
+
+[node name="SawSkin7" parent="Gameplay/Hazards/Saw7/SawSkin" index="6" instance=ExtResource("5_y0n8k")]
+transform = Transform3D(0.187532, -0.982263, -6.21725e-15, 0.982263, 0.187532, -3.55271e-15, 1.06581e-14, -7.77156e-15, 1, 0, 0, 0.599999)
+
+[node name="SawSkin8" parent="Gameplay/Hazards/Saw7/SawSkin" index="7" instance=ExtResource("5_y0n8k")]
+transform = Transform3D(-0.997299, 0.0735269, 3.55271e-15, -0.0735269, -0.997299, -5.32907e-15, -3.55271e-15, -5.32907e-15, 1, 0, 0, 0.599999)
+
+[node name="SawSkin9" parent="Gameplay/Hazards/Saw7/SawSkin" index="8" instance=ExtResource("5_y0n8k")]
+transform = Transform3D(0.861875, -0.507134, -7.10543e-15, 0.507134, 0.861875, 3.55271e-15, -1.06581e-14, 0, 1, 0, 0, 0.699999)
+
+[node name="SawSkin10" parent="Gameplay/Hazards/Saw7/SawSkin" index="9" instance=ExtResource("5_y0n8k")]
+transform = Transform3D(-0.642194, 0.766551, 7.10543e-15, -0.766551, -0.642194, -8.88178e-16, -7.10543e-15, 0, 1, 0, 0, 0.799999)
+
+[node name="SawSkin11" parent="Gameplay/Hazards/Saw7/SawSkin" index="10" instance=ExtResource("5_y0n8k")]
+transform = Transform3D(0.986419, -0.16429, -7.10543e-15, 0.16429, 0.986419, 0, -7.10543e-15, -3.55271e-15, 1, 0, 0, 0.899999)
+
+[node name="SawSkin12" parent="Gameplay/Hazards/Saw7/SawSkin" index="11" instance=ExtResource("5_y0n8k")]
+transform = Transform3D(-0.962893, 0.269909, 7.10543e-15, -0.269909, -0.962893, 7.77156e-16, -1.06581e-14, -2.66454e-15, 1, 0, 0, 0.999999)
+
+[node name="SawSkin13" parent="Gameplay/Hazards/Saw7/SawSkin" index="12" instance=ExtResource("5_y0n8k")]
+transform = Transform3D(0.569512, -0.821991, -3.55271e-15, 0.821991, 0.569512, -7.10543e-15, -1.42109e-14, -4.44089e-15, 1, 0, 0, 1.1)
+
+[node name="SawSkin14" parent="Gameplay/Hazards/Saw7/SawSkin" index="13" instance=ExtResource("5_y0n8k")]
+transform = Transform3D(0.620221, 0.784436, -1.06581e-14, -0.784436, 0.620221, 5.32907e-15, -1.42109e-14, -5.32907e-15, 1, 0, 0, 1.2)
+
+[node name="SawSkin15" parent="Gameplay/Hazards/Saw7/SawSkin" index="14" instance=ExtResource("5_y0n8k")]
+transform = Transform3D(-0.978, -0.208642, 1.06581e-14, 0.208642, -0.978, 3.10862e-15, -1.42109e-14, -3.55271e-15, 1, 0, 0, 1.3)
+
+[node name="SawSkin16" parent="Gameplay/Hazards/Saw7/SawSkin" index="15" instance=ExtResource("5_y0n8k")]
+transform = Transform3D(-0.801411, 0.598117, 0, -0.598117, -0.801411, 0, -3.55271e-15, -3.55271e-15, 1, 0, 0, 1.4)
+
+[node name="SawSkin17" parent="Gameplay/Hazards/Saw7/SawSkin" index="16" instance=ExtResource("5_y0n8k")]
+transform = Transform3D(-0.61442, -0.788984, 3.55271e-15, 0.788984, -0.61442, 4.44089e-16, 5.32907e-15, 0, 1, 0, 0, 1.5)
+
+[node name="SawSkin18" parent="Gameplay/Hazards/Saw7/SawSkin" index="17" instance=ExtResource("5_y0n8k")]
+transform = Transform3D(0.394174, -0.919041, -3.55271e-15, 0.919041, 0.394174, -5.9952e-15, 3.55271e-15, 0, 1, 0, 0, 1.6)
+
+[node name="SawSkin19" parent="Gameplay/Hazards/Saw7/SawSkin" index="18" instance=ExtResource("5_y0n8k")]
+transform = Transform3D(-0.274452, -0.961605, -3.55271e-15, 0.961605, -0.274452, -7.10543e-15, 7.99361e-15, -7.10543e-15, 1, 0, 0, 1.7)
+
+[node name="SawSkin20" parent="Gameplay/Hazards/Saw7/SawSkin" index="19" instance=ExtResource("5_y0n8k")]
+transform = Transform3D(-0.93005, -0.367446, 0, 0.367446, -0.93005, -7.10543e-15, 1.77636e-14, -3.55271e-15, 1, 0, 0, 1.8)
+
+[node name="SawSkin21" parent="Gameplay/Hazards/Saw7/SawSkin" index="20" instance=ExtResource("5_y0n8k")]
+transform = Transform3D(0.0194621, 0.999816, 7.10543e-15, -0.999816, 0.0194621, 4.66294e-15, 1.07692e-14, -7.10543e-15, 1, 0, 0, 1.9)
+
+[node name="SawSkin22" parent="Gameplay/Hazards/Saw7/SawSkin" index="21" instance=ExtResource("5_y0n8k")]
+transform = Transform3D(0.96059, -0.277995, -3.55271e-15, 0.277995, 0.96059, 4.44089e-15, -7.10543e-15, -5.32907e-15, 1, 0, 0, 1.9)
+
+[node name="SawSkin23" parent="Gameplay/Hazards/Saw7/SawSkin" index="22" instance=ExtResource("5_y0n8k")]
+transform = Transform3D(-0.738498, 0.674265, 7.10543e-15, -0.674265, -0.738498, -2.22045e-15, -1.06581e-14, 0, 1, 0, 0, 2)
+
+[node name="SawSkin24" parent="Gameplay/Hazards/Saw7/SawSkin" index="23" instance=ExtResource("5_y0n8k")]
+transform = Transform3D(0.469959, -0.882696, -7.10543e-15, 0.882696, 0.469959, -6.66134e-16, -5.32907e-15, 3.55271e-15, 1, 0, 0, 2.1)
+
+[node name="SawSkin25" parent="Gameplay/Hazards/Saw7/SawSkin" index="24" instance=ExtResource("5_y0n8k")]
+transform = Transform3D(-0.931191, 0.364552, 7.10543e-15, -0.364552, -0.931191, 1.33227e-15, -7.10543e-15, -3.55271e-15, 1, 0, 0, 2.2)
+
+[node name="SawSkin26" parent="Gameplay/Hazards/Saw7/SawSkin" index="25" instance=ExtResource("5_y0n8k")]
+transform = Transform3D(0.886351, -0.463031, -7.10543e-15, 0.463031, 0.886351, -2.44249e-15, -1.06581e-14, 0, 1, 0, 0, 2.3)
+
+[node name="SawSkin27" parent="Gameplay/Hazards/Saw7/SawSkin" index="26" instance=ExtResource("5_y0n8k")]
+transform = Transform3D(-0.38739, 0.921924, 3.55271e-15, -0.921924, -0.38739, 7.54952e-15, -1.24345e-14, -7.10543e-15, 1, 0, 0, 2.4)
+
+[node name="SawSkin28" parent="Gameplay/Hazards/Saw7/SawSkin" index="27" instance=ExtResource("5_y0n8k")]
+transform = Transform3D(-0.768913, -0.639366, 1.06581e-14, 0.639366, -0.768913, -3.33067e-15, -1.06581e-14, 0, 1, 0, 0, 2.5)
+
+[node name="SawSkin29" parent="Gameplay/Hazards/Saw7/SawSkin" index="28" instance=ExtResource("5_y0n8k")]
+transform = Transform3D(1.00001, 0.00207399, -1.06581e-14, -0.00207399, 1.00001, -5.55112e-15, -1.77636e-14, -3.55271e-15, 0.999999, 0, 0, 2.6)
+
+[node name="CollisionShape3D" parent="Gameplay/Hazards/Saw7/DeathArea" index="0"]
+transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 5.96046e-08, 1.275)
+shape = SubResource("CylinderShape3D_bsmr2")
+
+[editable path="Gameplay/Hazards/Saw7"]
diff --git a/source/src/levels/levels/outside_area.tscn b/source/src/levels/levels/outside_area.tscn
new file mode 100644
index 0000000..0677ea0
--- /dev/null
+++ b/source/src/levels/levels/outside_area.tscn
@@ -0,0 +1,59 @@
+[gd_scene load_steps=7 format=3 uid="uid://lraild3yetsh"]
+
+[ext_resource type="Script" uid="uid://cigop0ivp5vvu" path="res://src/core/level/level.gd" id="1_f7x8u"]
+[ext_resource type="Material" uid="uid://bahys2ntbh2ap" path="res://assets/materials/dev/orange/orange_01.tres" id="2_gpfgd"]
+[ext_resource type="Material" uid="uid://c38215ysnknyk" path="res://assets/materials/dev/dark/dark_01.tres" id="3_ccf7j"]
+
+[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_f7x8u"]
+sky_horizon_color = Color(0.66224277, 0.6717428, 0.6867428, 1)
+ground_horizon_color = Color(0.66224277, 0.6717428, 0.6867428, 1)
+
+[sub_resource type="Sky" id="Sky_gpfgd"]
+sky_material = SubResource("ProceduralSkyMaterial_f7x8u")
+
+[sub_resource type="Environment" id="Environment_ccf7j"]
+background_mode = 2
+sky = SubResource("Sky_gpfgd")
+tonemap_mode = 2
+glow_enabled = true
+
+[node name="OutsideArea" type="Node3D"]
+script = ExtResource("1_f7x8u")
+metadata/_custom_type_script = "uid://cigop0ivp5vvu"
+
+[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
+environment = SubResource("Environment_ccf7j")
+
+[node name="Blockout" type="Node3D" parent="."]
+
+[node name="Outline" type="CSGCombiner3D" parent="Blockout"]
+use_collision = true
+
+[node name="CSGBox3D" type="CSGBox3D" parent="Blockout/Outline"]
+transform = Transform3D(-1, 0, -8.940697e-08, 0, 1, 0, 8.940697e-08, 0, -1, 0.7999968, 0.5, 5.000003)
+size = Vector3(4, 1, 10)
+material = ExtResource("2_gpfgd")
+
+[node name="CSGBox3D4" type="CSGBox3D" parent="Blockout/Outline"]
+transform = Transform3D(-1, 0, -8.940697e-08, 0, 1, 0, 8.940697e-08, 0, -1, 0.7999999, 3, 24)
+size = Vector3(16, 1, 10)
+material = ExtResource("2_gpfgd")
+
+[node name="CSGBox3D3" type="CSGPolygon3D" parent="Blockout/Outline"]
+transform = Transform3D(1.1920929e-07, 0, -1, 0, 1, 0, 1, 0, 1.1920929e-07, -1.2000008, 0.5, 15)
+polygon = PackedVector2Array(-5, -0.5, -5, 0.5, 4, 3, 4, 2)
+depth = 4.0
+material = ExtResource("2_gpfgd")
+
+[node name="CircusTent" type="CSGCombiner3D" parent="Blockout/Outline"]
+
+[node name="CSGBox3D2" type="CSGBox3D" parent="Blockout/Outline/CircusTent"]
+transform = Transform3D(-1, 0, -8.940697e-08, 0, 1, 0, 8.940697e-08, 0, -1, 0.8000011, 10, 35.999996)
+size = Vector3(31, 15, 15)
+material = ExtResource("2_gpfgd")
+
+[node name="CSGBox3D5" type="CSGBox3D" parent="Blockout/Outline/CircusTent"]
+transform = Transform3D(-1, 0, -8.940697e-08, 0, 1, 0, 8.940697e-08, 0, -1, 0.8, 5, 35.5)
+operation = 2
+size = Vector3(4, 3, 16)
+material = ExtResource("3_ccf7j")
diff --git a/source/components/ui/menus/boot/boot.gd b/source/src/ui/menus/boot/boot.gd
similarity index 93%
rename from source/components/ui/menus/boot/boot.gd
rename to source/src/ui/menus/boot/boot.gd
index f84129b..a7f8efd 100644
--- a/source/components/ui/menus/boot/boot.gd
+++ b/source/src/ui/menus/boot/boot.gd
@@ -14,4 +14,6 @@ func _ready() -> void:
func _on_shader_precompiler_finished_compilation() -> void:
SettingsManager.set_setting(&"game", &"has_compiled_shaders", true)
+
+ SceneFader.color_rect.color.a = 1.0
SceneFader.load_to_path(GameGlobals.MAIN_MENU_PATH)
diff --git a/source/components/ui/menus/boot/boot.gd.uid b/source/src/ui/menus/boot/boot.gd.uid
similarity index 100%
rename from source/components/ui/menus/boot/boot.gd.uid
rename to source/src/ui/menus/boot/boot.gd.uid
diff --git a/source/components/ui/menus/boot/boot.tscn b/source/src/ui/menus/boot/boot.tscn
similarity index 80%
rename from source/components/ui/menus/boot/boot.tscn
rename to source/src/ui/menus/boot/boot.tscn
index 8aae3f2..5b5cd99 100644
--- a/source/components/ui/menus/boot/boot.tscn
+++ b/source/src/ui/menus/boot/boot.tscn
@@ -1,7 +1,7 @@
[gd_scene load_steps=3 format=3 uid="uid://coga3ke4xw3a0"]
-[ext_resource type="Script" uid="uid://bf1k68a8ky3ps" path="res://components/ui/menus/boot/boot.gd" id="1_yodsw"]
-[ext_resource type="PackedScene" uid="uid://b2wlequ3m4trj" path="res://components/ui/menus/boot/shader_precompilation/shader_precompiler.tscn" id="2_fge7m"]
+[ext_resource type="Script" uid="uid://bf1k68a8ky3ps" path="res://src/ui/menus/boot/boot.gd" id="1_yodsw"]
+[ext_resource type="PackedScene" uid="uid://b2wlequ3m4trj" path="res://src/ui/menus/boot/shader_precompilation/shader_precompiler.tscn" id="2_fge7m"]
[node name="Boot" type="Control"]
layout_mode = 3
diff --git a/source/components/ui/menus/boot/shader_precompilation/shader_precompiler.gd b/source/src/ui/menus/boot/shader_precompilation/shader_precompiler.gd
similarity index 62%
rename from source/components/ui/menus/boot/shader_precompilation/shader_precompiler.gd
rename to source/src/ui/menus/boot/shader_precompilation/shader_precompiler.gd
index 99cd2ac..e3f05bf 100644
--- a/source/components/ui/menus/boot/shader_precompilation/shader_precompiler.gd
+++ b/source/src/ui/menus/boot/shader_precompilation/shader_precompiler.gd
@@ -5,6 +5,7 @@ signal finished_compilation
const EXCLUDED_DIRECTORIES: Array[String] = [
"res://addons",
"res://.godot",
+ "res://localization",
]
#const SIMUTANEOUS_SCENES: int = 5
@@ -14,7 +15,7 @@ const EXCLUDED_DIRECTORIES: Array[String] = [
func precompile_shaders() -> void:
- var files: PackedStringArray = find_scene_file_paths("res://")
+ var files: PackedStringArray = find_scenes_in_file_path("res://")
var index: int = 0
while index < files.size():
@@ -45,6 +46,24 @@ func compile_scene(scene_path: String) -> void:
for child: Node in Utils.get_all_children(node):
child.set_script(null)
+
+ # WARNING: Any children of these fmod nodes are also deleted.
+ # if (
+ # child is FmodBankLoader
+ # or child is FmodEventEmitter2D
+ # or child is FmodEventEmitter3D
+ # or child is FmodListener2D
+ # or child is FmodListener3D
+ # ):
+ # child.free()
+
+ if (
+ child is GPUParticles2D
+ or child is GPUParticles3D
+ or child is CPUParticles2D
+ or child is CPUParticles3D
+ ):
+ child.set_emitting(true)
#child.set_process(false)
#child.set_process_internal(false)
#child.set_physics_process_internal(false)
@@ -54,21 +73,22 @@ func compile_scene(scene_path: String) -> void:
node.queue_free()
-func find_scene_file_paths(path: String, find_recursive: bool = true) -> PackedStringArray:
+func find_scenes_in_file_path(path: String, find_recursive: bool = true) -> PackedStringArray:
var files: PackedStringArray = []
+ path = str(path, "/" if not path.ends_with("/") else "")
for file: String in DirAccess.get_files_at(path):
if file.get_extension().contains("scn"):
#print("Path: '%s' Filename: '%s'" %[path, file])
- files.append(str(path, "/" if not path.ends_with("/") else "", file))
+ files.append(str(path, file))
if find_recursive:
for folder: String in DirAccess.get_directories_at(path):
- var _path: String = str(path, "/" if not path.ends_with("/") else "", folder)
+ var excluded_path: String = str(path, folder)
- if EXCLUDED_DIRECTORIES.has(_path):
+ if EXCLUDED_DIRECTORIES.has(excluded_path):
continue
- files.append_array(find_scene_file_paths(_path))
+ files.append_array(find_scenes_in_file_path(excluded_path))
return files
diff --git a/source/components/ui/menus/boot/shader_precompilation/shader_precompiler.gd.uid b/source/src/ui/menus/boot/shader_precompilation/shader_precompiler.gd.uid
similarity index 100%
rename from source/components/ui/menus/boot/shader_precompilation/shader_precompiler.gd.uid
rename to source/src/ui/menus/boot/shader_precompilation/shader_precompiler.gd.uid
diff --git a/source/components/ui/menus/boot/shader_precompilation/shader_precompiler.tscn b/source/src/ui/menus/boot/shader_precompilation/shader_precompiler.tscn
similarity index 93%
rename from source/components/ui/menus/boot/shader_precompilation/shader_precompiler.tscn
rename to source/src/ui/menus/boot/shader_precompilation/shader_precompiler.tscn
index 093745a..ef85528 100644
--- a/source/components/ui/menus/boot/shader_precompilation/shader_precompiler.tscn
+++ b/source/src/ui/menus/boot/shader_precompilation/shader_precompiler.tscn
@@ -1,6 +1,6 @@
[gd_scene load_steps=2 format=3 uid="uid://b2wlequ3m4trj"]
-[ext_resource type="Script" uid="uid://cpt7foih8y88d" path="res://components/ui/menus/boot/shader_precompilation/shader_precompiler.gd" id="1_ibtyg"]
+[ext_resource type="Script" uid="uid://cpt7foih8y88d" path="res://src/ui/menus/boot/shader_precompilation/shader_precompiler.gd" id="1_ibtyg"]
[node name="ShaderPrecompiler" type="Node"]
script = ExtResource("1_ibtyg")
diff --git a/source/src/ui/menus/death_screen/death_screen.gd b/source/src/ui/menus/death_screen/death_screen.gd
new file mode 100644
index 0000000..f838f71
--- /dev/null
+++ b/source/src/ui/menus/death_screen/death_screen.gd
@@ -0,0 +1,51 @@
+extends MenuBase
+
+var can_close_menu: bool = false
+
+@onready var idle_timer: Timer = $IdleTimer
+@onready var saw_artwork: Control = $Saw
+
+
+func _ready() -> void:
+ close_menu()
+ GameGlobals.player_died.connect(_on_player_died)
+
+
+func _input(event: InputEvent) -> void:
+ if can_close_menu and is_visible_in_tree() and event.is_pressed():
+ can_close_menu = false
+
+ await SceneFader.fade_in()
+ await get_tree().create_timer(0.5).timeout
+
+ close_menu()
+
+ GameGlobals.reset_game()
+ GameGlobals.load_from_save()
+ SceneFader.fade_out.call_deferred()
+ get_tree().paused = false
+ get_tree().reload_current_scene()
+
+
+func display_death_background(death_type: GameGlobals.DeathTypes) -> void:
+ match death_type:
+ GameGlobals.DeathTypes.SAW:
+ saw_artwork.show()
+
+
+func _on_player_died(death_type: GameGlobals.DeathTypes) -> void:
+ can_close_menu = false
+
+ for child: Node in get_children():
+ if child.has_method(&"hide"):
+ child.hide()
+
+ display_death_background(death_type)
+
+ open_menu()
+ Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
+
+ idle_timer.start()
+ await idle_timer.timeout
+
+ can_close_menu = true
diff --git a/source/src/ui/menus/death_screen/death_screen.gd.uid b/source/src/ui/menus/death_screen/death_screen.gd.uid
new file mode 100644
index 0000000..1d15a9b
--- /dev/null
+++ b/source/src/ui/menus/death_screen/death_screen.gd.uid
@@ -0,0 +1 @@
+uid://cjdd4twf4ju7y
diff --git a/source/src/ui/menus/death_screen/death_screen.tscn b/source/src/ui/menus/death_screen/death_screen.tscn
new file mode 100644
index 0000000..ae1a23b
--- /dev/null
+++ b/source/src/ui/menus/death_screen/death_screen.tscn
@@ -0,0 +1,42 @@
+[gd_scene load_steps=2 format=3 uid="uid://kne8gkorpuop"]
+
+[ext_resource type="Script" uid="uid://cjdd4twf4ju7y" path="res://src/ui/menus/death_screen/death_screen.gd" id="1_d21i8"]
+
+[node name="DeathScreen" type="Control"]
+process_mode = 2
+layout_mode = 3
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+mouse_filter = 2
+script = ExtResource("1_d21i8")
+
+[node name="Saw" type="Control" parent="."]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+mouse_filter = 2
+
+[node name="DeathLabel" type="Label" parent="Saw"]
+layout_mode = 1
+anchors_preset = 8
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = -57.0
+offset_top = -11.5
+offset_right = 57.0
+offset_bottom = 11.5
+grow_horizontal = 2
+grow_vertical = 2
+text = "Killed by a saw"
+
+[node name="IdleTimer" type="Timer" parent="."]
+wait_time = 2.5
+one_shot = true
diff --git a/source/components/ui/menus/loading_screen/loading_screen.gd b/source/src/ui/menus/loading_screen/loading_screen.gd
similarity index 100%
rename from source/components/ui/menus/loading_screen/loading_screen.gd
rename to source/src/ui/menus/loading_screen/loading_screen.gd
diff --git a/source/components/ui/menus/loading_screen/loading_screen.gd.uid b/source/src/ui/menus/loading_screen/loading_screen.gd.uid
similarity index 100%
rename from source/components/ui/menus/loading_screen/loading_screen.gd.uid
rename to source/src/ui/menus/loading_screen/loading_screen.gd.uid
diff --git a/source/components/ui/menus/loading_screen/loading_screen.tscn b/source/src/ui/menus/loading_screen/loading_screen.tscn
similarity index 91%
rename from source/components/ui/menus/loading_screen/loading_screen.tscn
rename to source/src/ui/menus/loading_screen/loading_screen.tscn
index 82e9da4..03ca418 100644
--- a/source/components/ui/menus/loading_screen/loading_screen.tscn
+++ b/source/src/ui/menus/loading_screen/loading_screen.tscn
@@ -1,6 +1,6 @@
[gd_scene load_steps=2 format=3 uid="uid://buvus4ym83wa8"]
-[ext_resource type="Script" uid="uid://tmo4wscguj62" path="res://components/ui/menus/loading_screen/loading_screen.gd" id="1_1gk3q"]
+[ext_resource type="Script" uid="uid://tmo4wscguj62" path="res://src/ui/menus/loading_screen/loading_screen.gd" id="1_1gk3q"]
[node name="LoadingScreen" type="Control"]
layout_mode = 3
diff --git a/source/components/ui/menus/main_menu/main_menu.gd b/source/src/ui/menus/main_menu/main_menu.gd
similarity index 77%
rename from source/components/ui/menus/main_menu/main_menu.gd
rename to source/src/ui/menus/main_menu/main_menu.gd
index 687daad..e6cf407 100644
--- a/source/components/ui/menus/main_menu/main_menu.gd
+++ b/source/src/ui/menus/main_menu/main_menu.gd
@@ -1,7 +1,7 @@
class_name MainMenu
extends Node
-const AMBIENCE_STREAM: AudioStream = preload("res://Dark House.wav")
+const AMBIENCE_STREAM: AudioStream = preload("uid://cyxvsy5wjxhl7")
@onready var continue_button: Button = %ContinueButton
@onready var new_game_button: Button = %NewGameButton
@@ -13,7 +13,7 @@ const AMBIENCE_STREAM: AudioStream = preload("res://Dark House.wav")
func _ready() -> void:
continue_button.disabled = not SaveManager.save_exists()
- AudioManager.play_audio(AMBIENCE_STREAM, AudioManager.MUSIC)
+ AudioManager.play_audio(AMBIENCE_STREAM, AudioManager.AMBIENCE)
func _unhandled_input(event: InputEvent) -> void:
@@ -23,14 +23,14 @@ func _unhandled_input(event: InputEvent) -> void:
func load_game() -> void:
- AudioManager.fade_audio(AMBIENCE_STREAM, -80.0, SceneFader.fade_in_duration, AudioManager.MUSIC, true)
+ AudioManager.fade_audio(AMBIENCE_STREAM, -80.0, SceneFader.fade_in_duration, AudioManager.AMBIENCE, true)
SceneFader.load_to_path(GameGlobals.GAME_PATH)
func _on_new_game_button_pressed() -> void:
if SceneFader.is_fading:
return
-
+
GameGlobals.reset_game()
SaveManager.delete_save()
SaveManager.save_game()
@@ -40,22 +40,25 @@ func _on_new_game_button_pressed() -> void:
func _on_continue_button_pressed() -> void:
if SceneFader.is_fading:
return
-
+
GameGlobals.reset_game()
- SaveManager.load_game()
+ GameGlobals.load_from_save()
load_game()
func _on_quit_button_pressed() -> void:
if SceneFader.is_fading:
return
-
+
+ AudioManager.fade_audio(AMBIENCE_STREAM, -80.0, SceneFader.fade_out_duration, AudioManager.AMBIENCE)
+ await SceneFader.fade_in()
+
get_tree().quit()
func _on_settings_button_pressed() -> void:
if SceneFader.is_fading:
return
-
+
main_menu_ui.hide()
options_menu.show()
diff --git a/source/components/ui/menus/main_menu/main_menu.gd.uid b/source/src/ui/menus/main_menu/main_menu.gd.uid
similarity index 100%
rename from source/components/ui/menus/main_menu/main_menu.gd.uid
rename to source/src/ui/menus/main_menu/main_menu.gd.uid
diff --git a/source/components/ui/menus/main_menu/main_menu.tscn b/source/src/ui/menus/main_menu/main_menu.tscn
similarity index 96%
rename from source/components/ui/menus/main_menu/main_menu.tscn
rename to source/src/ui/menus/main_menu/main_menu.tscn
index 8cc550e..43c7ea3 100644
--- a/source/components/ui/menus/main_menu/main_menu.tscn
+++ b/source/src/ui/menus/main_menu/main_menu.tscn
@@ -1,7 +1,7 @@
[gd_scene load_steps=4 format=3 uid="uid://dwd8wf02j2epn"]
-[ext_resource type="Script" uid="uid://bmsx3h2kunhb0" path="res://components/ui/menus/main_menu/main_menu.gd" id="1_6xfbl"]
-[ext_resource type="PackedScene" uid="uid://4s2nskkco0a2" path="res://components/ui/menus/options_menu/options_menu.tscn" id="2_i2wwg"]
+[ext_resource type="Script" uid="uid://bmsx3h2kunhb0" path="res://src/ui/menus/main_menu/main_menu.gd" id="1_6xfbl"]
+[ext_resource type="PackedScene" uid="uid://4s2nskkco0a2" path="res://src/ui/menus/options_menu/options_menu.tscn" id="2_i2wwg"]
[sub_resource type="Environment" id="Environment_6xfbl"]
ambient_light_source = 2
diff --git a/source/components/ui/menus/menu_base.gd b/source/src/ui/menus/menu_base.gd
similarity index 81%
rename from source/components/ui/menus/menu_base.gd
rename to source/src/ui/menus/menu_base.gd
index 4431c0b..b9e9120 100644
--- a/source/components/ui/menus/menu_base.gd
+++ b/source/src/ui/menus/menu_base.gd
@@ -4,21 +4,26 @@ extends Control
signal menu_opened
signal menu_closed
+@export var focus_node: Control
+
var previous_menu: MenuBase
func open_menu(last_menu: MenuBase = previous_menu) -> void:
show()
-
+
if is_instance_valid(last_menu):
previous_menu = last_menu
last_menu.hide()
menu_opened.emit()
+ if is_instance_valid(focus_node):
+ focus_node.grab_focus()
+
func close_menu() -> void:
hide()
-
+
if is_instance_valid(previous_menu):
previous_menu.open_menu()
previous_menu = null
diff --git a/source/components/ui/menus/menu_base.gd.uid b/source/src/ui/menus/menu_base.gd.uid
similarity index 100%
rename from source/components/ui/menus/menu_base.gd.uid
rename to source/src/ui/menus/menu_base.gd.uid
diff --git a/source/components/ui/menus/menu_button_opener.gd b/source/src/ui/menus/menu_button_opener.gd
similarity index 100%
rename from source/components/ui/menus/menu_button_opener.gd
rename to source/src/ui/menus/menu_button_opener.gd
diff --git a/source/components/ui/menus/menu_button_opener.gd.uid b/source/src/ui/menus/menu_button_opener.gd.uid
similarity index 100%
rename from source/components/ui/menus/menu_button_opener.gd.uid
rename to source/src/ui/menus/menu_button_opener.gd.uid
diff --git a/source/components/ui/menus/options_menu/elements/fullscreen_button.gd b/source/src/ui/menus/options_menu/elements/fullscreen_button.gd
similarity index 100%
rename from source/components/ui/menus/options_menu/elements/fullscreen_button.gd
rename to source/src/ui/menus/options_menu/elements/fullscreen_button.gd
diff --git a/source/components/ui/menus/options_menu/elements/fullscreen_button.gd.uid b/source/src/ui/menus/options_menu/elements/fullscreen_button.gd.uid
similarity index 100%
rename from source/components/ui/menus/options_menu/elements/fullscreen_button.gd.uid
rename to source/src/ui/menus/options_menu/elements/fullscreen_button.gd.uid
diff --git a/source/src/ui/menus/options_menu/elements/language_selector.gd b/source/src/ui/menus/options_menu/elements/language_selector.gd
new file mode 100644
index 0000000..e140755
--- /dev/null
+++ b/source/src/ui/menus/options_menu/elements/language_selector.gd
@@ -0,0 +1,33 @@
+extends OptionButton
+
+
+@export var languages: Dictionary[String, String] = {
+ "English (English)": "en",
+ "Deutsch (German)": "de"
+}
+
+# Called when the node enters the scene tree for the first time.
+func _ready() -> void:
+ for i: Variant in languages:
+ add_item(i as String)
+
+ select(SettingsManager.get_setting(&"misc", &"language"))
+
+ if selected == -1:
+ match OS.get_locale_language():
+ "en": selected = 0
+ "de": selected = 1
+
+ item_selected.connect(option_selected)
+ option_selected(selected)
+
+
+func option_selected(index: int) -> void:
+ var index_string: String = get_item_text(index)
+
+ if languages.has(index_string):
+ if languages[index_string] is not String:
+ return
+
+ SettingsManager.set_language(index)
+ TranslationServer.set_locale(languages[index_string])
diff --git a/source/src/ui/menus/options_menu/elements/language_selector.gd.uid b/source/src/ui/menus/options_menu/elements/language_selector.gd.uid
new file mode 100644
index 0000000..b88f9aa
--- /dev/null
+++ b/source/src/ui/menus/options_menu/elements/language_selector.gd.uid
@@ -0,0 +1 @@
+uid://cbxoamco3w7vs
diff --git a/source/src/ui/menus/options_menu/elements/settings_checkbox.gd b/source/src/ui/menus/options_menu/elements/settings_checkbox.gd
new file mode 100644
index 0000000..1d64121
--- /dev/null
+++ b/source/src/ui/menus/options_menu/elements/settings_checkbox.gd
@@ -0,0 +1,14 @@
+class_name SettingsCheckBox
+extends CheckBox
+
+
+@export var section: StringName = &""
+@export var key: StringName = &""
+
+
+func _ready() -> void:
+ button_pressed = SettingsManager.get_setting(section, key)
+
+
+func _toggled(toggled_on: bool) -> void:
+ SettingsManager.set_setting(section, key, toggled_on)
diff --git a/source/src/ui/menus/options_menu/elements/settings_checkbox.gd.uid b/source/src/ui/menus/options_menu/elements/settings_checkbox.gd.uid
new file mode 100644
index 0000000..d4fc5a1
--- /dev/null
+++ b/source/src/ui/menus/options_menu/elements/settings_checkbox.gd.uid
@@ -0,0 +1 @@
+uid://c0s18kus3bt2n
diff --git a/source/src/ui/menus/options_menu/elements/settings_slider.gd b/source/src/ui/menus/options_menu/elements/settings_slider.gd
new file mode 100644
index 0000000..16d7224
--- /dev/null
+++ b/source/src/ui/menus/options_menu/elements/settings_slider.gd
@@ -0,0 +1,33 @@
+class_name SettingsSlider
+extends HSlider
+
+## A normal slider that changes a float (or int(?)) value in the project settings.
+## This slider will automatically load and save it's value when it enters the tree
+## or changes it's value.[br]
+## INFO: You don't need to change [param min_value] and [param max_value]. It is being saved
+## as a ratio towards them.
+
+## The path towards the setting that get's it's value changed.
+@export var section: StringName = &""
+@export var key: StringName = &""
+@export var default_value: float = 1.0
+
+
+func _ready() -> void:
+ value_changed.connect(func(_value_changed: bool) -> void:
+ set_setting(value)
+ )
+ #value_changed.connect(set_setting)
+
+ var err: Variant = SettingsManager.get_setting(section, key)
+ if not is_nan(err) and err is float:
+ var new_value: float = remap(err, 0.0, 1.0, min_value, max_value)
+ set_value_no_signal(new_value)
+ set_setting(new_value)
+ drag_ended.emit(value)
+
+
+## Set's the setting in the project setting with a path from [param setting_path].[br]
+## Note that this won't change [param value].
+func set_setting(new_value: float) -> void:
+ SettingsManager.set_setting(section, key, new_value)
diff --git a/source/src/ui/menus/options_menu/elements/settings_slider.gd.uid b/source/src/ui/menus/options_menu/elements/settings_slider.gd.uid
new file mode 100644
index 0000000..c6b2aa5
--- /dev/null
+++ b/source/src/ui/menus/options_menu/elements/settings_slider.gd.uid
@@ -0,0 +1 @@
+uid://bsysknjwg6abb
diff --git a/source/components/ui/menus/options_menu/elements/slider_label.gd b/source/src/ui/menus/options_menu/elements/slider_label.gd
similarity index 99%
rename from source/components/ui/menus/options_menu/elements/slider_label.gd
rename to source/src/ui/menus/options_menu/elements/slider_label.gd
index 2b61cb7..46c18a8 100644
--- a/source/components/ui/menus/options_menu/elements/slider_label.gd
+++ b/source/src/ui/menus/options_menu/elements/slider_label.gd
@@ -18,16 +18,16 @@ extends Label
func set_slider(new_slider: Slider) -> void:
if new_slider == slider:
return
-
+
if is_instance_valid(slider):
slider.value_changed.disconnect(_on_value_changed)
-
+
if is_instance_valid(new_slider):
new_slider.value_changed.connect(_on_value_changed)
if not new_slider.is_node_ready():
await new_slider.ready
_on_value_changed(new_slider.get_value()) # Apply the value of the new slider.
-
+
slider = new_slider
@@ -35,6 +35,6 @@ func _on_value_changed(new_value: float) -> void:
var value: float = new_value
if do_remap:
value = remap(value, remap_initial_min, remap_initial_max, remap_output_min, remap_output_max)
-
+
var new_text: String = str(value).pad_zeros(pad_zeros).pad_decimals(pad_decimals)
set_text(str(prefix, new_text, suffix))
diff --git a/source/components/ui/menus/options_menu/elements/slider_label.gd.uid b/source/src/ui/menus/options_menu/elements/slider_label.gd.uid
similarity index 100%
rename from source/components/ui/menus/options_menu/elements/slider_label.gd.uid
rename to source/src/ui/menus/options_menu/elements/slider_label.gd.uid
diff --git a/source/components/ui/menus/options_menu/elements/volume_slider.gd b/source/src/ui/menus/options_menu/elements/volume_slider.gd
similarity index 98%
rename from source/components/ui/menus/options_menu/elements/volume_slider.gd
rename to source/src/ui/menus/options_menu/elements/volume_slider.gd
index dcff3d6..5cd36f8 100644
--- a/source/components/ui/menus/options_menu/elements/volume_slider.gd
+++ b/source/src/ui/menus/options_menu/elements/volume_slider.gd
@@ -1,4 +1,4 @@
-class_name VolumeSlider
+class_name VolumeSlider
extends HSlider
@@ -23,12 +23,12 @@ func _ready() -> void:
value_changed.connect(func(_value_changed: bool) -> void:
SettingsManager.set_setting(&"audio", bus, remap(value, min_value, max_value, 0.0, 1.0), true)
)
-
+
if not value_changed.is_connected(set_volume):
value_changed.connect(set_volume)
-
+
var err: float = SettingsManager.get_setting(&"audio", bus)
-
+
var new_value: float = remap(err, 0.0, 1.0, min_value, max_value)
set_value_no_signal(new_value)
set_volume(new_value)
@@ -41,7 +41,7 @@ func set_volume(volume_range: float) -> void:
volume_range = remap(volume_range, min_value, max_value, min_volume, max_volume)
var new_volume: float = linear_to_db(volume_range)
var bus_idx: int = AudioServer.get_bus_index(bus)
-
+
AudioServer.set_bus_volume_db(bus_idx, new_volume)
if auto_set_muted:
AudioServer.set_bus_mute(bus_idx, is_zero_approx(volume_range))
diff --git a/source/components/ui/menus/options_menu/elements/volume_slider.gd.uid b/source/src/ui/menus/options_menu/elements/volume_slider.gd.uid
similarity index 100%
rename from source/components/ui/menus/options_menu/elements/volume_slider.gd.uid
rename to source/src/ui/menus/options_menu/elements/volume_slider.gd.uid
diff --git a/source/components/ui/menus/options_menu/options_menu.gd b/source/src/ui/menus/options_menu/options_menu.gd
similarity index 100%
rename from source/components/ui/menus/options_menu/options_menu.gd
rename to source/src/ui/menus/options_menu/options_menu.gd
diff --git a/source/components/ui/menus/options_menu/options_menu.gd.uid b/source/src/ui/menus/options_menu/options_menu.gd.uid
similarity index 100%
rename from source/components/ui/menus/options_menu/options_menu.gd.uid
rename to source/src/ui/menus/options_menu/options_menu.gd.uid
diff --git a/source/components/ui/menus/options_menu/options_menu.tscn b/source/src/ui/menus/options_menu/options_menu.tscn
similarity index 74%
rename from source/components/ui/menus/options_menu/options_menu.tscn
rename to source/src/ui/menus/options_menu/options_menu.tscn
index bbd7d90..31551fc 100644
--- a/source/components/ui/menus/options_menu/options_menu.tscn
+++ b/source/src/ui/menus/options_menu/options_menu.tscn
@@ -1,16 +1,22 @@
-[gd_scene load_steps=4 format=3 uid="uid://4s2nskkco0a2"]
+[gd_scene load_steps=7 format=3 uid="uid://4s2nskkco0a2"]
-[ext_resource type="Script" uid="uid://dg2s0gww8q6jh" path="res://components/ui/menus/options_menu/elements/slider_label.gd" id="2_gjkvu"]
-[ext_resource type="Script" uid="uid://d2j5jmj08o7f5" path="res://components/ui/menus/options_menu/elements/volume_slider.gd" id="2_hj0r6"]
-[ext_resource type="Script" uid="uid://dlkewd0xr6ytq" path="res://components/ui/menus/options_menu/elements/fullscreen_button.gd" id="3_hj0r6"]
+[ext_resource type="Script" uid="uid://crdgxvb8i0cif" path="res://src/ui/menus/menu_base.gd" id="1_df6s5"]
+[ext_resource type="Script" uid="uid://dg2s0gww8q6jh" path="res://src/ui/menus/options_menu/elements/slider_label.gd" id="2_gjkvu"]
+[ext_resource type="Script" uid="uid://d2j5jmj08o7f5" path="res://src/ui/menus/options_menu/elements/volume_slider.gd" id="2_hj0r6"]
+[ext_resource type="Script" uid="uid://dlkewd0xr6ytq" path="res://src/ui/menus/options_menu/elements/fullscreen_button.gd" id="3_hj0r6"]
+[ext_resource type="Script" uid="uid://cbxoamco3w7vs" path="res://src/ui/menus/options_menu/elements/language_selector.gd" id="4_npml7"]
+[ext_resource type="Script" uid="uid://c0s18kus3bt2n" path="res://src/ui/menus/options_menu/elements/settings_checkbox.gd" id="5_basnw"]
-[node name="OptionsMenu" type="Control"]
+[node name="OptionsMenu" type="Control" node_paths=PackedStringArray("focus_node")]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
+script = ExtResource("1_df6s5")
+focus_node = NodePath("TabContainer/Misc/MarginContainer/VBoxContainer/LanguageSelector")
+metadata/_custom_type_script = "uid://crdgxvb8i0cif"
[node name="TabContainer" type="TabContainer" parent="."]
custom_minimum_size = Vector2(256, 256)
@@ -27,9 +33,10 @@ offset_bottom = 20.0
grow_horizontal = 2
grow_vertical = 2
tab_alignment = 1
-current_tab = 0
+current_tab = 2
[node name="Audio" type="Control" parent="TabContainer"]
+visible = false
layout_mode = 2
metadata/_tab_index = 0
@@ -175,3 +182,35 @@ layout_mode = 2
layout_mode = 2
text = "Fullscreen"
script = ExtResource("3_hj0r6")
+
+[node name="Misc" type="Control" parent="TabContainer"]
+layout_mode = 2
+metadata/_tab_index = 2
+
+[node name="MarginContainer" type="MarginContainer" parent="TabContainer/Misc"]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+theme_override_constants/margin_left = 4
+theme_override_constants/margin_top = 4
+theme_override_constants/margin_right = 4
+theme_override_constants/margin_bottom = 4
+
+[node name="VBoxContainer" type="VBoxContainer" parent="TabContainer/Misc/MarginContainer"]
+layout_mode = 2
+
+[node name="LanguageSelector" type="OptionButton" parent="TabContainer/Misc/MarginContainer/VBoxContainer"]
+layout_mode = 2
+script = ExtResource("4_npml7")
+
+[node name="Headbobbing" type="CheckBox" parent="TabContainer/Misc/MarginContainer/VBoxContainer"]
+layout_mode = 2
+button_pressed = true
+text = "Headbobbing"
+script = ExtResource("5_basnw")
+section = &"misc"
+key = &"headbobbing"
+metadata/_custom_type_script = "uid://c0s18kus3bt2n"
diff --git a/source/components/ui/menus/pause_menu/pause_menu.gd b/source/src/ui/menus/pause_menu/pause_menu.gd
similarity index 56%
rename from source/components/ui/menus/pause_menu/pause_menu.gd
rename to source/src/ui/menus/pause_menu/pause_menu.gd
index 9c6921c..776d585 100644
--- a/source/components/ui/menus/pause_menu/pause_menu.gd
+++ b/source/src/ui/menus/pause_menu/pause_menu.gd
@@ -6,14 +6,13 @@ const ACTION_PAUSE: StringName = &"pause"
var can_pause: bool = true
@onready var pause_menu: MenuBase = $PauseMenu
-@onready var options_menu: Control = $OptionsMenu
+@onready var options_menu: MenuBase = $OptionsMenu
func _input(event: InputEvent) -> void:
if event.is_action_pressed(ACTION_PAUSE):
if options_menu.is_visible_in_tree():
- options_menu.hide()
- pause_menu.show()
+ options_menu.close_menu()
else:
toggle_pause()
@@ -21,18 +20,16 @@ func _input(event: InputEvent) -> void:
func set_paused(value: bool) -> void:
if SceneFader.is_fading:
return
-
+
get_tree().paused = value
- pause_menu.visible = value
-
- Input.mouse_mode = Input.MOUSE_MODE_VISIBLE if value else Input.MOUSE_MODE_CAPTURED
+ (pause_menu.open_menu if value else pause_menu.close_menu).call()
+
+ InputManager.set_mouse_captured(not value)
func toggle_pause() -> void:
- if not can_pause or options_menu.is_visible():
- return
-
- set_paused(not get_tree().paused)
+ if can_pause and not options_menu.is_visible():
+ set_paused(not get_tree().paused)
func _on_continue_button_pressed() -> void:
@@ -40,10 +37,9 @@ func _on_continue_button_pressed() -> void:
func _on_main_menu_button_pressed() -> void:
- Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
- await SceneFader.load_to_path(GameGlobals.MAIN_MENU_PATH, true)
+ InputManager.release_mouse()
+ await SceneFader.load_to_path(GameGlobals.MAIN_MENU_PATH)
func _on_settings_button_pressed() -> void:
- pause_menu.hide()
- options_menu.show()
+ options_menu.open_menu(pause_menu)
diff --git a/source/components/ui/menus/pause_menu/pause_menu.gd.uid b/source/src/ui/menus/pause_menu/pause_menu.gd.uid
similarity index 100%
rename from source/components/ui/menus/pause_menu/pause_menu.gd.uid
rename to source/src/ui/menus/pause_menu/pause_menu.gd.uid
diff --git a/source/components/ui/menus/pause_menu/pause_menu.tscn b/source/src/ui/menus/pause_menu/pause_menu.tscn
similarity index 85%
rename from source/components/ui/menus/pause_menu/pause_menu.tscn
rename to source/src/ui/menus/pause_menu/pause_menu.tscn
index e49e74e..f70f198 100644
--- a/source/components/ui/menus/pause_menu/pause_menu.tscn
+++ b/source/src/ui/menus/pause_menu/pause_menu.tscn
@@ -1,14 +1,14 @@
[gd_scene load_steps=4 format=3 uid="uid://dawmen0hlfaaq"]
-[ext_resource type="Script" uid="uid://cx3lpgmhrra8v" path="res://components/ui/menus/pause_menu/pause_menu.gd" id="1_43sid"]
-[ext_resource type="Script" uid="uid://crdgxvb8i0cif" path="res://components/ui/menus/menu_base.gd" id="1_hcnxh"]
-[ext_resource type="PackedScene" uid="uid://4s2nskkco0a2" path="res://components/ui/menus/options_menu/options_menu.tscn" id="3_hcnxh"]
+[ext_resource type="Script" uid="uid://cx3lpgmhrra8v" path="res://src/ui/menus/pause_menu/pause_menu.gd" id="1_43sid"]
+[ext_resource type="Script" uid="uid://crdgxvb8i0cif" path="res://src/ui/menus/menu_base.gd" id="1_hcnxh"]
+[ext_resource type="PackedScene" uid="uid://4s2nskkco0a2" path="res://src/ui/menus/options_menu/options_menu.tscn" id="3_hcnxh"]
[node name="PauseMenu" type="Node"]
process_mode = 3
script = ExtResource("1_43sid")
-[node name="PauseMenu" type="Control" parent="."]
+[node name="PauseMenu" type="Control" parent="." node_paths=PackedStringArray("focus_node")]
visible = false
layout_mode = 3
anchors_preset = 15
@@ -17,6 +17,7 @@ anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_hcnxh")
+focus_node = NodePath("VBoxContainer/ContinueButton")
metadata/_custom_type_script = "uid://crdgxvb8i0cif"
[node name="Label" type="Label" parent="PauseMenu"]
diff --git a/source/src/vfx/shaders/dissolving_wall/dissolving_wall.gdshader b/source/src/vfx/shaders/dissolving_wall/dissolving_wall.gdshader
new file mode 100644
index 0000000..46cd135
--- /dev/null
+++ b/source/src/vfx/shaders/dissolving_wall/dissolving_wall.gdshader
@@ -0,0 +1,70 @@
+// NOTE: Shader automatically converted from Godot Engine 4.4.1.stable's StandardMaterial3D.
+
+shader_type spatial;
+render_mode blend_mix, depth_draw_opaque, cull_back, diffuse_burley, specular_schlick_ggx;
+
+uniform vec4 albedo : source_color = vec4(1.0, 1.0, 1.0, 1.0);
+uniform sampler2D texture_albedo : source_color, filter_linear_mipmap, repeat_enable;
+uniform sampler2D texture_dissolve : source_color, filter_linear_mipmap, repeat_enable;
+uniform float alpha_scissor_threshold : hint_range(0.0, 1.0, 0.001);
+
+uniform float roughness : hint_range(0.0, 1.0);
+uniform sampler2D texture_metallic : hint_default_white, filter_linear_mipmap, repeat_enable;
+uniform vec4 metallic_texture_channel;
+uniform sampler2D texture_roughness : hint_roughness_r, filter_linear_mipmap, repeat_enable;
+
+uniform float specular : hint_range(0.0, 1.0, 0.01);
+uniform float metallic : hint_range(0.0, 1.0, 0.01);
+varying vec3 uv1_triplanar_pos;
+
+uniform float uv1_blend_sharpness : hint_range(0.0, 150.0, 0.001) = 1.0;
+varying vec3 uv1_power_normal;
+
+uniform vec3 uv1_scale = vec3(1.0, 1.0, 1.0);
+uniform vec3 uv1_offset;
+//uniform vec3 uv2_scale;
+//uniform vec3 uv2_offset;
+
+void vertex() {
+ vec3 normal = NORMAL;
+
+ TANGENT = vec3(0.0, 0.0, -1.0) * abs(normal.x);
+ TANGENT += vec3(1.0, 0.0, 0.0) * abs(normal.y);
+ TANGENT += vec3(1.0, 0.0, 0.0) * abs(normal.z);
+ TANGENT = normalize(TANGENT);
+
+ BINORMAL = vec3(0.0, 1.0, 0.0) * abs(normal.x);
+ BINORMAL += vec3(0.0, 0.0, -1.0) * abs(normal.y);
+ BINORMAL += vec3(0.0, 1.0, 0.0) * abs(normal.z);
+ BINORMAL = normalize(BINORMAL);
+
+ // UV1 Triplanar: Enabled
+ uv1_power_normal = pow(abs(NORMAL), vec3(uv1_blend_sharpness));
+ uv1_triplanar_pos = VERTEX * uv1_scale + uv1_offset;
+ uv1_power_normal /= dot(uv1_power_normal, vec3(1.0));
+ uv1_triplanar_pos *= vec3(1.0, -1.0, 1.0);
+}
+
+vec4 triplanar_texture(sampler2D p_sampler, vec3 p_weights, vec3 p_triplanar_pos) {
+ vec4 samp = vec4(0.0);
+ samp += texture(p_sampler, p_triplanar_pos.xy) * p_weights.z;
+ samp += texture(p_sampler, p_triplanar_pos.xz) * p_weights.y;
+ samp += texture(p_sampler, p_triplanar_pos.zy * vec2(-1.0, 1.0)) * p_weights.x;
+ return samp;
+}
+
+void fragment() {
+ vec4 albedo_tex = triplanar_texture(texture_albedo, uv1_power_normal, uv1_triplanar_pos);
+ vec4 dissolve_tex = triplanar_texture(texture_dissolve, uv1_power_normal, uv1_triplanar_pos);
+ ALBEDO = albedo.rgb * albedo_tex.rgb * dissolve_tex.rgb;
+
+ float metallic_tex = dot(triplanar_texture(texture_metallic, uv1_power_normal, uv1_triplanar_pos), metallic_texture_channel);
+ METALLIC = metallic_tex * metallic;
+ SPECULAR = specular;
+
+ vec4 roughness_texture_channel = vec4(1.0, 0.0, 0.0, 0.0);
+ float roughness_tex = dot(triplanar_texture(texture_roughness, uv1_power_normal, uv1_triplanar_pos), roughness_texture_channel);
+ ROUGHNESS = roughness_tex * roughness;
+ ALPHA *= albedo.a * dissolve_tex.a;
+ ALPHA_SCISSOR_THRESHOLD = alpha_scissor_threshold;
+}
diff --git a/source/src/vfx/shaders/dissolving_wall/dissolving_wall.gdshader.uid b/source/src/vfx/shaders/dissolving_wall/dissolving_wall.gdshader.uid
new file mode 100644
index 0000000..b40b24e
--- /dev/null
+++ b/source/src/vfx/shaders/dissolving_wall/dissolving_wall.gdshader.uid
@@ -0,0 +1 @@
+uid://dvpk3m7f8x5pc
diff --git a/source/src/vfx/shaders/dissolving_wall/dissolving_wall_noise.tres b/source/src/vfx/shaders/dissolving_wall/dissolving_wall_noise.tres
new file mode 100644
index 0000000..2435987
--- /dev/null
+++ b/source/src/vfx/shaders/dissolving_wall/dissolving_wall_noise.tres
@@ -0,0 +1,16 @@
+[gd_resource type="NoiseTexture2D" load_steps=3 format=3 uid="uid://jpmuawwwmwci"]
+
+[sub_resource type="Gradient" id="Gradient_mfdv2"]
+colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 0)
+
+[sub_resource type="FastNoiseLite" id="FastNoiseLite_iotsf"]
+noise_type = 0
+frequency = 0.0075
+domain_warp_enabled = true
+domain_warp_type = 1
+domain_warp_fractal_octaves = 1
+
+[resource]
+noise = SubResource("FastNoiseLite_iotsf")
+color_ramp = SubResource("Gradient_mfdv2")
+seamless = true