diff --git a/.gitattribute b/.gitattribute
new file mode 100644
index 0000000..9648f5f
--- /dev/null
+++ b/.gitattribute
@@ -0,0 +1,6 @@
+*.gd eol=lf
+*.tscn eol=lf
+*.material eol=lf
+*.cfg eol=lf
+*.godot eol=lf
+*.import eol=lf
diff --git a/.godot/editor/create_recent.Node b/.godot/editor/create_recent.Node
new file mode 100644
index 0000000..c902293
--- /dev/null
+++ b/.godot/editor/create_recent.Node
@@ -0,0 +1,2 @@
+Camera3D
+CSGBox3D
diff --git a/.godot/editor/editor_layout.cfg b/.godot/editor/editor_layout.cfg
new file mode 100644
index 0000000..1603e4f
--- /dev/null
+++ b/.godot/editor/editor_layout.cfg
@@ -0,0 +1,48 @@
+[docks]
+
+dock_1_selected_tab_idx=0
+dock_2_selected_tab_idx=0
+dock_3_selected_tab_idx=0
+dock_4_selected_tab_idx=0
+dock_5_selected_tab_idx=0
+dock_6_selected_tab_idx=0
+dock_7_selected_tab_idx=0
+dock_8_selected_tab_idx=0
+dock_floating={}
+dock_split_2=0
+dock_split_3=0
+dock_hsplit_1=0
+dock_hsplit_2=270
+dock_hsplit_3=-270
+dock_hsplit_4=0
+dock_filesystem_split=0
+dock_filesystem_display_mode=0
+dock_filesystem_file_sort=0
+dock_filesystem_file_list_display_mode=1
+dock_filesystem_selected_paths=PackedStringArray("res://town/town_scene.tscn")
+dock_filesystem_uncollapsed_paths=PackedStringArray("Favorites", "res://", "res://town/")
+dock_3="Scene,Import"
+dock_4="FileSystem"
+dock_5="Inspector,Node,History"
+
+[EditorNode]
+
+open_scenes=PackedStringArray("res://node_3d.tscn", "res://town/town_scene.tscn")
+current_scene="res://town/town_scene.tscn"
+center_split_offset=0
+selected_default_debugger_tab_idx=0
+selected_main_editor_idx=1
+
+[ScriptEditor]
+
+open_scripts=[]
+selected_script=""
+open_help=[]
+script_split_offset=70
+list_split_offset=0
+
+[ShaderEditor]
+
+open_shaders=[]
+split_offset=0
+selected_shader=""
diff --git a/.godot/editor/engine.wav-d6b28d3271a4c3acd03d9445eeff7cb3.sample-folding-be3310776924ea3fea47fff1d5cf2371.cfg b/.godot/editor/engine.wav-d6b28d3271a4c3acd03d9445eeff7cb3.sample-folding-be3310776924ea3fea47fff1d5cf2371.cfg
new file mode 100644
index 0000000..e860dd4
--- /dev/null
+++ b/.godot/editor/engine.wav-d6b28d3271a4c3acd03d9445eeff7cb3.sample-folding-be3310776924ea3fea47fff1d5cf2371.cfg
@@ -0,0 +1,3 @@
+[folding]
+
+sections_unfolded=PackedStringArray()
diff --git a/.godot/editor/favorites.Node b/.godot/editor/favorites.Node
new file mode 100644
index 0000000..e69de29
diff --git a/.godot/editor/filesystem_cache8 b/.godot/editor/filesystem_cache8
index b275358..246e37a 100644
--- a/.godot/editor/filesystem_cache8
+++ b/.godot/editor/filesystem_cache8
@@ -1,4 +1,45 @@
ea4bc82a6ad023ab7ee23ee620429895
-::res://::1716826573
+::res://::1716827728
default_env.tres::Environment::-1::1716823813::0::1::::<><>::
+export_presets.cfg::TextFile::-1::1716826851::0::1::::<><>::
icon.png::CompressedTexture2D::4377832383621260559::1716823813::1716826574::1::::<><>::
+icon.webp::CompressedTexture2D::3626017087650301524::1716827726::1716827730::1::::<><>::
+node_3d.tscn::PackedScene::5734022820197298223::1716827531::0::1::::<><>::
+README.md::TextFile::-1::1716827726::0::1::::<><>::
+spedometer.gd::GDScript::-1::1716827726::0::1::::<>Button<>::
+::res://car_select/::1716827726
+car_select.gd::GDScript::-1::1716827726::0::1::::<>Control<>::
+car_select.tscn::PackedScene::5519083593120862163::1716827726::0::1::::<><>::res://car_select/car_select.gd<>uid://bh7b4n4lg1uqt::::res://car_select/choose_van.png<>uid://hvkcmpdq1t0k::::res://car_select/choose_trailer.png<>uid://de7itkxhl0u28::::res://car_select/choose_tow.png
+choose_tow.png::CompressedTexture2D::7506597740885427615::1716827726::1716827730::1::::<><>::
+choose_trailer.png::CompressedTexture2D::535285233427956760::1716827726::1716827730::1::::<><>::
+choose_van.png::CompressedTexture2D::2943915910416982227::1716827726::1716827730::1::::<><>::
+::res://town/::1716827726
+town_scene.tscn::PackedScene::8963914804262481880::1716827726::0::1::::<><>::uid://dfdgytsvtqxwv::::res://town/truck_town.glb<>res://spedometer.gd<>uid://b2g4dq0w72e68::::res://town/materials/grass.webp<>uid://bdjiubscxkdn6::::res://town/materials/cement.tres
+truck_town.glb::PackedScene::7516807590272283437::1716827726::1716827731::1::::<><>::uid://bdjiubscxkdn6::::res://town/materials/cement.tres<>uid://c71ovlrgdfif5::::res://town/materials/grass.tres
+::res://town/materials/::1716827726
+cement.tres::StandardMaterial3D::2616088146665799013::1716827726::0::1::::<><>::uid://dkv00eeo3yu2w::::res://town/materials/cement.webp
+cement.webp::CompressedTexture2D::7906065206908765244::1716827726::1716827731::1::::<><>::
+grass.tres::StandardMaterial3D::7073446329274880064::1716827726::0::1::::<><>::uid://b2g4dq0w72e68::::res://town/materials/grass.webp
+grass.webp::CompressedTexture2D::4295672758653397927::1716827726::1716827731::1::::<><>::
+::res://vehicles/::1716827727
+blob_shadow.png::CompressedTexture2D::3061404969606535202::1716827726::1716827730::1::::<><>::
+car_base.tscn::PackedScene::6639054641309143335::1716827726::0::1::::<><>::res://vehicles/vehicle.gd<>uid://d4ostmqwgytk::::res://vehicles/particle_smoke.png<>uid://bqrwin8ccgptt::::res://vehicles/meshes/wheel.res<>uid://b2xi556mwp7ue::::res://vehicles/meshes/minivan.res<>res://vehicles/follow_camera.gd<>uid://cb7wvsd6vygd3::::res://vehicles/engine.wav<>uid://sy2li7u35867::::res://vehicles/impact_1.wav<>uid://bf0h7s81yr8nj::::res://vehicles/impact_2.wav<>uid://sun2n8a4xapl::::res://vehicles/impact_3.wav<>uid://dpbayeeufya21::::res://vehicles/impact_4.wav<>uid://bju75l2w3r7vq::::res://vehicles/blob_shadow.png
+engine.wav::AudioStreamWAV::4910464526159239754::1716827726::1716827731::1::::<><>::
+follow_camera.gd::GDScript::-1::1716827726::0::1::::<>Camera3D<>::
+impact_1.wav::AudioStreamWAV::1314603724687552626::1716827726::1716827731::1::::<><>::
+impact_2.wav::AudioStreamWAV::2789457507702027471::1716827726::1716827731::1::::<><>::
+impact_3.wav::AudioStreamWAV::1305525011728930513::1716827726::1716827731::1::::<><>::
+impact_4.wav::AudioStreamWAV::8214202159646518848::1716827727::1716827731::1::::<><>::
+particle_smoke.png::CompressedTexture2D::271316685208785408::1716827727::1716827730::1::::<><>::
+tow_truck.tscn::PackedScene::2945802589605193517::1716827727::0::1::::<><>::res://vehicles/vehicle.gd<>uid://bqrwin8ccgptt::::res://vehicles/meshes/wheel.res<>uid://cbpqxxd14g8un::::res://vehicles/meshes/tow_truck.res<>res://vehicles/follow_camera.gd<>uid://ctglc27jx8xe2::::res://vehicles/meshes/truck_cab.res<>uid://cb7wvsd6vygd3::::res://vehicles/engine.wav<>uid://sy2li7u35867::::res://vehicles/impact_1.wav<>uid://bf0h7s81yr8nj::::res://vehicles/impact_2.wav<>uid://sun2n8a4xapl::::res://vehicles/impact_3.wav<>uid://dpbayeeufya21::::res://vehicles/impact_4.wav<>uid://d4ostmqwgytk::::res://vehicles/particle_smoke.png<>uid://bju75l2w3r7vq::::res://vehicles/blob_shadow.png
+trailer_truck.tscn::PackedScene::8369804417720244340::1716827727::0::1::::<><>::res://vehicles/vehicle.gd<>uid://bqrwin8ccgptt::::res://vehicles/meshes/wheel.res<>uid://ctglc27jx8xe2::::res://vehicles/meshes/truck_cab.res<>res://vehicles/follow_camera.gd<>uid://sy2li7u35867::::res://vehicles/impact_1.wav<>uid://cb7wvsd6vygd3::::res://vehicles/engine.wav<>uid://bf0h7s81yr8nj::::res://vehicles/impact_2.wav<>uid://sun2n8a4xapl::::res://vehicles/impact_3.wav<>uid://dpbayeeufya21::::res://vehicles/impact_4.wav<>uid://d4ostmqwgytk::::res://vehicles/particle_smoke.png<>uid://bju75l2w3r7vq::::res://vehicles/blob_shadow.png<>uid://dyg750wqca86r::::res://vehicles/truck_trailer.tres
+truck_trailer.png::CompressedTexture2D::1190334386377021965::1716827727::1716827730::1::::<><>::
+truck_trailer.tres::StandardMaterial3D::8858178430301242195::1716827727::0::1::::<><>::uid://q7uvsiqefkwr::::res://vehicles/truck_trailer.png
+vehicle.gd::GDScript::-1::1716827727::0::1::::<>VehicleBody3D<>::
+::res://vehicles/meshes/::1716827727
+meshes.glb::PackedScene::349391053548130180::1716827727::1716827731::1::::<><>::uid://d0n61oj27qnya::::res://vehicles/meshes/truck_trailer.res<>uid://ctglc27jx8xe2::::res://vehicles/meshes/truck_cab.res<>uid://bqrwin8ccgptt::::res://vehicles/meshes/wheel.res<>uid://cbpqxxd14g8un::::res://vehicles/meshes/tow_truck.res<>uid://b2xi556mwp7ue::::res://vehicles/meshes/minivan.res
+minivan.res::ArrayMesh::4329541084187321796::1716827731::0::1::::<><>::
+tow_truck.res::ArrayMesh::4875009636371023161::1716827731::0::1::::<><>::
+truck_cab.res::ArrayMesh::6119488589546590487::1716827731::0::1::::<><>::
+truck_trailer.res::ArrayMesh::8942749460750483204::1716827731::0::1::::<><>::uid://dyg750wqca86r::::res://vehicles/truck_trailer.tres
+wheel.res::ArrayMesh::3545887397788631717::1716827731::0::1::::<><>::
diff --git a/.godot/editor/filesystem_update4 b/.godot/editor/filesystem_update4
new file mode 100644
index 0000000..c48d8ed
--- /dev/null
+++ b/.godot/editor/filesystem_update4
@@ -0,0 +1,6 @@
+res://node_3d.tscn
+res://vehicles/meshes/truck_trailer.res
+res://vehicles/meshes/truck_cab.res
+res://vehicles/meshes/wheel.res
+res://vehicles/meshes/tow_truck.res
+res://vehicles/meshes/minivan.res
diff --git a/.godot/editor/impact_1.wav-b48c755a0f8f9c75d26b0f9cb15d1f4a.sample-folding-e50e391bcec6e4ceff0f2f1e27eaf64c.cfg b/.godot/editor/impact_1.wav-b48c755a0f8f9c75d26b0f9cb15d1f4a.sample-folding-e50e391bcec6e4ceff0f2f1e27eaf64c.cfg
new file mode 100644
index 0000000..e860dd4
--- /dev/null
+++ b/.godot/editor/impact_1.wav-b48c755a0f8f9c75d26b0f9cb15d1f4a.sample-folding-e50e391bcec6e4ceff0f2f1e27eaf64c.cfg
@@ -0,0 +1,3 @@
+[folding]
+
+sections_unfolded=PackedStringArray()
diff --git a/.godot/editor/impact_2.wav-89ae4713c6333e6bda6389fc5bf000d9.sample-folding-552c6f1b79bcaa2860d4dd971c151bbd.cfg b/.godot/editor/impact_2.wav-89ae4713c6333e6bda6389fc5bf000d9.sample-folding-552c6f1b79bcaa2860d4dd971c151bbd.cfg
new file mode 100644
index 0000000..e860dd4
--- /dev/null
+++ b/.godot/editor/impact_2.wav-89ae4713c6333e6bda6389fc5bf000d9.sample-folding-552c6f1b79bcaa2860d4dd971c151bbd.cfg
@@ -0,0 +1,3 @@
+[folding]
+
+sections_unfolded=PackedStringArray()
diff --git a/.godot/editor/impact_3.wav-42b62d7e38b905503470ffc8bf41b3bd.sample-folding-5a5c11825043e8fec296f8bbabaa6288.cfg b/.godot/editor/impact_3.wav-42b62d7e38b905503470ffc8bf41b3bd.sample-folding-5a5c11825043e8fec296f8bbabaa6288.cfg
new file mode 100644
index 0000000..e860dd4
--- /dev/null
+++ b/.godot/editor/impact_3.wav-42b62d7e38b905503470ffc8bf41b3bd.sample-folding-5a5c11825043e8fec296f8bbabaa6288.cfg
@@ -0,0 +1,3 @@
+[folding]
+
+sections_unfolded=PackedStringArray()
diff --git a/.godot/editor/impact_4.wav-eeff21d9a916250609ae682428d6f122.sample-folding-2500317df4a1677d356ffa7c239b056c.cfg b/.godot/editor/impact_4.wav-eeff21d9a916250609ae682428d6f122.sample-folding-2500317df4a1677d356ffa7c239b056c.cfg
new file mode 100644
index 0000000..e860dd4
--- /dev/null
+++ b/.godot/editor/impact_4.wav-eeff21d9a916250609ae682428d6f122.sample-folding-2500317df4a1677d356ffa7c239b056c.cfg
@@ -0,0 +1,3 @@
+[folding]
+
+sections_unfolded=PackedStringArray()
diff --git a/.godot/editor/meshes.glb-030ff425937f3e98d423cb5cef7ede3d.scn-folding-17f7cd5b179e4536ec89e624fafcb101.cfg b/.godot/editor/meshes.glb-030ff425937f3e98d423cb5cef7ede3d.scn-folding-17f7cd5b179e4536ec89e624fafcb101.cfg
new file mode 100644
index 0000000..e860dd4
--- /dev/null
+++ b/.godot/editor/meshes.glb-030ff425937f3e98d423cb5cef7ede3d.scn-folding-17f7cd5b179e4536ec89e624fafcb101.cfg
@@ -0,0 +1,3 @@
+[folding]
+
+sections_unfolded=PackedStringArray()
diff --git a/.godot/editor/minivan.res-folding-81d6b528b5025c3f7df874c3d31f78f9.cfg b/.godot/editor/minivan.res-folding-81d6b528b5025c3f7df874c3d31f78f9.cfg
new file mode 100644
index 0000000..e860dd4
--- /dev/null
+++ b/.godot/editor/minivan.res-folding-81d6b528b5025c3f7df874c3d31f78f9.cfg
@@ -0,0 +1,3 @@
+[folding]
+
+sections_unfolded=PackedStringArray()
diff --git a/.godot/editor/node_3d.tscn-editstate-14584830dbc22d3f76a596eed5f4948e.cfg b/.godot/editor/node_3d.tscn-editstate-14584830dbc22d3f76a596eed5f4948e.cfg
new file mode 100644
index 0000000..906f287
--- /dev/null
+++ b/.godot/editor/node_3d.tscn-editstate-14584830dbc22d3f76a596eed5f4948e.cfg
@@ -0,0 +1,175 @@
+[editor_states]
+
+Anim={
+"visible": false
+}
+2D={
+"grid_offset": Vector2(0, 0),
+"grid_snap_active": false,
+"grid_step": Vector2(8, 8),
+"grid_visibility": 1,
+"ofs": Vector2(-165, -110),
+"primary_grid_step": Vector2i(8, 8),
+"show_edit_locks": true,
+"show_guides": true,
+"show_helpers": false,
+"show_origin": true,
+"show_rulers": true,
+"show_transformation_gizmos": true,
+"show_viewport": true,
+"show_zoom_control": true,
+"smart_snap_active": false,
+"snap_guides": true,
+"snap_node_anchors": true,
+"snap_node_center": true,
+"snap_node_parent": true,
+"snap_node_sides": true,
+"snap_other_nodes": true,
+"snap_pixel": true,
+"snap_relative": false,
+"snap_rotation": false,
+"snap_rotation_offset": 0.0,
+"snap_rotation_step": 0.261799,
+"snap_scale": false,
+"snap_scale_step": 0.1,
+"zoom": 1.0
+}
+3D={
+"fov": 70.01,
+"gizmos_status": {
+"AudioListener3D": 0,
+"AudioStreamPlayer3D": 0,
+"CPUParticles3D": 0,
+"CSGShape3D": 0,
+"Camera3D": 0,
+"CollisionObject3D": 0,
+"CollisionPolygon3D": 0,
+"CollisionShape3D": 0,
+"Decal": 0,
+"FogVolume": 0,
+"GPUParticles3D": 0,
+"GPUParticlesCollision3D": 0,
+"Joint3D": 0,
+"Light3D": 0,
+"LightmapGI": 0,
+"LightmapProbe": 0,
+"Marker3D": 0,
+"NavigationLink3D": 0,
+"NavigationRegion3D": 0,
+"OccluderInstance3D": 0,
+"Path3D": 0,
+"PhysicalBone3D": 0,
+"RayCast3D": 0,
+"ReflectionProbe": 0,
+"ShapeCast3D": 0,
+"Skeleton3D": 0,
+"SoftBody3D": 0,
+"SpringArm3D": 0,
+"VehicleWheel3D": 0,
+"VisibleOnScreenNotifier3D": 0,
+"VoxelGI": 0
+},
+"local_coords": false,
+"preview_sun_env": {
+"environ_ao_enabled": false,
+"environ_enabled": true,
+"environ_energy": 1.0,
+"environ_gi_enabled": false,
+"environ_glow_enabled": true,
+"environ_ground_color": Color(0.2, 0.169, 0.133, 1),
+"environ_sky_color": Color(0.385, 0.454, 0.55, 1),
+"environ_tonemap_enabled": true,
+"sun_color": Color(1, 1, 1, 1),
+"sun_enabled": true,
+"sun_energy": 1.0,
+"sun_max_distance": 100.0,
+"sun_rotation": Vector2(-1.0472, 2.61799)
+},
+"rotate_snap": 15.0,
+"scale_snap": 10.0,
+"show_grid": true,
+"show_origin": true,
+"snap_enabled": false,
+"translate_snap": 1.0,
+"viewport_mode": 1,
+"viewports": [{
+"auto_orthogonal": false,
+"auto_orthogonal_enabled": true,
+"cinematic_preview": false,
+"display_mode": 20,
+"distance": 4.0,
+"doppler": false,
+"frame_time": false,
+"gizmos": true,
+"half_res": false,
+"information": false,
+"listener": true,
+"lock_rotation": false,
+"orthogonal": false,
+"position": Vector3(0, 0, 0),
+"use_environment": false,
+"view_type": 0,
+"x_rotation": 0.5,
+"y_rotation": -0.5
+}, {
+"auto_orthogonal": false,
+"auto_orthogonal_enabled": true,
+"cinematic_preview": false,
+"display_mode": 20,
+"distance": 4.0,
+"doppler": false,
+"frame_time": false,
+"gizmos": true,
+"half_res": false,
+"information": false,
+"listener": false,
+"lock_rotation": false,
+"orthogonal": false,
+"position": Vector3(0, 0, 0),
+"use_environment": false,
+"view_type": 0,
+"x_rotation": 0.5,
+"y_rotation": -0.5
+}, {
+"auto_orthogonal": false,
+"auto_orthogonal_enabled": true,
+"cinematic_preview": false,
+"display_mode": 20,
+"distance": 4.0,
+"doppler": false,
+"frame_time": false,
+"gizmos": true,
+"half_res": false,
+"information": false,
+"listener": false,
+"lock_rotation": false,
+"orthogonal": false,
+"position": Vector3(0, 0, 0),
+"use_environment": false,
+"view_type": 0,
+"x_rotation": 0.5,
+"y_rotation": -0.5
+}, {
+"auto_orthogonal": false,
+"auto_orthogonal_enabled": true,
+"cinematic_preview": false,
+"display_mode": 20,
+"distance": 4.0,
+"doppler": false,
+"frame_time": false,
+"gizmos": true,
+"half_res": false,
+"information": false,
+"listener": false,
+"lock_rotation": false,
+"orthogonal": false,
+"position": Vector3(0, 0, 0),
+"use_environment": false,
+"view_type": 0,
+"x_rotation": 0.5,
+"y_rotation": -0.5
+}],
+"zfar": 4000.01,
+"znear": 0.05
+}
+selected_nodes=Array[NodePath]([NodePath("/root/@EditorNode@17147/@Panel@13/@VBoxContainer@14/@HSplitContainer@17/@HSplitContainer@25/@HSplitContainer@33/@VBoxContainer@34/@VSplitContainer@36/@VSplitContainer@62/@VBoxContainer@63/@PanelContainer@110/MainScreen/@CanvasItemEditor@9462/@VSplitContainer@9281/@HSplitContainer@9283/@HSplitContainer@9285/@Control@9286/@SubViewportContainer@9287/@SubViewport@9288/Node3D/Camera3D")])
diff --git a/.godot/editor/node_3d.tscn-folding-14584830dbc22d3f76a596eed5f4948e.cfg b/.godot/editor/node_3d.tscn-folding-14584830dbc22d3f76a596eed5f4948e.cfg
new file mode 100644
index 0000000..1d019fa
--- /dev/null
+++ b/.godot/editor/node_3d.tscn-folding-14584830dbc22d3f76a596eed5f4948e.cfg
@@ -0,0 +1,5 @@
+[folding]
+
+node_unfolds=[]
+resource_unfolds=[]
+nodes_folded=[]
diff --git a/.godot/editor/project_metadata.cfg b/.godot/editor/project_metadata.cfg
index 77704d7..1d2cc8f 100644
--- a/.godot/editor/project_metadata.cfg
+++ b/.godot/editor/project_metadata.cfg
@@ -20,4 +20,4 @@ Camera3D:scale=true
[recent_files]
-scenes=["res://node_3d.tscn"]
+scenes=["res://town/town_scene.tscn", "res://node_3d.tscn"]
diff --git a/.godot/editor/script_editor_cache.cfg b/.godot/editor/script_editor_cache.cfg
new file mode 100644
index 0000000..e69de29
diff --git a/.godot/editor/tow_truck.res-folding-496bb4bc87a6c7b122f86e589d016825.cfg b/.godot/editor/tow_truck.res-folding-496bb4bc87a6c7b122f86e589d016825.cfg
new file mode 100644
index 0000000..e860dd4
--- /dev/null
+++ b/.godot/editor/tow_truck.res-folding-496bb4bc87a6c7b122f86e589d016825.cfg
@@ -0,0 +1,3 @@
+[folding]
+
+sections_unfolded=PackedStringArray()
diff --git a/.godot/editor/town_scene.tscn-folding-7a91fd739b7abc563d418228362712ea.cfg b/.godot/editor/town_scene.tscn-folding-7a91fd739b7abc563d418228362712ea.cfg
new file mode 100644
index 0000000..6403e5a
--- /dev/null
+++ b/.godot/editor/town_scene.tscn-folding-7a91fd739b7abc563d418228362712ea.cfg
@@ -0,0 +1,5 @@
+[folding]
+
+node_unfolds=[NodePath("DirectionalLight3D"), PackedStringArray("Transform", "Light", "Shadow", "Directional Shadow"), NodePath("InstancePos"), PackedStringArray("Transform"), NodePath("Spedometer"), PackedStringArray("Layout", "Focus", "Shortcut", "BiDi"), NodePath("Back"), PackedStringArray("Layout"), NodePath("TouchTurnLeft"), PackedStringArray("Layout"), NodePath("TouchTurnLeft/TurnLeft"), PackedStringArray("Visibility", "Transform"), NodePath("TouchReverse"), PackedStringArray("Layout"), NodePath("TouchReverse/Reverse"), PackedStringArray("Visibility", "Transform"), NodePath("TouchTurnRight"), PackedStringArray("Layout"), NodePath("TouchTurnRight/TurnRight"), PackedStringArray("Visibility", "Transform"), NodePath("Ground"), PackedStringArray("Transform", "Geometry", "surface_material_override"), NodePath("Ground2"), PackedStringArray("Transform", "Geometry", "surface_material_override"), NodePath("Ground3"), PackedStringArray("Transform", "Geometry", "surface_material_override"), NodePath("Ground4"), PackedStringArray("Transform", "Geometry", "surface_material_override"), NodePath("Racetrack"), PackedStringArray("Transform"), NodePath("Racetrack/HugeTire"), PackedStringArray("Transform", "Skeleton", "surface_material_override"), NodePath("Racetrack/Ramp"), PackedStringArray("Transform", "surface_material_override"), NodePath("Racetrack/Ramp/RampStart"), PackedStringArray("Transform", "Skeleton", "surface_material_override"), NodePath("Racetrack/Ramp2"), PackedStringArray("Transform", "surface_material_override"), NodePath("Racetrack/Ramp2/RampStart"), PackedStringArray("Transform", "Skeleton", "surface_material_override"), NodePath("Racetrack/Ramp2/StaticBody3D/CollisionShape3D"), PackedStringArray("Transform"), NodePath("Racetrack/Ramp3"), PackedStringArray("Transform", "surface_material_override"), NodePath("Racetrack/Ramp3/RampStart"), PackedStringArray("Transform", "Skeleton", "surface_material_override"), NodePath("Racetrack/Ramp4"), PackedStringArray("Transform", "surface_material_override"), NodePath("Racetrack/Ramp4/RampStart"), PackedStringArray("Transform", "Skeleton", "surface_material_override"), NodePath("Racetrack/Ramp5"), PackedStringArray("Transform", "surface_material_override"), NodePath("Racetrack/Ramp5/RampStart"), PackedStringArray("Transform", "Skeleton", "surface_material_override")]
+resource_unfolds=["res://town/town_scene.tscn::Environment_dauhq", PackedStringArray("Resource", "Background", "Sky", "Tonemap", "Fog"), "res://town/town_scene.tscn::Shortcut_msvqx", PackedStringArray("Resource"), "res://town/town_scene.tscn::GradientTexture2D_m8ylb", PackedStringArray("Resource"), "res://town/town_scene.tscn::GradientTexture2D_xu6xc", PackedStringArray("Resource"), "res://town/town_scene.tscn::BoxMesh_x3c0g", PackedStringArray("Resource"), "res://town/town_scene.tscn::StandardMaterial3D_0ud3l", PackedStringArray("Resource", "Albedo", "Roughness", "UV1", "Sampling"), "res://town/town_scene.tscn::ConcavePolygonShape3D_gearx", PackedStringArray("Resource"), "res://town/town_scene.tscn::ConcavePolygonShape3D_g7q2f", PackedStringArray("Resource"), "res://town/town_scene.tscn::BoxMesh_n528d", PackedStringArray("Resource"), "res://town/town_scene.tscn::StandardMaterial3D_aijyr", PackedStringArray("Resource", "Albedo", "Roughness", "UV1", "Sampling"), "res://town/town_scene.tscn::ConcavePolygonShape3D_mb5rx", PackedStringArray("Resource"), "res://town/town_scene.tscn::ConcavePolygonShape3D_3wmyg", PackedStringArray("Resource"), "res://town/town_scene.tscn::Curve3D_6vskq", PackedStringArray("Resource"), "res://town/town_scene.tscn::TorusMesh_jqadq", PackedStringArray("Resource"), "res://town/town_scene.tscn::StandardMaterial3D_5qgna", PackedStringArray("Resource", "Albedo"), "res://town/town_scene.tscn::ConcavePolygonShape3D_smisc", PackedStringArray("Resource"), "res://town/town_scene.tscn::PrismMesh_xglk4", PackedStringArray("Resource"), "res://town/town_scene.tscn::StandardMaterial3D_kamav", PackedStringArray("Resource", "Albedo"), "res://town/town_scene.tscn::PrismMesh_3jdtn", PackedStringArray("Resource"), "res://town/town_scene.tscn::ConcavePolygonShape3D_ykfn8", PackedStringArray("Resource"), "res://town/town_scene.tscn::ConcavePolygonShape3D_4aeas", PackedStringArray("Resource"), "res://town/town_scene.tscn::ConcavePolygonShape3D_e2cnd", PackedStringArray("Resource"), "res://town/town_scene.tscn::ConcavePolygonShape3D_8ool4", PackedStringArray("Resource"), "res://town/town_scene.tscn::ConcavePolygonShape3D_ru3pl", PackedStringArray("Resource"), "res://town/town_scene.tscn::ConcavePolygonShape3D_stwys", PackedStringArray("Resource"), "res://town/town_scene.tscn::ConcavePolygonShape3D_04800", PackedStringArray("Resource"), "res://town/town_scene.tscn::ConcavePolygonShape3D_248tl", PackedStringArray("Resource"), "res://town/town_scene.tscn::ConcavePolygonShape3D_nhcrh", PackedStringArray("Resource")]
+nodes_folded=[]
diff --git a/.godot/editor/truck_cab.res-folding-01a5581fb83c02aec55186569b48ff31.cfg b/.godot/editor/truck_cab.res-folding-01a5581fb83c02aec55186569b48ff31.cfg
new file mode 100644
index 0000000..e860dd4
--- /dev/null
+++ b/.godot/editor/truck_cab.res-folding-01a5581fb83c02aec55186569b48ff31.cfg
@@ -0,0 +1,3 @@
+[folding]
+
+sections_unfolded=PackedStringArray()
diff --git a/.godot/editor/truck_town.glb-49b71606091d50bf5665443ce42e43d8.scn-folding-7e91ce2a8e37f1140f2a491da8d78040.cfg b/.godot/editor/truck_town.glb-49b71606091d50bf5665443ce42e43d8.scn-folding-7e91ce2a8e37f1140f2a491da8d78040.cfg
new file mode 100644
index 0000000..e860dd4
--- /dev/null
+++ b/.godot/editor/truck_town.glb-49b71606091d50bf5665443ce42e43d8.scn-folding-7e91ce2a8e37f1140f2a491da8d78040.cfg
@@ -0,0 +1,3 @@
+[folding]
+
+sections_unfolded=PackedStringArray()
diff --git a/.godot/editor/truck_trailer.res-folding-01045088c3087ae07f79a26b2003c9a8.cfg b/.godot/editor/truck_trailer.res-folding-01045088c3087ae07f79a26b2003c9a8.cfg
new file mode 100644
index 0000000..e860dd4
--- /dev/null
+++ b/.godot/editor/truck_trailer.res-folding-01045088c3087ae07f79a26b2003c9a8.cfg
@@ -0,0 +1,3 @@
+[folding]
+
+sections_unfolded=PackedStringArray()
diff --git a/.godot/editor/wheel.res-folding-a6322e613afbf410bf25bc3d5b0743c5.cfg b/.godot/editor/wheel.res-folding-a6322e613afbf410bf25bc3d5b0743c5.cfg
new file mode 100644
index 0000000..e860dd4
--- /dev/null
+++ b/.godot/editor/wheel.res-folding-a6322e613afbf410bf25bc3d5b0743c5.cfg
@@ -0,0 +1,3 @@
+[folding]
+
+sections_unfolded=PackedStringArray()
diff --git a/.godot/global_script_class_cache.cfg b/.godot/global_script_class_cache.cfg
index 32c2394..1775a2f 100644
--- a/.godot/global_script_class_cache.cfg
+++ b/.godot/global_script_class_cache.cfg
@@ -1 +1 @@
-list=[]
+list=Array[Dictionary]([])
diff --git a/.godot/imported/blob_shadow.png-543236f87c8fdb7d06671b1460d3917a.ctex b/.godot/imported/blob_shadow.png-543236f87c8fdb7d06671b1460d3917a.ctex
new file mode 100644
index 0000000..7280320
Binary files /dev/null and b/.godot/imported/blob_shadow.png-543236f87c8fdb7d06671b1460d3917a.ctex differ
diff --git a/.godot/imported/blob_shadow.png-543236f87c8fdb7d06671b1460d3917a.md5 b/.godot/imported/blob_shadow.png-543236f87c8fdb7d06671b1460d3917a.md5
new file mode 100644
index 0000000..182fae1
--- /dev/null
+++ b/.godot/imported/blob_shadow.png-543236f87c8fdb7d06671b1460d3917a.md5
@@ -0,0 +1,3 @@
+source_md5="ce7eb00cb5b7e971d0f336f1814f6cb5"
+dest_md5="c1b9b00f60f8f30a4b541575d5152e44"
+
diff --git a/.godot/imported/cement.webp-a59028ca151ccfb7e6020be6c141b163.ctex b/.godot/imported/cement.webp-a59028ca151ccfb7e6020be6c141b163.ctex
new file mode 100644
index 0000000..fa0f68b
Binary files /dev/null and b/.godot/imported/cement.webp-a59028ca151ccfb7e6020be6c141b163.ctex differ
diff --git a/.godot/imported/cement.webp-a59028ca151ccfb7e6020be6c141b163.md5 b/.godot/imported/cement.webp-a59028ca151ccfb7e6020be6c141b163.md5
new file mode 100644
index 0000000..8d46f33
--- /dev/null
+++ b/.godot/imported/cement.webp-a59028ca151ccfb7e6020be6c141b163.md5
@@ -0,0 +1,3 @@
+source_md5="5bd7eca1a6164956bbece83554dd8ddb"
+dest_md5="06dbde7fc0f5c2e83a282e48966e6883"
+
diff --git a/.godot/imported/choose_tow.png-e1d5f4ba7eb707eed82d65f6944c644a.ctex b/.godot/imported/choose_tow.png-e1d5f4ba7eb707eed82d65f6944c644a.ctex
new file mode 100644
index 0000000..ebc757e
Binary files /dev/null and b/.godot/imported/choose_tow.png-e1d5f4ba7eb707eed82d65f6944c644a.ctex differ
diff --git a/.godot/imported/choose_tow.png-e1d5f4ba7eb707eed82d65f6944c644a.md5 b/.godot/imported/choose_tow.png-e1d5f4ba7eb707eed82d65f6944c644a.md5
new file mode 100644
index 0000000..27c95c8
--- /dev/null
+++ b/.godot/imported/choose_tow.png-e1d5f4ba7eb707eed82d65f6944c644a.md5
@@ -0,0 +1,3 @@
+source_md5="479a4a2bdbd40dea2f759750b535a1df"
+dest_md5="1a04c36afa44aaa2b4aeb43dd16d9e02"
+
diff --git a/.godot/imported/choose_trailer.png-42b178b0fc9d742f9f23bb1d9fdfc9a7.ctex b/.godot/imported/choose_trailer.png-42b178b0fc9d742f9f23bb1d9fdfc9a7.ctex
new file mode 100644
index 0000000..7a59c49
Binary files /dev/null and b/.godot/imported/choose_trailer.png-42b178b0fc9d742f9f23bb1d9fdfc9a7.ctex differ
diff --git a/.godot/imported/choose_trailer.png-42b178b0fc9d742f9f23bb1d9fdfc9a7.md5 b/.godot/imported/choose_trailer.png-42b178b0fc9d742f9f23bb1d9fdfc9a7.md5
new file mode 100644
index 0000000..4ab19c4
--- /dev/null
+++ b/.godot/imported/choose_trailer.png-42b178b0fc9d742f9f23bb1d9fdfc9a7.md5
@@ -0,0 +1,3 @@
+source_md5="af4711e0c224d320d1b126cdf1c9e78e"
+dest_md5="0449d7c86293a0efb65e17a5ec31cac0"
+
diff --git a/.godot/imported/choose_van.png-a2669a1a5e1faa5c8245c7e87ce8c490.ctex b/.godot/imported/choose_van.png-a2669a1a5e1faa5c8245c7e87ce8c490.ctex
new file mode 100644
index 0000000..7342dff
Binary files /dev/null and b/.godot/imported/choose_van.png-a2669a1a5e1faa5c8245c7e87ce8c490.ctex differ
diff --git a/.godot/imported/choose_van.png-a2669a1a5e1faa5c8245c7e87ce8c490.md5 b/.godot/imported/choose_van.png-a2669a1a5e1faa5c8245c7e87ce8c490.md5
new file mode 100644
index 0000000..ec7a56f
--- /dev/null
+++ b/.godot/imported/choose_van.png-a2669a1a5e1faa5c8245c7e87ce8c490.md5
@@ -0,0 +1,3 @@
+source_md5="655343634bfbabd4b2d99c8c463a9ad0"
+dest_md5="6ce5f10dacbb8333bac0be3d9ec37117"
+
diff --git a/.godot/imported/engine.wav-d6b28d3271a4c3acd03d9445eeff7cb3.md5 b/.godot/imported/engine.wav-d6b28d3271a4c3acd03d9445eeff7cb3.md5
new file mode 100644
index 0000000..8c19dc5
--- /dev/null
+++ b/.godot/imported/engine.wav-d6b28d3271a4c3acd03d9445eeff7cb3.md5
@@ -0,0 +1,3 @@
+source_md5="2f3a63b1a9bf2c6b68c6e1f1da74a47c"
+dest_md5="572bf33710e6a39abfb327b41876fdf1"
+
diff --git a/.godot/imported/engine.wav-d6b28d3271a4c3acd03d9445eeff7cb3.sample b/.godot/imported/engine.wav-d6b28d3271a4c3acd03d9445eeff7cb3.sample
new file mode 100644
index 0000000..36be46b
Binary files /dev/null and b/.godot/imported/engine.wav-d6b28d3271a4c3acd03d9445eeff7cb3.sample differ
diff --git a/.godot/imported/grass.webp-0ccf2a619a3f121234da585c8abbfdba.ctex b/.godot/imported/grass.webp-0ccf2a619a3f121234da585c8abbfdba.ctex
new file mode 100644
index 0000000..6399773
Binary files /dev/null and b/.godot/imported/grass.webp-0ccf2a619a3f121234da585c8abbfdba.ctex differ
diff --git a/.godot/imported/grass.webp-0ccf2a619a3f121234da585c8abbfdba.md5 b/.godot/imported/grass.webp-0ccf2a619a3f121234da585c8abbfdba.md5
new file mode 100644
index 0000000..eae8826
--- /dev/null
+++ b/.godot/imported/grass.webp-0ccf2a619a3f121234da585c8abbfdba.md5
@@ -0,0 +1,3 @@
+source_md5="3b4522e7349d3a0db51cd98c38c2ae61"
+dest_md5="cf46b0999b4d6c18b1bb22e21964f66a"
+
diff --git a/.godot/imported/icon.webp-e94f9a68b0f625a567a797079e4d325f.ctex b/.godot/imported/icon.webp-e94f9a68b0f625a567a797079e4d325f.ctex
new file mode 100644
index 0000000..f52ae0b
Binary files /dev/null and b/.godot/imported/icon.webp-e94f9a68b0f625a567a797079e4d325f.ctex differ
diff --git a/.godot/imported/icon.webp-e94f9a68b0f625a567a797079e4d325f.md5 b/.godot/imported/icon.webp-e94f9a68b0f625a567a797079e4d325f.md5
new file mode 100644
index 0000000..bc59dc3
--- /dev/null
+++ b/.godot/imported/icon.webp-e94f9a68b0f625a567a797079e4d325f.md5
@@ -0,0 +1,3 @@
+source_md5="c643e882af4e6519374d473f82c4c376"
+dest_md5="54567e8184349899f35df040a7688464"
+
diff --git a/.godot/imported/impact_1.wav-b48c755a0f8f9c75d26b0f9cb15d1f4a.md5 b/.godot/imported/impact_1.wav-b48c755a0f8f9c75d26b0f9cb15d1f4a.md5
new file mode 100644
index 0000000..1534f87
--- /dev/null
+++ b/.godot/imported/impact_1.wav-b48c755a0f8f9c75d26b0f9cb15d1f4a.md5
@@ -0,0 +1,3 @@
+source_md5="e30823d015b944e1a486719c4b5f1d65"
+dest_md5="3e45e26908f4e1e0850c6d0bcca75c76"
+
diff --git a/.godot/imported/impact_1.wav-b48c755a0f8f9c75d26b0f9cb15d1f4a.sample b/.godot/imported/impact_1.wav-b48c755a0f8f9c75d26b0f9cb15d1f4a.sample
new file mode 100644
index 0000000..36cb25f
Binary files /dev/null and b/.godot/imported/impact_1.wav-b48c755a0f8f9c75d26b0f9cb15d1f4a.sample differ
diff --git a/.godot/imported/impact_2.wav-89ae4713c6333e6bda6389fc5bf000d9.md5 b/.godot/imported/impact_2.wav-89ae4713c6333e6bda6389fc5bf000d9.md5
new file mode 100644
index 0000000..a64e743
--- /dev/null
+++ b/.godot/imported/impact_2.wav-89ae4713c6333e6bda6389fc5bf000d9.md5
@@ -0,0 +1,3 @@
+source_md5="b15f64e9fd99e39e48e899737325ca24"
+dest_md5="0fa9db8c95975174e542db5cdd9ec178"
+
diff --git a/.godot/imported/impact_2.wav-89ae4713c6333e6bda6389fc5bf000d9.sample b/.godot/imported/impact_2.wav-89ae4713c6333e6bda6389fc5bf000d9.sample
new file mode 100644
index 0000000..8b081f8
Binary files /dev/null and b/.godot/imported/impact_2.wav-89ae4713c6333e6bda6389fc5bf000d9.sample differ
diff --git a/.godot/imported/impact_3.wav-42b62d7e38b905503470ffc8bf41b3bd.md5 b/.godot/imported/impact_3.wav-42b62d7e38b905503470ffc8bf41b3bd.md5
new file mode 100644
index 0000000..e7bb43d
--- /dev/null
+++ b/.godot/imported/impact_3.wav-42b62d7e38b905503470ffc8bf41b3bd.md5
@@ -0,0 +1,3 @@
+source_md5="177fcd2d5799c2a019f058eeff123aef"
+dest_md5="9e2b7f8c87e67a545e1777fe71d37663"
+
diff --git a/.godot/imported/impact_3.wav-42b62d7e38b905503470ffc8bf41b3bd.sample b/.godot/imported/impact_3.wav-42b62d7e38b905503470ffc8bf41b3bd.sample
new file mode 100644
index 0000000..1f0376f
Binary files /dev/null and b/.godot/imported/impact_3.wav-42b62d7e38b905503470ffc8bf41b3bd.sample differ
diff --git a/.godot/imported/impact_4.wav-eeff21d9a916250609ae682428d6f122.md5 b/.godot/imported/impact_4.wav-eeff21d9a916250609ae682428d6f122.md5
new file mode 100644
index 0000000..5146d5c
--- /dev/null
+++ b/.godot/imported/impact_4.wav-eeff21d9a916250609ae682428d6f122.md5
@@ -0,0 +1,3 @@
+source_md5="d80e01b1b40b8e8484c6ecf178bb9ff6"
+dest_md5="e5ca1eda74043251b3afdd11a9b9c142"
+
diff --git a/.godot/imported/impact_4.wav-eeff21d9a916250609ae682428d6f122.sample b/.godot/imported/impact_4.wav-eeff21d9a916250609ae682428d6f122.sample
new file mode 100644
index 0000000..7277d2f
Binary files /dev/null and b/.godot/imported/impact_4.wav-eeff21d9a916250609ae682428d6f122.sample differ
diff --git a/.godot/imported/meshes.glb-030ff425937f3e98d423cb5cef7ede3d.md5 b/.godot/imported/meshes.glb-030ff425937f3e98d423cb5cef7ede3d.md5
new file mode 100644
index 0000000..927a643
--- /dev/null
+++ b/.godot/imported/meshes.glb-030ff425937f3e98d423cb5cef7ede3d.md5
@@ -0,0 +1,3 @@
+source_md5="ea1ce24fc25c95dce0ea44ffa66f395c"
+dest_md5="f0288c8425c63e291717a7561b74d992"
+
diff --git a/.godot/imported/meshes.glb-030ff425937f3e98d423cb5cef7ede3d.scn b/.godot/imported/meshes.glb-030ff425937f3e98d423cb5cef7ede3d.scn
new file mode 100644
index 0000000..8a64066
Binary files /dev/null and b/.godot/imported/meshes.glb-030ff425937f3e98d423cb5cef7ede3d.scn differ
diff --git a/.godot/imported/particle_smoke.png-740721ed7d039c3c932866a66d9413f2.ctex b/.godot/imported/particle_smoke.png-740721ed7d039c3c932866a66d9413f2.ctex
new file mode 100644
index 0000000..8a20430
Binary files /dev/null and b/.godot/imported/particle_smoke.png-740721ed7d039c3c932866a66d9413f2.ctex differ
diff --git a/.godot/imported/particle_smoke.png-740721ed7d039c3c932866a66d9413f2.md5 b/.godot/imported/particle_smoke.png-740721ed7d039c3c932866a66d9413f2.md5
new file mode 100644
index 0000000..274a04e
--- /dev/null
+++ b/.godot/imported/particle_smoke.png-740721ed7d039c3c932866a66d9413f2.md5
@@ -0,0 +1,3 @@
+source_md5="a39ef986c315d3485bbd77beb1ef30c5"
+dest_md5="8c2fd73e5fae42c988a3e824df6dfd4a"
+
diff --git a/.godot/imported/truck_town.glb-49b71606091d50bf5665443ce42e43d8.md5 b/.godot/imported/truck_town.glb-49b71606091d50bf5665443ce42e43d8.md5
new file mode 100644
index 0000000..d310198
--- /dev/null
+++ b/.godot/imported/truck_town.glb-49b71606091d50bf5665443ce42e43d8.md5
@@ -0,0 +1,3 @@
+source_md5="21bfa370823577a0f32b53df00b936df"
+dest_md5="02e238c979992ec989041a56a36afe83"
+
diff --git a/.godot/imported/truck_town.glb-49b71606091d50bf5665443ce42e43d8.scn b/.godot/imported/truck_town.glb-49b71606091d50bf5665443ce42e43d8.scn
new file mode 100644
index 0000000..09d553f
Binary files /dev/null and b/.godot/imported/truck_town.glb-49b71606091d50bf5665443ce42e43d8.scn differ
diff --git a/.godot/imported/truck_trailer.png-37383ff0a7e2053e450f6ec8ff2bdcae.ctex b/.godot/imported/truck_trailer.png-37383ff0a7e2053e450f6ec8ff2bdcae.ctex
new file mode 100644
index 0000000..ccc63bf
Binary files /dev/null and b/.godot/imported/truck_trailer.png-37383ff0a7e2053e450f6ec8ff2bdcae.ctex differ
diff --git a/.godot/imported/truck_trailer.png-37383ff0a7e2053e450f6ec8ff2bdcae.md5 b/.godot/imported/truck_trailer.png-37383ff0a7e2053e450f6ec8ff2bdcae.md5
new file mode 100644
index 0000000..cb395ef
--- /dev/null
+++ b/.godot/imported/truck_trailer.png-37383ff0a7e2053e450f6ec8ff2bdcae.md5
@@ -0,0 +1,3 @@
+source_md5="63f10640a74da0424be95e4ad611d120"
+dest_md5="9975c96d81f85d6bf9ceb131170e9dad"
+
diff --git a/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/1115cc727c3a2a745acd484b011f24aa1803884c.cache b/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/1115cc727c3a2a745acd484b011f24aa1803884c.cache
new file mode 100644
index 0000000..156a438
Binary files /dev/null and b/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/1115cc727c3a2a745acd484b011f24aa1803884c.cache differ
diff --git a/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/13a57bb6c53ab09d8002873d3713a3ce5d5d3441.cache b/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/13a57bb6c53ab09d8002873d3713a3ce5d5d3441.cache
new file mode 100644
index 0000000..ae5b305
Binary files /dev/null and b/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/13a57bb6c53ab09d8002873d3713a3ce5d5d3441.cache differ
diff --git a/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/1d4895a8943bfcc67073363722bbbbf927ce59a5.cache b/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/1d4895a8943bfcc67073363722bbbbf927ce59a5.cache
new file mode 100644
index 0000000..10480f3
Binary files /dev/null and b/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/1d4895a8943bfcc67073363722bbbbf927ce59a5.cache differ
diff --git a/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/1fc3cc477134af7fa5a8cd7f5a9ca964b54beb9f.cache b/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/1fc3cc477134af7fa5a8cd7f5a9ca964b54beb9f.cache
new file mode 100644
index 0000000..2cb2574
Binary files /dev/null and b/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/1fc3cc477134af7fa5a8cd7f5a9ca964b54beb9f.cache differ
diff --git a/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/e41f7b95ca910a39563719338b6433a45f7f9be8.cache b/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/e41f7b95ca910a39563719338b6433a45f7f9be8.cache
new file mode 100644
index 0000000..83d988b
Binary files /dev/null and b/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/e41f7b95ca910a39563719338b6433a45f7f9be8.cache differ
diff --git a/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/fe5513d3d4067307b98a5ae178be51d8d1382533.cache b/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/fe5513d3d4067307b98a5ae178be51d8d1382533.cache
new file mode 100644
index 0000000..751b57f
Binary files /dev/null and b/.godot/shader_cache/SceneForwardClusteredShaderRD/8becad8ff5811f5502ec6497d84e8e19a2f86b52e45002eebde297651540200b/fe5513d3d4067307b98a5ae178be51d8d1382533.cache differ
diff --git a/.godot/uid_cache.bin b/.godot/uid_cache.bin
index b084ec8..39faca2 100644
Binary files a/.godot/uid_cache.bin and b/.godot/uid_cache.bin differ
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..5723ae2
--- /dev/null
+++ b/README.md
@@ -0,0 +1,39 @@
+# Truck Town
+
+This is a demo implementing different types of trucks of
+varying complexity using vehicle physics.
+
+Controls:
+
+- Up Arrow, W, Gamepad Right Trigger, Gamepad A/Cross: Accelerate
+- Down Arrow, S, Gamepad Left Trigger, Gamepad B/Circle, Gamepad X/Square: Brake/reverse
+- Left Arrow, Gamepad Left Stick, Gamepad D-Pad Left: Steer left
+- Right Arrow, Gamepad Left Stick, Gamepad D-Pad Right: Steer right
+- U, Gamepad Select, left-click speedometer: Change speedometer unit (m/s, km/h, mph)
+- C, Gamepad Y/Triangle: Change camera (exterior, interior, top-down)
+- Escape, Gamepad D-Pad Up: Go back to menu (press again to exit)
+
+On mobile platforms, the vehicle automatically accelerates. Touch the left and
+right edges of the screen to steer. Touch the middle of the screen to
+brake/reverse (this also temporarily stops acceleration).
+
+Language: GDScript
+
+Renderer: Forward+ on desktop, Mobile on mobile
+
+Check out this demo on the asset library: https://godotengine.org/asset-library/asset/524
+
+## How does it work?
+
+The base vehicle uses a
+[`VehicleBody`](https://docs.godotengine.org/en/latest/classes/class_vehiclebody.html)
+node. The trailer truck is tied together using a
+[`ConeJointTwist`](https://docs.godotengine.org/en/latest/classes/class_conetwistjoint.html)
+node, and the tow truck is tried together using a chain made of
+[`RigidBody`](https://docs.godotengine.org/en/latest/classes/class_rigidbody.html)
+nodes which are pinned together using
+[`PinJoint`](https://docs.godotengine.org/en/latest/classes/class_pinjoint.html) nodes.
+
+## Screenshots
+
+
diff --git a/car_select/car_select.gd b/car_select/car_select.gd
new file mode 100644
index 0000000..c399d80
--- /dev/null
+++ b/car_select/car_select.gd
@@ -0,0 +1,47 @@
+extends Control
+
+var town: Node3D = null
+
+func _ready():
+ # Automatically focus the first item for gamepad accessibility.
+ $HBoxContainer/MiniVan.grab_focus.call_deferred()
+
+func _process(_delta: float):
+ if Input.is_action_just_pressed(&"back"):
+ _on_back_pressed()
+
+
+func _load_scene(car_scene: PackedScene):
+ var car: Node3D = car_scene.instantiate()
+ car.name = "car"
+ town = preload("res://town/town_scene.tscn").instantiate()
+ town.get_node(^"InstancePos").add_child(car)
+ town.get_node(^"Spedometer").car_body = car.get_child(0)
+ town.get_node(^"Back").pressed.connect(_on_back_pressed)
+
+ get_parent().add_child(town)
+ hide()
+
+
+func _on_back_pressed():
+ if is_instance_valid(town):
+ # Currently in the town, go back to main menu.
+ town.queue_free()
+ show()
+ # Automatically focus the first item for gamepad accessibility.
+ $HBoxContainer/MiniVan.grab_focus.call_deferred()
+ else:
+ # In main menu, exit the game.
+ get_tree().quit()
+
+
+func _on_mini_van_pressed():
+ _load_scene(preload("res://vehicles/car_base.tscn"))
+
+
+func _on_trailer_truck_pressed():
+ _load_scene(preload("res://vehicles/trailer_truck.tscn"))
+
+
+func _on_tow_truck_pressed():
+ _load_scene(preload("res://vehicles/tow_truck.tscn"))
diff --git a/car_select/car_select.tscn b/car_select/car_select.tscn
new file mode 100644
index 0000000..4732971
--- /dev/null
+++ b/car_select/car_select.tscn
@@ -0,0 +1,80 @@
+[gd_scene load_steps=6 format=3 uid="uid://ckvqraq6j1okh"]
+
+[ext_resource type="Script" path="res://car_select/car_select.gd" id="1"]
+[ext_resource type="Texture2D" uid="uid://bh7b4n4lg1uqt" path="res://car_select/choose_van.png" id="2"]
+[ext_resource type="Texture2D" uid="uid://hvkcmpdq1t0k" path="res://car_select/choose_trailer.png" id="3"]
+[ext_resource type="Texture2D" uid="uid://de7itkxhl0u28" path="res://car_select/choose_tow.png" id="4"]
+
+[sub_resource type="FontVariation" id="FontVariation_hqcvw"]
+variation_embolden = 1.0
+variation_transform = Transform2D(1, 0.2, 0, 1, 0, 0)
+spacing_glyph = -1
+spacing_space = 4
+
+[node name="CarSelect" type="Control"]
+layout_mode = 3
+anchors_preset = 8
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = -512.0
+offset_top = -300.0
+offset_right = 512.0
+offset_bottom = 300.0
+grow_horizontal = 2
+grow_vertical = 2
+size_flags_horizontal = 2
+size_flags_vertical = 2
+script = ExtResource("1")
+
+[node name="HBoxContainer" type="HBoxContainer" parent="."]
+layout_mode = 0
+anchor_top = 0.5
+anchor_right = 1.0
+anchor_bottom = 0.5
+grow_horizontal = 2
+grow_vertical = 2
+alignment = 1
+
+[node name="MiniVan" type="Button" parent="HBoxContainer"]
+layout_mode = 2
+size_flags_horizontal = 6
+size_flags_vertical = 4
+icon = ExtResource("2")
+
+[node name="TrailerTruck" type="Button" parent="HBoxContainer"]
+layout_mode = 2
+size_flags_horizontal = 6
+size_flags_vertical = 4
+icon = ExtResource("3")
+
+[node name="TowTruck" type="Button" parent="HBoxContainer"]
+layout_mode = 2
+size_flags_horizontal = 6
+size_flags_vertical = 4
+icon = ExtResource("4")
+
+[node name="Label" type="Label" parent="."]
+layout_mode = 0
+anchor_left = 0.5
+anchor_right = 0.5
+offset_left = -180.0
+offset_top = 32.0
+offset_right = 180.0
+offset_bottom = 123.0
+grow_horizontal = 2
+theme_override_colors/font_color = Color(0.494118, 0.858824, 0.960784, 1)
+theme_override_colors/font_shadow_color = Color(0, 0.25098, 1, 0.12549)
+theme_override_colors/font_outline_color = Color(0.105882, 0.278431, 0.47451, 1)
+theme_override_constants/shadow_offset_x = 6
+theme_override_constants/shadow_offset_y = 6
+theme_override_constants/outline_size = 38
+theme_override_constants/shadow_outline_size = 38
+theme_override_fonts/font = SubResource("FontVariation_hqcvw")
+theme_override_font_sizes/font_size = 64
+text = "Truck Town"
+
+[connection signal="pressed" from="HBoxContainer/MiniVan" to="." method="_on_mini_van_pressed"]
+[connection signal="pressed" from="HBoxContainer/TrailerTruck" to="." method="_on_trailer_truck_pressed"]
+[connection signal="pressed" from="HBoxContainer/TowTruck" to="." method="_on_tow_truck_pressed"]
diff --git a/car_select/choose_tow.png b/car_select/choose_tow.png
new file mode 100644
index 0000000..f4060d0
Binary files /dev/null and b/car_select/choose_tow.png differ
diff --git a/car_select/choose_tow.png.import b/car_select/choose_tow.png.import
new file mode 100644
index 0000000..0224a39
--- /dev/null
+++ b/car_select/choose_tow.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://de7itkxhl0u28"
+path="res://.godot/imported/choose_tow.png-e1d5f4ba7eb707eed82d65f6944c644a.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://car_select/choose_tow.png"
+dest_files=["res://.godot/imported/choose_tow.png-e1d5f4ba7eb707eed82d65f6944c644a.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/car_select/choose_trailer.png b/car_select/choose_trailer.png
new file mode 100644
index 0000000..c5a036f
Binary files /dev/null and b/car_select/choose_trailer.png differ
diff --git a/car_select/choose_trailer.png.import b/car_select/choose_trailer.png.import
new file mode 100644
index 0000000..ba3b1a3
--- /dev/null
+++ b/car_select/choose_trailer.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://hvkcmpdq1t0k"
+path="res://.godot/imported/choose_trailer.png-42b178b0fc9d742f9f23bb1d9fdfc9a7.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://car_select/choose_trailer.png"
+dest_files=["res://.godot/imported/choose_trailer.png-42b178b0fc9d742f9f23bb1d9fdfc9a7.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/car_select/choose_van.png b/car_select/choose_van.png
new file mode 100644
index 0000000..e6ab1da
Binary files /dev/null and b/car_select/choose_van.png differ
diff --git a/car_select/choose_van.png.import b/car_select/choose_van.png.import
new file mode 100644
index 0000000..a627ecb
--- /dev/null
+++ b/car_select/choose_van.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bh7b4n4lg1uqt"
+path="res://.godot/imported/choose_van.png-a2669a1a5e1faa5c8245c7e87ce8c490.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://car_select/choose_van.png"
+dest_files=["res://.godot/imported/choose_van.png-a2669a1a5e1faa5c8245c7e87ce8c490.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/icon.webp b/icon.webp
new file mode 100644
index 0000000..f6aae78
Binary files /dev/null and b/icon.webp differ
diff --git a/icon.webp.import b/icon.webp.import
new file mode 100644
index 0000000..cc29159
--- /dev/null
+++ b/icon.webp.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://brwp8bimc75uu"
+path="res://.godot/imported/icon.webp-e94f9a68b0f625a567a797079e4d325f.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://icon.webp"
+dest_files=["res://.godot/imported/icon.webp-e94f9a68b0f625a567a797079e4d325f.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/node_3d.tscn b/node_3d.tscn
new file mode 100644
index 0000000..429da8e
--- /dev/null
+++ b/node_3d.tscn
@@ -0,0 +1,8 @@
+[gd_scene format=3 uid="uid://cnxuru6kiplw6"]
+
+[node name="Node3D" type="Node3D"]
+
+[node name="CSGBox3D" type="CSGBox3D" parent="."]
+
+[node name="Camera3D" type="Camera3D" parent="."]
+transform = Transform3D(0.866582, -0.139038, 0.479274, -0.0571974, 0.926401, 0.372169, -0.495746, -0.349928, 0.79485, 1.0281, 1.06217, 2.31513)
diff --git a/project.godot b/project.godot
index 4fca659..e1c7494 100644
--- a/project.godot
+++ b/project.godot
@@ -10,11 +10,156 @@ config_version=5
[application]
-config/name="TestProject"
-run/main_scene="res://node_3d.tscn"
+config/name="Truck Town"
+config/description="This is a demo implementing different types of trucks of
+varying complexity using vehicle physics."
+config/tags=PackedStringArray("3d", "demo", "official", "physics", "vehicle")
+run/main_scene="res://car_select/car_select.tscn"
config/features=PackedStringArray("4.2")
-config/icon="res://icon.png"
+config/icon="res://icon.webp"
+
+[display]
+
+window/stretch/mode="canvas_items"
+window/stretch/aspect="expand"
+
+[input]
+
+ui_accept={
+"deadzone": 0.2,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":32,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194309,"key_label":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":0,"pressure":0.0,"pressed":false,"script":null)
+]
+}
+ui_select={
+"deadzone": 0.2,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":32,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194309,"key_label":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":3,"pressure":0.0,"pressed":false,"script":null)
+]
+}
+ui_cancel={
+"deadzone": 0.2,
+"events": [Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":1,"pressure":0.0,"pressed":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194305,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
+}
+ui_focus_next={
+"deadzone": 0.2,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194306,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
+}
+ui_focus_prev={
+"deadzone": 0.2,
+"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":0,"physical_keycode":4194306,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
+}
+ui_left={
+"deadzone": 0.2,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194319,"key_label":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":14,"pressure":0.0,"pressed":false,"script":null)
+, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":0,"axis_value":-1.0,"script":null)
+]
+}
+ui_right={
+"deadzone": 0.2,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194321,"key_label":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":15,"pressure":0.0,"pressed":false,"script":null)
+, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":0,"axis_value":1.0,"script":null)
+]
+}
+ui_up={
+"deadzone": 0.2,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194320,"key_label":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":12,"pressure":0.0,"pressed":false,"script":null)
+, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":1,"axis_value":-1.0,"script":null)
+]
+}
+ui_down={
+"deadzone": 0.2,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194322,"key_label":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":13,"pressure":0.0,"pressed":false,"script":null)
+, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":1,"axis_value":1.0,"script":null)
+]
+}
+ui_page_up={
+"deadzone": 0.2,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194323,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
+}
+ui_page_down={
+"deadzone": 0.2,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194324,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
+}
+accelerate={
+"deadzone": 0.2,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194320,"key_label":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":0,"pressure":0.0,"pressed":false,"script":null)
+, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":5,"axis_value":1.0,"script":null)
+]
+}
+reverse={
+"deadzone": 0.2,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":0,"echo":false,"script":null)
+, 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":4194322,"key_label":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":2,"pressure":0.0,"pressed":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":1,"pressure":0.0,"pressed":false,"script":null)
+, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":4,"axis_value":1.0,"script":null)
+]
+}
+turn_left={
+"deadzone": 0.2,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194319,"key_label":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":0,"axis_value":-1.0,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":13,"pressure":0.0,"pressed":false,"script":null)
+]
+}
+turn_right={
+"deadzone": 0.2,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194321,"key_label":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":0,"axis_value":1.0,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":14,"pressure":0.0,"pressed":false,"script":null)
+]
+}
+cycle_speedometer_unit={
+"deadzone": 0.2,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":85,"key_label":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":4,"pressure":0.0,"pressed":false,"script":null)
+]
+}
+back={
+"deadzone": 0.2,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194305,"key_label":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":11,"pressure":0.0,"pressed":false,"script":null)
+]
+}
+cycle_camera={
+"deadzone": 0.2,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":67,"key_label":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":3,"pressure":0.0,"pressed":false,"script":null)
+]
+}
+
+[physics]
+
+common/physics_ticks_per_second=120
[rendering]
-environment/default_environment="res://default_env.tres"
+textures/vram_compression/import_etc2_astc=true
+lights_and_shadows/directional_shadow/size=8192
+lights_and_shadows/directional_shadow/soft_shadow_filter_quality=3
+lights_and_shadows/directional_shadow/soft_shadow_filter_quality.mobile=1
+textures/default_filters/anisotropic_filtering_level=4
+textures/default_filters/texture_mipmap_bias=-0.5
+textures/decals/filter=1
+environment/defaults/default_clear_color=Color(0.133333, 0.133333, 0.133333, 1)
+anti_aliasing/quality/msaa_3d=2
+anti_aliasing/quality/use_debanding=true
+anti_aliasing/quality/msaa_3d.mobile=0
+scaling_3d/scale.mobile=0.67
diff --git a/screenshots/.gdignore b/screenshots/.gdignore
new file mode 100644
index 0000000..e69de29
diff --git a/screenshots/tow.png b/screenshots/tow.png
new file mode 100644
index 0000000..3a3859c
Binary files /dev/null and b/screenshots/tow.png differ
diff --git a/screenshots/trailer.png b/screenshots/trailer.png
new file mode 100644
index 0000000..cef43d9
Binary files /dev/null and b/screenshots/trailer.png differ
diff --git a/screenshots/truck_town.webp b/screenshots/truck_town.webp
new file mode 100644
index 0000000..39e003f
Binary files /dev/null and b/screenshots/truck_town.webp differ
diff --git a/spedometer.gd b/spedometer.gd
new file mode 100644
index 0000000..7b77e84
--- /dev/null
+++ b/spedometer.gd
@@ -0,0 +1,39 @@
+extends Button
+
+enum SpeedUnit {
+ METERS_PER_SECOND,
+ KILOMETERS_PER_HOUR,
+ MILES_PER_HOUR,
+}
+
+@export var speed_unit: SpeedUnit = SpeedUnit.METERS_PER_SECOND
+
+var gradient := Gradient.new()
+var car_body: VehicleBody3D
+
+
+func _ready():
+ # The start and end points (offset 0.0 and 1.0) are already defined in a Gradient
+ # resource on creation. Override their colors and only create one new point.
+ gradient.set_color(0, Color(0.7, 0.9, 1.0))
+ gradient.set_color(1, Color(1.0, 0.3, 0.1))
+ gradient.add_point(0.2, Color(1.0, 1.0, 1.0))
+
+
+func _process(_delta):
+ var speed := car_body.linear_velocity.length()
+ if speed_unit == SpeedUnit.METERS_PER_SECOND:
+ text = "Speed: " + ("%.1f" % speed) + " m/s"
+ elif speed_unit == SpeedUnit.KILOMETERS_PER_HOUR:
+ speed *= 3.6
+ text = "Speed: " + ("%.0f" % speed) + " km/h"
+ else: # speed_unit == SpeedUnit.MILES_PER_HOUR:
+ speed *= 2.23694
+ text = "Speed: " + ("%.0f" % speed) + " mph"
+
+ # Change speedometer color depending on speed in m/s (regardless of unit).
+ add_theme_color_override("font_color", gradient.sample(remap(car_body.linear_velocity.length(), 0.0, 30.0, 0.0, 1.0)))
+
+
+func _on_spedometer_pressed():
+ speed_unit = ((speed_unit + 1) % SpeedUnit.size()) as SpeedUnit
diff --git a/town/materials/cement.tres b/town/materials/cement.tres
new file mode 100644
index 0000000..b7c62f3
--- /dev/null
+++ b/town/materials/cement.tres
@@ -0,0 +1,10 @@
+[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://bdjiubscxkdn6"]
+
+[ext_resource type="Texture2D" uid="uid://dkv00eeo3yu2w" path="res://town/materials/cement.webp" id="1_but66"]
+
+[resource]
+resource_name = "Cement"
+albedo_texture = ExtResource("1_but66")
+roughness = 0.8
+uv1_scale = Vector3(2, 2, 2)
+texture_filter = 5
diff --git a/town/materials/cement.webp b/town/materials/cement.webp
new file mode 100644
index 0000000..cd70e21
Binary files /dev/null and b/town/materials/cement.webp differ
diff --git a/town/materials/cement.webp.import b/town/materials/cement.webp.import
new file mode 100644
index 0000000..c0cd93c
--- /dev/null
+++ b/town/materials/cement.webp.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dkv00eeo3yu2w"
+path="res://.godot/imported/cement.webp-a59028ca151ccfb7e6020be6c141b163.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://town/materials/cement.webp"
+dest_files=["res://.godot/imported/cement.webp-a59028ca151ccfb7e6020be6c141b163.ctex"]
+
+[params]
+
+compress/mode=0
+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/town/materials/grass.tres b/town/materials/grass.tres
new file mode 100644
index 0000000..8cafd37
--- /dev/null
+++ b/town/materials/grass.tres
@@ -0,0 +1,10 @@
+[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://c71ovlrgdfif5"]
+
+[ext_resource type="Texture2D" uid="uid://b2g4dq0w72e68" path="res://town/materials/grass.webp" id="1_5bi3i"]
+
+[resource]
+resource_name = "Grass"
+albedo_texture = ExtResource("1_5bi3i")
+roughness = 0.8
+uv1_scale = Vector3(2, 2, 2)
+texture_filter = 5
diff --git a/town/materials/grass.webp b/town/materials/grass.webp
new file mode 100644
index 0000000..cb69392
Binary files /dev/null and b/town/materials/grass.webp differ
diff --git a/town/materials/grass.webp.import b/town/materials/grass.webp.import
new file mode 100644
index 0000000..7b2cd77
--- /dev/null
+++ b/town/materials/grass.webp.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b2g4dq0w72e68"
+path="res://.godot/imported/grass.webp-0ccf2a619a3f121234da585c8abbfdba.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://town/materials/grass.webp"
+dest_files=["res://.godot/imported/grass.webp-0ccf2a619a3f121234da585c8abbfdba.ctex"]
+
+[params]
+
+compress/mode=0
+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/town/town_scene.tscn b/town/town_scene.tscn
new file mode 100644
index 0000000..7c20eea
--- /dev/null
+++ b/town/town_scene.tscn
@@ -0,0 +1,423 @@
+[gd_scene load_steps=38 format=3 uid="uid://d0ygmqpylq0wy"]
+
+[ext_resource type="PackedScene" uid="uid://dfdgytsvtqxwv" path="res://town/truck_town.glb" id="1_x0dmm"]
+[ext_resource type="Script" path="res://spedometer.gd" id="2"]
+[ext_resource type="Texture2D" uid="uid://b2g4dq0w72e68" path="res://town/materials/grass.webp" id="4_cymw0"]
+[ext_resource type="Material" uid="uid://bdjiubscxkdn6" path="res://town/materials/cement.tres" id="5_83ty7"]
+
+[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_2k12y"]
+sky_horizon_color = Color(0.64625, 0.65575, 0.67075, 1)
+ground_horizon_color = Color(0.64625, 0.65575, 0.67075, 1)
+
+[sub_resource type="Sky" id="Sky_1gf0c"]
+sky_material = SubResource("ProceduralSkyMaterial_2k12y")
+
+[sub_resource type="Environment" id="Environment_dauhq"]
+background_mode = 2
+sky = SubResource("Sky_1gf0c")
+tonemap_mode = 2
+tonemap_white = 6.0
+glow_intensity = 0.5
+glow_blend_mode = 1
+fog_enabled = true
+fog_light_color = Color(0.62, 0.6014, 0.6014, 1)
+fog_density = 0.0015
+fog_sky_affect = 0.0
+
+[sub_resource type="InputEventAction" id="InputEventAction_a4722"]
+action = &"cycle_speedometer_unit"
+
+[sub_resource type="Shortcut" id="Shortcut_msvqx"]
+events = [SubResource("InputEventAction_a4722")]
+
+[sub_resource type="Gradient" id="Gradient_jks6h"]
+offsets = PackedFloat32Array(0)
+colors = PackedColorArray(1, 1, 1, 0.25098)
+
+[sub_resource type="GradientTexture2D" id="GradientTexture2D_m8ylb"]
+gradient = SubResource("Gradient_jks6h")
+width = 128
+height = 128
+
+[sub_resource type="Gradient" id="Gradient_1rnu2"]
+offsets = PackedFloat32Array(0.00645161)
+colors = PackedColorArray(1, 0, 0, 0.25098)
+
+[sub_resource type="GradientTexture2D" id="GradientTexture2D_xu6xc"]
+gradient = SubResource("Gradient_1rnu2")
+width = 128
+height = 128
+
+[sub_resource type="BoxMesh" id="BoxMesh_x3c0g"]
+size = Vector3(4096, 1, 4096)
+
+[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_0ud3l"]
+albedo_texture = ExtResource("4_cymw0")
+roughness = 0.8
+uv1_scale = Vector3(128, 64, 1)
+texture_filter = 5
+
+[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_gearx"]
+data = PackedVector3Array(-2048, 0.5, 2048, 2048, 0.5, 2048, -2048, -0.5, 2048, 2048, 0.5, 2048, 2048, -0.5, 2048, -2048, -0.5, 2048, 2048, 0.5, -2048, -2048, 0.5, -2048, 2048, -0.5, -2048, -2048, 0.5, -2048, -2048, -0.5, -2048, 2048, -0.5, -2048, 2048, 0.5, 2048, 2048, 0.5, -2048, 2048, -0.5, 2048, 2048, 0.5, -2048, 2048, -0.5, -2048, 2048, -0.5, 2048, -2048, 0.5, -2048, -2048, 0.5, 2048, -2048, -0.5, -2048, -2048, 0.5, 2048, -2048, -0.5, 2048, -2048, -0.5, -2048, 2048, 0.5, 2048, -2048, 0.5, 2048, 2048, 0.5, -2048, -2048, 0.5, 2048, -2048, 0.5, -2048, 2048, 0.5, -2048, -2048, -0.5, 2048, 2048, -0.5, 2048, -2048, -0.5, -2048, 2048, -0.5, 2048, 2048, -0.5, -2048, -2048, -0.5, -2048)
+
+[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_g7q2f"]
+data = PackedVector3Array(-2048, 0.5, 2048, 2048, 0.5, 2048, -2048, -0.5, 2048, 2048, 0.5, 2048, 2048, -0.5, 2048, -2048, -0.5, 2048, 2048, 0.5, -2048, -2048, 0.5, -2048, 2048, -0.5, -2048, -2048, 0.5, -2048, -2048, -0.5, -2048, 2048, -0.5, -2048, 2048, 0.5, 2048, 2048, 0.5, -2048, 2048, -0.5, 2048, 2048, 0.5, -2048, 2048, -0.5, -2048, 2048, -0.5, 2048, -2048, 0.5, -2048, -2048, 0.5, 2048, -2048, -0.5, -2048, -2048, 0.5, 2048, -2048, -0.5, 2048, -2048, -0.5, -2048, 2048, 0.5, 2048, -2048, 0.5, 2048, 2048, 0.5, -2048, -2048, 0.5, 2048, -2048, 0.5, -2048, 2048, 0.5, -2048, -2048, -0.5, 2048, 2048, -0.5, 2048, -2048, -0.5, -2048, 2048, -0.5, 2048, 2048, -0.5, -2048, -2048, -0.5, -2048)
+
+[sub_resource type="BoxMesh" id="BoxMesh_n528d"]
+size = Vector3(1990, 1, 93.75)
+
+[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_aijyr"]
+albedo_texture = ExtResource("4_cymw0")
+roughness = 0.8
+uv1_scale = Vector3(128, 2, 1)
+texture_filter = 5
+
+[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_mb5rx"]
+data = PackedVector3Array(-995, 0.5, 47.017, 995, 0.5, 47.017, -995, -0.5, 47.017, 995, 0.5, 47.017, 995, -0.5, 47.017, -995, -0.5, 47.017, 995, 0.5, -47.017, -995, 0.5, -47.017, 995, -0.5, -47.017, -995, 0.5, -47.017, -995, -0.5, -47.017, 995, -0.5, -47.017, 995, 0.5, 47.017, 995, 0.5, -47.017, 995, -0.5, 47.017, 995, 0.5, -47.017, 995, -0.5, -47.017, 995, -0.5, 47.017, -995, 0.5, -47.017, -995, 0.5, 47.017, -995, -0.5, -47.017, -995, 0.5, 47.017, -995, -0.5, 47.017, -995, -0.5, -47.017, 995, 0.5, 47.017, -995, 0.5, 47.017, 995, 0.5, -47.017, -995, 0.5, 47.017, -995, 0.5, -47.017, 995, 0.5, -47.017, -995, -0.5, 47.017, 995, -0.5, 47.017, -995, -0.5, -47.017, 995, -0.5, 47.017, 995, -0.5, -47.017, -995, -0.5, -47.017)
+
+[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_3wmyg"]
+data = PackedVector3Array(-995, 0.5, 47.017, 995, 0.5, 47.017, -995, -0.5, 47.017, 995, 0.5, 47.017, 995, -0.5, 47.017, -995, -0.5, 47.017, 995, 0.5, -47.017, -995, 0.5, -47.017, 995, -0.5, -47.017, -995, 0.5, -47.017, -995, -0.5, -47.017, 995, -0.5, -47.017, 995, 0.5, 47.017, 995, 0.5, -47.017, 995, -0.5, 47.017, 995, 0.5, -47.017, 995, -0.5, -47.017, 995, -0.5, 47.017, -995, 0.5, -47.017, -995, 0.5, 47.017, -995, -0.5, -47.017, -995, 0.5, 47.017, -995, -0.5, 47.017, -995, -0.5, -47.017, 995, 0.5, 47.017, -995, 0.5, 47.017, 995, 0.5, -47.017, -995, 0.5, 47.017, -995, 0.5, -47.017, 995, 0.5, -47.017, -995, -0.5, 47.017, 995, -0.5, 47.017, -995, -0.5, -47.017, 995, -0.5, 47.017, 995, -0.5, -47.017, -995, -0.5, -47.017)
+
+[sub_resource type="Curve3D" id="Curve3D_6vskq"]
+_data = {
+"points": PackedVector3Array(0.543398, -0.103395, 1.65241, -0.543398, 0.103395, -1.65241, 3.28336, 5.28308, -55.2298, -0.833012, -0.217682, 2.2701, 0.833012, 0.217682, -2.2701, 3.56751, 6.35417, -60.6377, -0.0791855, 0.892603, 1.8625, 0.0791855, -0.892603, -1.8625, 5.02051, 4.0616, -66.9724, -0.149003, 0.23034, 1.52293, 0.149003, -0.23034, -1.52293, 5.94106, 1.27618, -73.7061, 0.152164, 0.0198116, 0.82222, -0.152164, -0.0198116, -0.82222, 6.24068, 1.29284, -81.1135, 0.709167, -0.00765228, 0.797897, -0.709167, 0.00765228, -0.797897, 1.66464, 0.49591, -92.5504, 1.86497, 0.492211, 1.35976, -1.86497, -0.492211, -1.35976, -5.43053, -0.176876, -98.7249, 3.65234, 0.403153, 0.595093, -3.65234, -0.403153, -0.595093, -14.2107, -2.83686, -102.669, 2.41666, 0.162499, -0.433556, -2.41666, -0.162499, 0.433556, -23.5045, -3.81825, -104.349, 2.69847, 0.0319109, -1.39461, -2.69847, -0.0319109, 1.39461, -32.5873, -4.93983, -102.986, 0, 0, 0, 0, 0, 0, -41.6334, -4.712, -100.865, 0, 0, 0, 0, 0, 0, -46.381, -4.47723, -99.9369, 1.76731, -0.395488, -0.332947, -1.76731, 0.395488, 0.332947, -48.5051, -4.01378, -99.6217, 1.47411, -0.793471, -0.42971, -1.47411, 0.793471, 0.42971, -52.9601, -1.59774, -98.743, 1.40203, -0.0544708, -0.311745, -1.40203, 0.0544708, 0.311745, -57.3469, -0.190034, -97.9515, 1.23469, 0.514086, -0.296593, -1.23469, -0.514086, 0.296593, -61.54, -0.983026, -97.2347, 1.78854, 0.324845, -0.419327, -1.78854, -0.324845, 0.419327, -65.8922, -3.47315, -96.0933, 4.19576, 0.234449, -0.89743, -4.19576, -0.234449, 0.89743, -72.3135, -4.084, -94.5145, 1.25638, 0.000484467, 10.8308, -1.25638, -0.000484467, -10.8308, -85.2469, -4.12423, -100.301, -2.00005, 0.315476, 0.567215, 2.00005, -0.315476, -0.567215, -79.6224, -4.49219, -111.463, -7.05647, 0.0288595, -2.48302, 6.90189, -0.0282273, 2.42863, -62.2289, -4.22628, -112.062, 0.259935, -0.461171, -3.92209, -0.738754, 1.31068, 11.1469, -57.1626, -4.54992, -98.6082, 2.09652, -0.278773, -0.0627518, -2.09652, 0.278773, 0.0627518, -73.0278, -2.4152, -85.6188, 2.88116, -0.17606, -0.0584183, -2.88116, 0.17606, 0.0584183, -83.2919, -2.37169, -84.7517, 3.23965, -0.202814, -1.03859, -3.23965, 0.202814, 1.03859, -101.697, -1.14444, -83.4727, 2.30534, -0.119607, -2.03248, -2.30534, 0.119607, 2.03248, -117.54, 0.480612, -77.5978, 1.62395, -0.460591, -1.66295, -1.62395, 0.460591, 1.66295, -128.78, 2.73801, -72.081, 0.623291, -0.0807109, -1.60843, -0.623291, 0.0807109, 1.60843, -142.737, 4.67136, -61.0967, -0.62944, -0.367424, -3.50014, 0.62944, 0.367424, 3.50014, -144.324, 4.46733, -50.0448, -1.81136, -0.102165, -1.03172, 1.81136, 0.102165, 1.03172, -137.273, 4.46672, -42.9261, -0.912231, -0.160881, -0.155205, 0.912231, 0.160881, 0.155205, -130.732, 4.37322, -42.3592, -1.12225, 0.309475, -0.159954, 1.12225, -0.309475, 0.159954, -127.167, 4.13784, -41.615, -1.44321, 0.289954, -0.16938, 1.44321, -0.289954, 0.16938, -123.841, 2.59092, -41.3764, -1.71183, 0.232457, -0.163383, 1.71183, -0.232457, 0.163383, -119.037, 2.92625, -40.5647, -1.65579, 0.0589757, -0.114311, 1.65579, -0.0589757, 0.114311, -115.158, 1.3437, -40.4409, -1.32726, 0.0452385, -0.0909462, 1.32726, -0.0452385, 0.0909462, -109.915, 2.63164, -39.7556, -1.40851, 0.0955319, -0.112408, 1.40851, -0.0955319, 0.112408, -106.253, 0.993988, -39.5967, -1.74428, 0.116143, -0.0901184, 1.74428, -0.116143, 0.0901184, -98.305, -0.669029, -38.2801, -1.98921, -1.76747, 0.459106, 1.98921, 1.76747, -0.459106, -87.2684, 1.03817, -38.1925, 0, 0, 0, 0, 0, 0, -80.2635, 2.10998, -38.466),
+"tilts": PackedFloat32Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
+}
+point_count = 40
+
+[sub_resource type="TorusMesh" id="TorusMesh_jqadq"]
+inner_radius = 3.5
+outer_radius = 7.0
+
+[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_5qgna"]
+albedo_color = Color(0.215902, 0.215902, 0.215902, 1)
+
+[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_smisc"]
+data = PackedVector3Array(-1.3394, 0, -3.2336, 0, 1.2374, -4.0126, 0, 0, -3.5, -1.3394, 0, -3.2336, -1.5355, 1.2374, -3.7071, 0, 1.2374, -4.0126, -1.5355, 1.2374, -3.7071, 0, 1.75, -5.25, 0, 1.2374, -4.0126, -1.5355, 1.2374, -3.7071, -2.0091, 1.75, -4.8504, 0, 1.75, -5.25, -2.0091, 1.75, -4.8504, 0, 1.2374, -6.4874, 0, 1.75, -5.25, -2.0091, 1.75, -4.8504, -2.4826, 1.2374, -5.9936, 0, 1.2374, -6.4874, -2.4826, 1.2374, -5.9936, 0, 0, -7, 0, 1.2374, -6.4874, -2.4826, 1.2374, -5.9936, -2.6788, 0, -6.4672, 0, 0, -7, -2.6788, 0, -6.4672, 0, -1.2374, -6.4874, 0, 0, -7, -2.6788, 0, -6.4672, -2.4826, -1.2374, -5.9936, 0, -1.2374, -6.4874, -2.4826, -1.2374, -5.9936, 0, -1.75, -5.25, 0, -1.2374, -6.4874, -2.4826, -1.2374, -5.9936, -2.0091, -1.75, -4.8504, 0, -1.75, -5.25, -2.0091, -1.75, -4.8504, 0, -1.2374, -4.0126, 0, -1.75, -5.25, -2.0091, -1.75, -4.8504, -1.5355, -1.2374, -3.7071, 0, -1.2374, -4.0126, -1.5355, -1.2374, -3.7071, 0, 0, -3.5, 0, -1.2374, -4.0126, -1.5355, -1.2374, -3.7071, -1.3394, 0, -3.2336, 0, 0, -3.5, -2.4749, 0, -2.4749, -1.5355, 1.2374, -3.7071, -1.3394, 0, -3.2336, -2.4749, 0, -2.4749, -2.8373, 1.2374, -2.8373, -1.5355, 1.2374, -3.7071, -2.8373, 1.2374, -2.8373, -2.0091, 1.75, -4.8504, -1.5355, 1.2374, -3.7071, -2.8373, 1.2374, -2.8373, -3.7123, 1.75, -3.7123, -2.0091, 1.75, -4.8504, -3.7123, 1.75, -3.7123, -2.4826, 1.2374, -5.9936, -2.0091, 1.75, -4.8504, -3.7123, 1.75, -3.7123, -4.5873, 1.2374, -4.5873, -2.4826, 1.2374, -5.9936, -4.5873, 1.2374, -4.5873, -2.6788, 0, -6.4672, -2.4826, 1.2374, -5.9936, -4.5873, 1.2374, -4.5873, -4.9497, 0, -4.9497, -2.6788, 0, -6.4672, -4.9497, 0, -4.9497, -2.4826, -1.2374, -5.9936, -2.6788, 0, -6.4672, -4.9497, 0, -4.9497, -4.5873, -1.2374, -4.5873, -2.4826, -1.2374, -5.9936, -4.5873, -1.2374, -4.5873, -2.0091, -1.75, -4.8504, -2.4826, -1.2374, -5.9936, -4.5873, -1.2374, -4.5873, -3.7123, -1.75, -3.7123, -2.0091, -1.75, -4.8504, -3.7123, -1.75, -3.7123, -1.5355, -1.2374, -3.7071, -2.0091, -1.75, -4.8504, -3.7123, -1.75, -3.7123, -2.8373, -1.2374, -2.8373, -1.5355, -1.2374, -3.7071, -2.8373, -1.2374, -2.8373, -1.3394, 0, -3.2336, -1.5355, -1.2374, -3.7071, -2.8373, -1.2374, -2.8373, -2.4749, 0, -2.4749, -1.3394, 0, -3.2336, -3.2336, 0, -1.3394, -2.8373, 1.2374, -2.8373, -2.4749, 0, -2.4749, -3.2336, 0, -1.3394, -3.7071, 1.2374, -1.5355, -2.8373, 1.2374, -2.8373, -3.7071, 1.2374, -1.5355, -3.7123, 1.75, -3.7123, -2.8373, 1.2374, -2.8373, -3.7071, 1.2374, -1.5355, -4.8504, 1.75, -2.0091, -3.7123, 1.75, -3.7123, -4.8504, 1.75, -2.0091, -4.5873, 1.2374, -4.5873, -3.7123, 1.75, -3.7123, -4.8504, 1.75, -2.0091, -5.9936, 1.2374, -2.4826, -4.5873, 1.2374, -4.5873, -5.9936, 1.2374, -2.4826, -4.9497, 0, -4.9497, -4.5873, 1.2374, -4.5873, -5.9936, 1.2374, -2.4826, -6.4672, 0, -2.6788, -4.9497, 0, -4.9497, -6.4672, 0, -2.6788, -4.5873, -1.2374, -4.5873, -4.9497, 0, -4.9497, -6.4672, 0, -2.6788, -5.9936, -1.2374, -2.4826, -4.5873, -1.2374, -4.5873, -5.9936, -1.2374, -2.4826, -3.7123, -1.75, -3.7123, -4.5873, -1.2374, -4.5873, -5.9936, -1.2374, -2.4826, -4.8504, -1.75, -2.0091, -3.7123, -1.75, -3.7123, -4.8504, -1.75, -2.0091, -2.8373, -1.2374, -2.8373, -3.7123, -1.75, -3.7123, -4.8504, -1.75, -2.0091, -3.7071, -1.2374, -1.5355, -2.8373, -1.2374, -2.8373, -3.7071, -1.2374, -1.5355, -2.4749, 0, -2.4749, -2.8373, -1.2374, -2.8373, -3.7071, -1.2374, -1.5355, -3.2336, 0, -1.3394, -2.4749, 0, -2.4749, -3.5, 0, 0, -3.7071, 1.2374, -1.5355, -3.2336, 0, -1.3394, -3.5, 0, 0, -4.0126, 1.2374, 0, -3.7071, 1.2374, -1.5355, -4.0126, 1.2374, 0, -4.8504, 1.75, -2.0091, -3.7071, 1.2374, -1.5355, -4.0126, 1.2374, 0, -5.25, 1.75, 0, -4.8504, 1.75, -2.0091, -5.25, 1.75, 0, -5.9936, 1.2374, -2.4826, -4.8504, 1.75, -2.0091, -5.25, 1.75, 0, -6.4874, 1.2374, 0, -5.9936, 1.2374, -2.4826, -6.4874, 1.2374, 0, -6.4672, 0, -2.6788, -5.9936, 1.2374, -2.4826, -6.4874, 1.2374, 0, -7, 0, 0, -6.4672, 0, -2.6788, -7, 0, 0, -5.9936, -1.2374, -2.4826, -6.4672, 0, -2.6788, -7, 0, 0, -6.4874, -1.2374, 0, -5.9936, -1.2374, -2.4826, -6.4874, -1.2374, 0, -4.8504, -1.75, -2.0091, -5.9936, -1.2374, -2.4826, -6.4874, -1.2374, 0, -5.25, -1.75, 0, -4.8504, -1.75, -2.0091, -5.25, -1.75, 0, -3.7071, -1.2374, -1.5355, -4.8504, -1.75, -2.0091, -5.25, -1.75, 0, -4.0126, -1.2374, 0, -3.7071, -1.2374, -1.5355, -4.0126, -1.2374, 0, -3.2336, 0, -1.3394, -3.7071, -1.2374, -1.5355, -4.0126, -1.2374, 0, -3.5, 0, 0, -3.2336, 0, -1.3394, -3.2336, 0, 1.3394, -4.0126, 1.2374, 0, -3.5, 0, 0, -3.2336, 0, 1.3394, -3.7071, 1.2374, 1.5355, -4.0126, 1.2374, 0, -3.7071, 1.2374, 1.5355, -5.25, 1.75, 0, -4.0126, 1.2374, 0, -3.7071, 1.2374, 1.5355, -4.8504, 1.75, 2.0091, -5.25, 1.75, 0, -4.8504, 1.75, 2.0091, -6.4874, 1.2374, 0, -5.25, 1.75, 0, -4.8504, 1.75, 2.0091, -5.9936, 1.2374, 2.4826, -6.4874, 1.2374, 0, -5.9936, 1.2374, 2.4826, -7, 0, 0, -6.4874, 1.2374, 0, -5.9936, 1.2374, 2.4826, -6.4672, 0, 2.6788, -7, 0, 0, -6.4672, 0, 2.6788, -6.4874, -1.2374, 0, -7, 0, 0, -6.4672, 0, 2.6788, -5.9936, -1.2374, 2.4826, -6.4874, -1.2374, 0, -5.9936, -1.2374, 2.4826, -5.25, -1.75, 0, -6.4874, -1.2374, 0, -5.9936, -1.2374, 2.4826, -4.8504, -1.75, 2.0091, -5.25, -1.75, 0, -4.8504, -1.75, 2.0091, -4.0126, -1.2374, 0, -5.25, -1.75, 0, -4.8504, -1.75, 2.0091, -3.7071, -1.2374, 1.5355, -4.0126, -1.2374, 0, -3.7071, -1.2374, 1.5355, -3.5, 0, 0, -4.0126, -1.2374, 0, -3.7071, -1.2374, 1.5355, -3.2336, 0, 1.3394, -3.5, 0, 0, -2.4749, 0, 2.4749, -3.7071, 1.2374, 1.5355, -3.2336, 0, 1.3394, -2.4749, 0, 2.4749, -2.8373, 1.2374, 2.8373, -3.7071, 1.2374, 1.5355, -2.8373, 1.2374, 2.8373, -4.8504, 1.75, 2.0091, -3.7071, 1.2374, 1.5355, -2.8373, 1.2374, 2.8373, -3.7123, 1.75, 3.7123, -4.8504, 1.75, 2.0091, -3.7123, 1.75, 3.7123, -5.9936, 1.2374, 2.4826, -4.8504, 1.75, 2.0091, -3.7123, 1.75, 3.7123, -4.5873, 1.2374, 4.5873, -5.9936, 1.2374, 2.4826, -4.5873, 1.2374, 4.5873, -6.4672, 0, 2.6788, -5.9936, 1.2374, 2.4826, -4.5873, 1.2374, 4.5873, -4.9497, 0, 4.9497, -6.4672, 0, 2.6788, -4.9497, 0, 4.9497, -5.9936, -1.2374, 2.4826, -6.4672, 0, 2.6788, -4.9497, 0, 4.9497, -4.5873, -1.2374, 4.5873, -5.9936, -1.2374, 2.4826, -4.5873, -1.2374, 4.5873, -4.8504, -1.75, 2.0091, -5.9936, -1.2374, 2.4826, -4.5873, -1.2374, 4.5873, -3.7123, -1.75, 3.7123, -4.8504, -1.75, 2.0091, -3.7123, -1.75, 3.7123, -3.7071, -1.2374, 1.5355, -4.8504, -1.75, 2.0091, -3.7123, -1.75, 3.7123, -2.8373, -1.2374, 2.8373, -3.7071, -1.2374, 1.5355, -2.8373, -1.2374, 2.8373, -3.2336, 0, 1.3394, -3.7071, -1.2374, 1.5355, -2.8373, -1.2374, 2.8373, -2.4749, 0, 2.4749, -3.2336, 0, 1.3394, -1.3394, 0, 3.2336, -2.8373, 1.2374, 2.8373, -2.4749, 0, 2.4749, -1.3394, 0, 3.2336, -1.5355, 1.2374, 3.7071, -2.8373, 1.2374, 2.8373, -1.5355, 1.2374, 3.7071, -3.7123, 1.75, 3.7123, -2.8373, 1.2374, 2.8373, -1.5355, 1.2374, 3.7071, -2.0091, 1.75, 4.8504, -3.7123, 1.75, 3.7123, -2.0091, 1.75, 4.8504, -4.5873, 1.2374, 4.5873, -3.7123, 1.75, 3.7123, -2.0091, 1.75, 4.8504, -2.4826, 1.2374, 5.9936, -4.5873, 1.2374, 4.5873, -2.4826, 1.2374, 5.9936, -4.9497, 0, 4.9497, -4.5873, 1.2374, 4.5873, -2.4826, 1.2374, 5.9936, -2.6788, 0, 6.4672, -4.9497, 0, 4.9497, -2.6788, 0, 6.4672, -4.5873, -1.2374, 4.5873, -4.9497, 0, 4.9497, -2.6788, 0, 6.4672, -2.4826, -1.2374, 5.9936, -4.5873, -1.2374, 4.5873, -2.4826, -1.2374, 5.9936, -3.7123, -1.75, 3.7123, -4.5873, -1.2374, 4.5873, -2.4826, -1.2374, 5.9936, -2.0091, -1.75, 4.8504, -3.7123, -1.75, 3.7123, -2.0091, -1.75, 4.8504, -2.8373, -1.2374, 2.8373, -3.7123, -1.75, 3.7123, -2.0091, -1.75, 4.8504, -1.5355, -1.2374, 3.7071, -2.8373, -1.2374, 2.8373, -1.5355, -1.2374, 3.7071, -2.4749, 0, 2.4749, -2.8373, -1.2374, 2.8373, -1.5355, -1.2374, 3.7071, -1.3394, 0, 3.2336, -2.4749, 0, 2.4749, 0, 0, 3.5, -1.5355, 1.2374, 3.7071, -1.3394, 0, 3.2336, 0, 0, 3.5, 0, 1.2374, 4.0126, -1.5355, 1.2374, 3.7071, 0, 1.2374, 4.0126, -2.0091, 1.75, 4.8504, -1.5355, 1.2374, 3.7071, 0, 1.2374, 4.0126, 0, 1.75, 5.25, -2.0091, 1.75, 4.8504, 0, 1.75, 5.25, -2.4826, 1.2374, 5.9936, -2.0091, 1.75, 4.8504, 0, 1.75, 5.25, 0, 1.2374, 6.4874, -2.4826, 1.2374, 5.9936, 0, 1.2374, 6.4874, -2.6788, 0, 6.4672, -2.4826, 1.2374, 5.9936, 0, 1.2374, 6.4874, 0, 0, 7, -2.6788, 0, 6.4672, 0, 0, 7, -2.4826, -1.2374, 5.9936, -2.6788, 0, 6.4672, 0, 0, 7, 0, -1.2374, 6.4874, -2.4826, -1.2374, 5.9936, 0, -1.2374, 6.4874, -2.0091, -1.75, 4.8504, -2.4826, -1.2374, 5.9936, 0, -1.2374, 6.4874, 0, -1.75, 5.25, -2.0091, -1.75, 4.8504, 0, -1.75, 5.25, -1.5355, -1.2374, 3.7071, -2.0091, -1.75, 4.8504, 0, -1.75, 5.25, 0, -1.2374, 4.0126, -1.5355, -1.2374, 3.7071, 0, -1.2374, 4.0126, -1.3394, 0, 3.2336, -1.5355, -1.2374, 3.7071, 0, -1.2374, 4.0126, 0, 0, 3.5, -1.3394, 0, 3.2336, 1.3394, 0, 3.2336, 0, 1.2374, 4.0126, 0, 0, 3.5, 1.3394, 0, 3.2336, 1.5355, 1.2374, 3.7071, 0, 1.2374, 4.0126, 1.5355, 1.2374, 3.7071, 0, 1.75, 5.25, 0, 1.2374, 4.0126, 1.5355, 1.2374, 3.7071, 2.0091, 1.75, 4.8504, 0, 1.75, 5.25, 2.0091, 1.75, 4.8504, 0, 1.2374, 6.4874, 0, 1.75, 5.25, 2.0091, 1.75, 4.8504, 2.4826, 1.2374, 5.9936, 0, 1.2374, 6.4874, 2.4826, 1.2374, 5.9936, 0, 0, 7, 0, 1.2374, 6.4874, 2.4826, 1.2374, 5.9936, 2.6788, 0, 6.4672, 0, 0, 7, 2.6788, 0, 6.4672, 0, -1.2374, 6.4874, 0, 0, 7, 2.6788, 0, 6.4672, 2.4826, -1.2374, 5.9936, 0, -1.2374, 6.4874, 2.4826, -1.2374, 5.9936, 0, -1.75, 5.25, 0, -1.2374, 6.4874, 2.4826, -1.2374, 5.9936, 2.0091, -1.75, 4.8504, 0, -1.75, 5.25, 2.0091, -1.75, 4.8504, 0, -1.2374, 4.0126, 0, -1.75, 5.25, 2.0091, -1.75, 4.8504, 1.5355, -1.2374, 3.7071, 0, -1.2374, 4.0126, 1.5355, -1.2374, 3.7071, 0, 0, 3.5, 0, -1.2374, 4.0126, 1.5355, -1.2374, 3.7071, 1.3394, 0, 3.2336, 0, 0, 3.5, 2.4749, 0, 2.4749, 1.5355, 1.2374, 3.7071, 1.3394, 0, 3.2336, 2.4749, 0, 2.4749, 2.8373, 1.2374, 2.8373, 1.5355, 1.2374, 3.7071, 2.8373, 1.2374, 2.8373, 2.0091, 1.75, 4.8504, 1.5355, 1.2374, 3.7071, 2.8373, 1.2374, 2.8373, 3.7123, 1.75, 3.7123, 2.0091, 1.75, 4.8504, 3.7123, 1.75, 3.7123, 2.4826, 1.2374, 5.9936, 2.0091, 1.75, 4.8504, 3.7123, 1.75, 3.7123, 4.5873, 1.2374, 4.5873, 2.4826, 1.2374, 5.9936, 4.5873, 1.2374, 4.5873, 2.6788, 0, 6.4672, 2.4826, 1.2374, 5.9936, 4.5873, 1.2374, 4.5873, 4.9497, 0, 4.9497, 2.6788, 0, 6.4672, 4.9497, 0, 4.9497, 2.4826, -1.2374, 5.9936, 2.6788, 0, 6.4672, 4.9497, 0, 4.9497, 4.5873, -1.2374, 4.5873, 2.4826, -1.2374, 5.9936, 4.5873, -1.2374, 4.5873, 2.0091, -1.75, 4.8504, 2.4826, -1.2374, 5.9936, 4.5873, -1.2374, 4.5873, 3.7123, -1.75, 3.7123, 2.0091, -1.75, 4.8504, 3.7123, -1.75, 3.7123, 1.5355, -1.2374, 3.7071, 2.0091, -1.75, 4.8504, 3.7123, -1.75, 3.7123, 2.8373, -1.2374, 2.8373, 1.5355, -1.2374, 3.7071, 2.8373, -1.2374, 2.8373, 1.3394, 0, 3.2336, 1.5355, -1.2374, 3.7071, 2.8373, -1.2374, 2.8373, 2.4749, 0, 2.4749, 1.3394, 0, 3.2336, 3.2336, 0, 1.3394, 2.8373, 1.2374, 2.8373, 2.4749, 0, 2.4749, 3.2336, 0, 1.3394, 3.7071, 1.2374, 1.5355, 2.8373, 1.2374, 2.8373, 3.7071, 1.2374, 1.5355, 3.7123, 1.75, 3.7123, 2.8373, 1.2374, 2.8373, 3.7071, 1.2374, 1.5355, 4.8504, 1.75, 2.0091, 3.7123, 1.75, 3.7123, 4.8504, 1.75, 2.0091, 4.5873, 1.2374, 4.5873, 3.7123, 1.75, 3.7123, 4.8504, 1.75, 2.0091, 5.9936, 1.2374, 2.4826, 4.5873, 1.2374, 4.5873, 5.9936, 1.2374, 2.4826, 4.9497, 0, 4.9497, 4.5873, 1.2374, 4.5873, 5.9936, 1.2374, 2.4826, 6.4672, 0, 2.6788, 4.9497, 0, 4.9497, 6.4672, 0, 2.6788, 4.5873, -1.2374, 4.5873, 4.9497, 0, 4.9497, 6.4672, 0, 2.6788, 5.9936, -1.2374, 2.4826, 4.5873, -1.2374, 4.5873, 5.9936, -1.2374, 2.4826, 3.7123, -1.75, 3.7123, 4.5873, -1.2374, 4.5873, 5.9936, -1.2374, 2.4826, 4.8504, -1.75, 2.0091, 3.7123, -1.75, 3.7123, 4.8504, -1.75, 2.0091, 2.8373, -1.2374, 2.8373, 3.7123, -1.75, 3.7123, 4.8504, -1.75, 2.0091, 3.7071, -1.2374, 1.5355, 2.8373, -1.2374, 2.8373, 3.7071, -1.2374, 1.5355, 2.4749, 0, 2.4749, 2.8373, -1.2374, 2.8373, 3.7071, -1.2374, 1.5355, 3.2336, 0, 1.3394, 2.4749, 0, 2.4749, 3.5, 0, 0, 3.7071, 1.2374, 1.5355, 3.2336, 0, 1.3394, 3.5, 0, 0, 4.0126, 1.2374, 0, 3.7071, 1.2374, 1.5355, 4.0126, 1.2374, 0, 4.8504, 1.75, 2.0091, 3.7071, 1.2374, 1.5355, 4.0126, 1.2374, 0, 5.25, 1.75, 0, 4.8504, 1.75, 2.0091, 5.25, 1.75, 0, 5.9936, 1.2374, 2.4826, 4.8504, 1.75, 2.0091, 5.25, 1.75, 0, 6.4874, 1.2374, 0, 5.9936, 1.2374, 2.4826, 6.4874, 1.2374, 0, 6.4672, 0, 2.6788, 5.9936, 1.2374, 2.4826, 6.4874, 1.2374, 0, 7, 0, 0, 6.4672, 0, 2.6788, 7, 0, 0, 5.9936, -1.2374, 2.4826, 6.4672, 0, 2.6788, 7, 0, 0, 6.4874, -1.2374, 0, 5.9936, -1.2374, 2.4826, 6.4874, -1.2374, 0, 4.8504, -1.75, 2.0091, 5.9936, -1.2374, 2.4826, 6.4874, -1.2374, 0, 5.25, -1.75, 0, 4.8504, -1.75, 2.0091, 5.25, -1.75, 0, 3.7071, -1.2374, 1.5355, 4.8504, -1.75, 2.0091, 5.25, -1.75, 0, 4.0126, -1.2374, 0, 3.7071, -1.2374, 1.5355, 4.0126, -1.2374, 0, 3.2336, 0, 1.3394, 3.7071, -1.2374, 1.5355, 4.0126, -1.2374, 0, 3.5, 0, 0, 3.2336, 0, 1.3394, 3.2336, 0, -1.3394, 4.0126, 1.2374, 0, 3.5, 0, 0, 3.2336, 0, -1.3394, 3.7071, 1.2374, -1.5355, 4.0126, 1.2374, 0, 3.7071, 1.2374, -1.5355, 5.25, 1.75, 0, 4.0126, 1.2374, 0, 3.7071, 1.2374, -1.5355, 4.8504, 1.75, -2.0091, 5.25, 1.75, 0, 4.8504, 1.75, -2.0091, 6.4874, 1.2374, 0, 5.25, 1.75, 0, 4.8504, 1.75, -2.0091, 5.9936, 1.2374, -2.4826, 6.4874, 1.2374, 0, 5.9936, 1.2374, -2.4826, 7, 0, 0, 6.4874, 1.2374, 0, 5.9936, 1.2374, -2.4826, 6.4672, 0, -2.6788, 7, 0, 0, 6.4672, 0, -2.6788, 6.4874, -1.2374, 0, 7, 0, 0, 6.4672, 0, -2.6788, 5.9936, -1.2374, -2.4826, 6.4874, -1.2374, 0, 5.9936, -1.2374, -2.4826, 5.25, -1.75, 0, 6.4874, -1.2374, 0, 5.9936, -1.2374, -2.4826, 4.8504, -1.75, -2.0091, 5.25, -1.75, 0, 4.8504, -1.75, -2.0091, 4.0126, -1.2374, 0, 5.25, -1.75, 0, 4.8504, -1.75, -2.0091, 3.7071, -1.2374, -1.5355, 4.0126, -1.2374, 0, 3.7071, -1.2374, -1.5355, 3.5, 0, 0, 4.0126, -1.2374, 0, 3.7071, -1.2374, -1.5355, 3.2336, 0, -1.3394, 3.5, 0, 0, 2.4749, 0, -2.4749, 3.7071, 1.2374, -1.5355, 3.2336, 0, -1.3394, 2.4749, 0, -2.4749, 2.8373, 1.2374, -2.8373, 3.7071, 1.2374, -1.5355, 2.8373, 1.2374, -2.8373, 4.8504, 1.75, -2.0091, 3.7071, 1.2374, -1.5355, 2.8373, 1.2374, -2.8373, 3.7123, 1.75, -3.7123, 4.8504, 1.75, -2.0091, 3.7123, 1.75, -3.7123, 5.9936, 1.2374, -2.4826, 4.8504, 1.75, -2.0091, 3.7123, 1.75, -3.7123, 4.5873, 1.2374, -4.5873, 5.9936, 1.2374, -2.4826, 4.5873, 1.2374, -4.5873, 6.4672, 0, -2.6788, 5.9936, 1.2374, -2.4826, 4.5873, 1.2374, -4.5873, 4.9497, 0, -4.9497, 6.4672, 0, -2.6788, 4.9497, 0, -4.9497, 5.9936, -1.2374, -2.4826, 6.4672, 0, -2.6788, 4.9497, 0, -4.9497, 4.5873, -1.2374, -4.5873, 5.9936, -1.2374, -2.4826, 4.5873, -1.2374, -4.5873, 4.8504, -1.75, -2.0091, 5.9936, -1.2374, -2.4826, 4.5873, -1.2374, -4.5873, 3.7123, -1.75, -3.7123, 4.8504, -1.75, -2.0091, 3.7123, -1.75, -3.7123, 3.7071, -1.2374, -1.5355, 4.8504, -1.75, -2.0091, 3.7123, -1.75, -3.7123, 2.8373, -1.2374, -2.8373, 3.7071, -1.2374, -1.5355, 2.8373, -1.2374, -2.8373, 3.2336, 0, -1.3394, 3.7071, -1.2374, -1.5355, 2.8373, -1.2374, -2.8373, 2.4749, 0, -2.4749, 3.2336, 0, -1.3394, 1.3394, 0, -3.2336, 2.8373, 1.2374, -2.8373, 2.4749, 0, -2.4749, 1.3394, 0, -3.2336, 1.5355, 1.2374, -3.7071, 2.8373, 1.2374, -2.8373, 1.5355, 1.2374, -3.7071, 3.7123, 1.75, -3.7123, 2.8373, 1.2374, -2.8373, 1.5355, 1.2374, -3.7071, 2.0091, 1.75, -4.8504, 3.7123, 1.75, -3.7123, 2.0091, 1.75, -4.8504, 4.5873, 1.2374, -4.5873, 3.7123, 1.75, -3.7123, 2.0091, 1.75, -4.8504, 2.4826, 1.2374, -5.9936, 4.5873, 1.2374, -4.5873, 2.4826, 1.2374, -5.9936, 4.9497, 0, -4.9497, 4.5873, 1.2374, -4.5873, 2.4826, 1.2374, -5.9936, 2.6788, 0, -6.4672, 4.9497, 0, -4.9497, 2.6788, 0, -6.4672, 4.5873, -1.2374, -4.5873, 4.9497, 0, -4.9497, 2.6788, 0, -6.4672, 2.4826, -1.2374, -5.9936, 4.5873, -1.2374, -4.5873, 2.4826, -1.2374, -5.9936, 3.7123, -1.75, -3.7123, 4.5873, -1.2374, -4.5873, 2.4826, -1.2374, -5.9936, 2.0091, -1.75, -4.8504, 3.7123, -1.75, -3.7123, 2.0091, -1.75, -4.8504, 2.8373, -1.2374, -2.8373, 3.7123, -1.75, -3.7123, 2.0091, -1.75, -4.8504, 1.5355, -1.2374, -3.7071, 2.8373, -1.2374, -2.8373, 1.5355, -1.2374, -3.7071, 2.4749, 0, -2.4749, 2.8373, -1.2374, -2.8373, 1.5355, -1.2374, -3.7071, 1.3394, 0, -3.2336, 2.4749, 0, -2.4749, 0, 0, -3.5, 1.5355, 1.2374, -3.7071, 1.3394, 0, -3.2336, 0, 0, -3.5, 0, 1.2374, -4.0126, 1.5355, 1.2374, -3.7071, 0, 1.2374, -4.0126, 2.0091, 1.75, -4.8504, 1.5355, 1.2374, -3.7071, 0, 1.2374, -4.0126, 0, 1.75, -5.25, 2.0091, 1.75, -4.8504, 0, 1.75, -5.25, 2.4826, 1.2374, -5.9936, 2.0091, 1.75, -4.8504, 0, 1.75, -5.25, 0, 1.2374, -6.4874, 2.4826, 1.2374, -5.9936, 0, 1.2374, -6.4874, 2.6788, 0, -6.4672, 2.4826, 1.2374, -5.9936, 0, 1.2374, -6.4874, 0, 0, -7, 2.6788, 0, -6.4672, 0, 0, -7, 2.4826, -1.2374, -5.9936, 2.6788, 0, -6.4672, 0, 0, -7, 0, -1.2374, -6.4874, 2.4826, -1.2374, -5.9936, 0, -1.2374, -6.4874, 2.0091, -1.75, -4.8504, 2.4826, -1.2374, -5.9936, 0, -1.2374, -6.4874, 0, -1.75, -5.25, 2.0091, -1.75, -4.8504, 0, -1.75, -5.25, 1.5355, -1.2374, -3.7071, 2.0091, -1.75, -4.8504, 0, -1.75, -5.25, 0, -1.2374, -4.0126, 1.5355, -1.2374, -3.7071, 0, -1.2374, -4.0126, 1.3394, 0, -3.2336, 1.5355, -1.2374, -3.7071, 0, -1.2374, -4.0126, 0, 0, -3.5, 1.3394, 0, -3.2336)
+
+[sub_resource type="PrismMesh" id="PrismMesh_xglk4"]
+left_to_right = 0.0
+size = Vector3(4, 2, 4)
+
+[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_kamav"]
+albedo_color = Color(1, 0.666667, 0.176471, 1)
+
+[sub_resource type="PrismMesh" id="PrismMesh_3jdtn"]
+left_to_right = 0.0
+size = Vector3(4, 1, 4)
+
+[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_ykfn8"]
+data = PackedVector3Array(-2, 1, 2, 2, -1, 2, -2, -1, 2, -2, 1, -2, -2, -1, -2, 2, -1, -2, -2, 1, 2, -2, 1, -2, 2, -1, 2, -2, 1, -2, 2, -1, -2, 2, -1, 2, -2, 1, -2, -2, 1, 2, -2, -1, -2, -2, 1, 2, -2, -1, 2, -2, -1, -2, -2, -1, 2, 2, -1, 2, -2, -1, -2, 2, -1, 2, 2, -1, -2, -2, -1, -2)
+
+[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_4aeas"]
+data = PackedVector3Array(-2, 0.5, 2, 2, -0.5, 2, -2, -0.5, 2, -2, 0.5, -2, -2, -0.5, -2, 2, -0.5, -2, -2, 0.5, 2, -2, 0.5, -2, 2, -0.5, 2, -2, 0.5, -2, 2, -0.5, -2, 2, -0.5, 2, -2, 0.5, -2, -2, 0.5, 2, -2, -0.5, -2, -2, 0.5, 2, -2, -0.5, 2, -2, -0.5, -2, -2, -0.5, 2, 2, -0.5, 2, -2, -0.5, -2, 2, -0.5, 2, 2, -0.5, -2, -2, -0.5, -2)
+
+[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_e2cnd"]
+data = PackedVector3Array(-2, 1, 2, 2, -1, 2, -2, -1, 2, -2, 1, -2, -2, -1, -2, 2, -1, -2, -2, 1, 2, -2, 1, -2, 2, -1, 2, -2, 1, -2, 2, -1, -2, 2, -1, 2, -2, 1, -2, -2, 1, 2, -2, -1, -2, -2, 1, 2, -2, -1, 2, -2, -1, -2, -2, -1, 2, 2, -1, 2, -2, -1, -2, 2, -1, 2, 2, -1, -2, -2, -1, -2)
+
+[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_8ool4"]
+data = PackedVector3Array(-2, 0.5, 2, 2, -0.5, 2, -2, -0.5, 2, -2, 0.5, -2, -2, -0.5, -2, 2, -0.5, -2, -2, 0.5, 2, -2, 0.5, -2, 2, -0.5, 2, -2, 0.5, -2, 2, -0.5, -2, 2, -0.5, 2, -2, 0.5, -2, -2, 0.5, 2, -2, -0.5, -2, -2, 0.5, 2, -2, -0.5, 2, -2, -0.5, -2, -2, -0.5, 2, 2, -0.5, 2, -2, -0.5, -2, 2, -0.5, 2, 2, -0.5, -2, -2, -0.5, -2)
+
+[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_ru3pl"]
+data = PackedVector3Array(-2, 1, 2, 2, -1, 2, -2, -1, 2, -2, 1, -2, -2, -1, -2, 2, -1, -2, -2, 1, 2, -2, 1, -2, 2, -1, 2, -2, 1, -2, 2, -1, -2, 2, -1, 2, -2, 1, -2, -2, 1, 2, -2, -1, -2, -2, 1, 2, -2, -1, 2, -2, -1, -2, -2, -1, 2, 2, -1, 2, -2, -1, -2, 2, -1, 2, 2, -1, -2, -2, -1, -2)
+
+[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_stwys"]
+data = PackedVector3Array(-2, 0.5, 2, 2, -0.5, 2, -2, -0.5, 2, -2, 0.5, -2, -2, -0.5, -2, 2, -0.5, -2, -2, 0.5, 2, -2, 0.5, -2, 2, -0.5, 2, -2, 0.5, -2, 2, -0.5, -2, 2, -0.5, 2, -2, 0.5, -2, -2, 0.5, 2, -2, -0.5, -2, -2, 0.5, 2, -2, -0.5, 2, -2, -0.5, -2, -2, -0.5, 2, 2, -0.5, 2, -2, -0.5, -2, 2, -0.5, 2, 2, -0.5, -2, -2, -0.5, -2)
+
+[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_04800"]
+data = PackedVector3Array(-2, 1, 2, 2, -1, 2, -2, -1, 2, -2, 1, -2, -2, -1, -2, 2, -1, -2, -2, 1, 2, -2, 1, -2, 2, -1, 2, -2, 1, -2, 2, -1, -2, 2, -1, 2, -2, 1, -2, -2, 1, 2, -2, -1, -2, -2, 1, 2, -2, -1, 2, -2, -1, -2, -2, -1, 2, 2, -1, 2, -2, -1, -2, 2, -1, 2, 2, -1, -2, -2, -1, -2)
+
+[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_248tl"]
+data = PackedVector3Array(-2, 0.5, 2, 2, -0.5, 2, -2, -0.5, 2, -2, 0.5, -2, -2, -0.5, -2, 2, -0.5, -2, -2, 0.5, 2, -2, 0.5, -2, 2, -0.5, 2, -2, 0.5, -2, 2, -0.5, -2, 2, -0.5, 2, -2, 0.5, -2, -2, 0.5, 2, -2, -0.5, -2, -2, 0.5, 2, -2, -0.5, 2, -2, -0.5, -2, -2, -0.5, 2, 2, -0.5, 2, -2, -0.5, -2, 2, -0.5, 2, 2, -0.5, -2, -2, -0.5, -2)
+
+[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_nhcrh"]
+data = PackedVector3Array(-2, 1, 2, 2, -1, 2, -2, -1, 2, -2, 1, -2, -2, -1, -2, 2, -1, -2, -2, 1, 2, -2, 1, -2, 2, -1, 2, -2, 1, -2, 2, -1, -2, 2, -1, 2, -2, 1, -2, -2, 1, 2, -2, -1, -2, -2, 1, 2, -2, -1, 2, -2, -1, -2, -2, -1, 2, 2, -1, 2, -2, -1, -2, 2, -1, 2, 2, -1, -2, -2, -1, -2)
+
+[node name="TownScene" type="Node3D"]
+
+[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
+environment = SubResource("Environment_dauhq")
+
+[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
+transform = Transform3D(0.506501, -0.706305, -0.494561, -4.63342e-08, -0.573577, 0.819152, -0.862239, -0.414901, -0.290517, 11.0084, 12.3453, -31.3148)
+light_energy = 1.45
+shadow_enabled = true
+shadow_bias = 0.015
+shadow_blur = 1.5
+directional_shadow_mode = 0
+directional_shadow_max_distance = 80.0
+
+[node name="TruckTown" parent="." instance=ExtResource("1_x0dmm")]
+
+[node name="InstancePos" type="Marker3D" parent="."]
+transform = Transform3D(1.31134e-07, 0, -1, 0, 1, 0, 1, 0, 1.31134e-07, 8, 3.36405, -16)
+
+[node name="Spedometer" type="Button" parent="."]
+custom_minimum_size = Vector2(140, 40)
+anchors_preset = 3
+anchor_left = 1.0
+anchor_top = 1.0
+anchor_right = 1.0
+anchor_bottom = 1.0
+offset_left = -164.0
+offset_top = -64.0
+offset_right = -24.0
+offset_bottom = -24.0
+grow_horizontal = 0
+grow_vertical = 0
+focus_mode = 0
+action_mode = 0
+shortcut = SubResource("Shortcut_msvqx")
+shortcut_feedback = false
+shortcut_in_tooltip = false
+text = "Speed: ???"
+script = ExtResource("2")
+
+[node name="Back" type="Button" parent="."]
+offset_left = 24.0
+offset_top = 24.0
+offset_right = 92.0
+offset_bottom = 56.0
+text = "« Back"
+
+[node name="TouchTurnLeft" type="Control" parent="."]
+layout_mode = 3
+anchors_preset = 4
+anchor_top = 0.5
+anchor_bottom = 0.5
+grow_vertical = 2
+
+[node name="TurnLeft" type="TouchScreenButton" parent="TouchTurnLeft"]
+modulate = Color(1, 1, 1, 0)
+position = Vector2(0, -256)
+scale = Vector2(2.5, 4)
+texture_normal = SubResource("GradientTexture2D_m8ylb")
+texture_pressed = SubResource("GradientTexture2D_xu6xc")
+passby_press = true
+action = "turn_left"
+visibility_mode = 1
+
+[node name="TouchReverse" type="Control" parent="."]
+layout_mode = 3
+anchors_preset = 8
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+grow_horizontal = 2
+grow_vertical = 2
+
+[node name="Reverse" type="TouchScreenButton" parent="TouchReverse"]
+modulate = Color(1, 1, 1, 0)
+position = Vector2(-256, -256)
+scale = Vector2(4, 4)
+texture_normal = SubResource("GradientTexture2D_m8ylb")
+texture_pressed = SubResource("GradientTexture2D_xu6xc")
+passby_press = true
+action = "reverse"
+visibility_mode = 1
+
+[node name="TouchTurnRight" type="Control" parent="."]
+layout_mode = 3
+anchors_preset = 6
+anchor_left = 1.0
+anchor_top = 0.5
+anchor_right = 1.0
+anchor_bottom = 0.5
+grow_horizontal = 0
+grow_vertical = 2
+
+[node name="TurnRight" type="TouchScreenButton" parent="TouchTurnRight"]
+modulate = Color(1, 1, 1, 0)
+position = Vector2(-320, -256)
+scale = Vector2(2.5, 4)
+texture_normal = SubResource("GradientTexture2D_m8ylb")
+texture_pressed = SubResource("GradientTexture2D_xu6xc")
+passby_press = true
+action = "turn_right"
+visibility_mode = 1
+
+[node name="Ground" type="MeshInstance3D" parent="."]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -29, -5.86, 2064.6)
+cast_shadow = 0
+mesh = SubResource("BoxMesh_x3c0g")
+surface_material_override/0 = SubResource("StandardMaterial3D_0ud3l")
+
+[node name="StaticBody3D" type="StaticBody3D" parent="Ground"]
+
+[node name="CollisionShape3D" type="CollisionShape3D" parent="Ground/StaticBody3D"]
+shape = SubResource("ConcavePolygonShape3D_gearx")
+
+[node name="Ground2" type="MeshInstance3D" parent="."]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -29, -5.86, -2125.13)
+cast_shadow = 0
+mesh = SubResource("BoxMesh_x3c0g")
+surface_material_override/0 = SubResource("StandardMaterial3D_0ud3l")
+
+[node name="StaticBody3D" type="StaticBody3D" parent="Ground2"]
+
+[node name="CollisionShape3D" type="CollisionShape3D" parent="Ground2/StaticBody3D"]
+shape = SubResource("ConcavePolygonShape3D_g7q2f")
+
+[node name="Ground3" type="MeshInstance3D" parent="."]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1082.19, -5.86, -30.267)
+cast_shadow = 0
+mesh = SubResource("BoxMesh_n528d")
+surface_material_override/0 = SubResource("StandardMaterial3D_aijyr")
+
+[node name="StaticBody3D" type="StaticBody3D" parent="Ground3"]
+
+[node name="CollisionShape3D" type="CollisionShape3D" parent="Ground3/StaticBody3D"]
+shape = SubResource("ConcavePolygonShape3D_mb5rx")
+
+[node name="Ground4" type="MeshInstance3D" parent="."]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1027.31, -5.86, -30.248)
+cast_shadow = 0
+mesh = SubResource("BoxMesh_n528d")
+surface_material_override/0 = SubResource("StandardMaterial3D_aijyr")
+
+[node name="StaticBody3D" type="StaticBody3D" parent="Ground4"]
+
+[node name="CollisionShape3D" type="CollisionShape3D" parent="Ground4/StaticBody3D"]
+shape = SubResource("ConcavePolygonShape3D_3wmyg")
+
+[node name="Racetrack" type="CSGPolygon3D" parent="."]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.225899, 0)
+calculate_tangents = false
+use_collision = true
+polygon = PackedVector2Array(-1.5, 1, -1.4, 1, -1.3, 0.9, -1.2, 0.9, 2.2, 0.9, 2.3, 0.9, 2.4, 1, 2.5, 1, 2.4, 0.9, 2, 0.1, 2, 0, 1.9, -0.1, -0.9, -0.1, -1, 0, -1, 0.1, -1.4, 0.9)
+mode = 2
+path_node = NodePath("Path3D")
+path_interval_type = 0
+path_interval = 0.5
+path_simplify_angle = 2.0
+path_rotation = 1
+path_local = true
+path_continuous_u = true
+path_u_distance = 20.0
+path_joined = false
+smooth_faces = true
+material = ExtResource("5_83ty7")
+
+[node name="Path3D" type="Path3D" parent="Racetrack"]
+curve = SubResource("Curve3D_6vskq")
+
+[node name="HugeTire" type="MeshInstance3D" parent="Racetrack"]
+transform = Transform3D(-4.29291e-08, 0.982104, 0.188341, -1, -4.37114e-08, -6.16922e-16, 8.23266e-09, -0.188341, 0.982104, -43, -2.7741, -101.158)
+mesh = SubResource("TorusMesh_jqadq")
+skeleton = NodePath("../..")
+surface_material_override/0 = SubResource("StandardMaterial3D_5qgna")
+metadata/_edit_group_ = true
+
+[node name="StaticBody3D" type="StaticBody3D" parent="Racetrack/HugeTire"]
+
+[node name="CollisionShape3D" type="CollisionShape3D" parent="Racetrack/HugeTire/StaticBody3D"]
+shape = SubResource("ConcavePolygonShape3D_smisc")
+
+[node name="Ramp" type="MeshInstance3D" parent="Racetrack"]
+transform = Transform3D(0.984808, 0, 0.173648, 0, 1, 0, -0.173648, 0, 0.984808, -36, -4.13, -106.8)
+mesh = SubResource("PrismMesh_xglk4")
+surface_material_override/0 = SubResource("StandardMaterial3D_kamav")
+metadata/_edit_group_ = true
+
+[node name="RampStart" type="MeshInstance3D" parent="Racetrack/Ramp"]
+transform = Transform3D(1, 0, 1.49012e-08, 0, 1, 0, -1.49012e-08, 0, 1, 1, -0.5, 7.62939e-06)
+mesh = SubResource("PrismMesh_3jdtn")
+skeleton = NodePath("../..")
+surface_material_override/0 = SubResource("StandardMaterial3D_kamav")
+
+[node name="StaticBody3D" type="StaticBody3D" parent="Racetrack/Ramp"]
+
+[node name="CollisionShape3D" type="CollisionShape3D" parent="Racetrack/Ramp/StaticBody3D"]
+shape = SubResource("ConcavePolygonShape3D_ykfn8")
+
+[node name="Ramp2" type="MeshInstance3D" parent="Racetrack"]
+transform = Transform3D(0.984808, 0, 0.173648, 0, 1, 0, -0.173648, 0, 0.984808, -34.366, -4.13, -98.138)
+mesh = SubResource("PrismMesh_xglk4")
+surface_material_override/0 = SubResource("StandardMaterial3D_kamav")
+metadata/_edit_group_ = true
+
+[node name="RampStart" type="MeshInstance3D" parent="Racetrack/Ramp2"]
+transform = Transform3D(1, 0, 1.49012e-08, 0, 1, 0, -1.49012e-08, 0, 1, 1, -0.5, 7.62939e-06)
+mesh = SubResource("PrismMesh_3jdtn")
+skeleton = NodePath("../..")
+surface_material_override/0 = SubResource("StandardMaterial3D_kamav")
+
+[node name="StaticBody3D" type="StaticBody3D" parent="Racetrack/Ramp2/RampStart"]
+
+[node name="CollisionShape3D" type="CollisionShape3D" parent="Racetrack/Ramp2/RampStart/StaticBody3D"]
+shape = SubResource("ConcavePolygonShape3D_4aeas")
+
+[node name="StaticBody3D" type="StaticBody3D" parent="Racetrack/Ramp2"]
+
+[node name="CollisionShape3D" type="CollisionShape3D" parent="Racetrack/Ramp2/StaticBody3D"]
+transform = Transform3D(1, 0, 1.49012e-08, 0, 1, 0, -1.49012e-08, 0, 1, 0, 0, 0)
+shape = SubResource("ConcavePolygonShape3D_e2cnd")
+
+[node name="Ramp3" type="MeshInstance3D" parent="Racetrack"]
+transform = Transform3D(0.984808, 0, 0.173648, 0, 1, 0, -0.173648, 0, 0.984808, -80.4018, -4.13, -101.536)
+mesh = SubResource("PrismMesh_xglk4")
+surface_material_override/0 = SubResource("StandardMaterial3D_kamav")
+metadata/_edit_group_ = true
+
+[node name="RampStart" type="MeshInstance3D" parent="Racetrack/Ramp3"]
+transform = Transform3D(1, 0, 1.49012e-08, 0, 1, 0, -1.49012e-08, 0, 1, 1, -0.5, 7.62939e-06)
+mesh = SubResource("PrismMesh_3jdtn")
+skeleton = NodePath("../..")
+surface_material_override/0 = SubResource("StandardMaterial3D_kamav")
+
+[node name="StaticBody3D" type="StaticBody3D" parent="Racetrack/Ramp3/RampStart"]
+
+[node name="CollisionShape3D" type="CollisionShape3D" parent="Racetrack/Ramp3/RampStart/StaticBody3D"]
+shape = SubResource("ConcavePolygonShape3D_8ool4")
+
+[node name="StaticBody3D" type="StaticBody3D" parent="Racetrack/Ramp3"]
+
+[node name="CollisionShape3D" type="CollisionShape3D" parent="Racetrack/Ramp3/StaticBody3D"]
+shape = SubResource("ConcavePolygonShape3D_ru3pl")
+
+[node name="Ramp4" type="MeshInstance3D" parent="Racetrack"]
+transform = Transform3D(-0.984808, 0, -0.173648, 0, 1, 0, 0.173648, 0, -0.984808, -62.2203, -4.13, -104.798)
+mesh = SubResource("PrismMesh_xglk4")
+surface_material_override/0 = SubResource("StandardMaterial3D_kamav")
+metadata/_edit_group_ = true
+
+[node name="RampStart" type="MeshInstance3D" parent="Racetrack/Ramp4"]
+transform = Transform3D(1, 0, 1.49012e-08, 0, 1, 0, -1.49012e-08, 0, 1, 1, -0.5, 7.62939e-06)
+mesh = SubResource("PrismMesh_3jdtn")
+skeleton = NodePath("../..")
+surface_material_override/0 = SubResource("StandardMaterial3D_kamav")
+
+[node name="StaticBody3D" type="StaticBody3D" parent="Racetrack/Ramp4/RampStart"]
+
+[node name="CollisionShape3D" type="CollisionShape3D" parent="Racetrack/Ramp4/RampStart/StaticBody3D"]
+shape = SubResource("ConcavePolygonShape3D_stwys")
+
+[node name="StaticBody3D" type="StaticBody3D" parent="Racetrack/Ramp4"]
+
+[node name="CollisionShape3D" type="CollisionShape3D" parent="Racetrack/Ramp4/StaticBody3D"]
+shape = SubResource("ConcavePolygonShape3D_04800")
+
+[node name="Ramp5" type="MeshInstance3D" parent="Racetrack"]
+transform = Transform3D(-0.984808, 0, -0.173648, 0, 1, 0, 0.173648, 0, -0.984808, -89.0271, -4.13, -100.015)
+mesh = SubResource("PrismMesh_xglk4")
+surface_material_override/0 = SubResource("StandardMaterial3D_kamav")
+metadata/_edit_group_ = true
+
+[node name="RampStart" type="MeshInstance3D" parent="Racetrack/Ramp5"]
+transform = Transform3D(1, 0, 1.49012e-08, 0, 1, 0, -1.49012e-08, 0, 1, 1, -0.5, 7.62939e-06)
+mesh = SubResource("PrismMesh_3jdtn")
+skeleton = NodePath("../..")
+surface_material_override/0 = SubResource("StandardMaterial3D_kamav")
+
+[node name="StaticBody3D" type="StaticBody3D" parent="Racetrack/Ramp5/RampStart"]
+
+[node name="CollisionShape3D" type="CollisionShape3D" parent="Racetrack/Ramp5/RampStart/StaticBody3D"]
+shape = SubResource("ConcavePolygonShape3D_248tl")
+
+[node name="StaticBody3D" type="StaticBody3D" parent="Racetrack/Ramp5"]
+
+[node name="CollisionShape3D" type="CollisionShape3D" parent="Racetrack/Ramp5/StaticBody3D"]
+shape = SubResource("ConcavePolygonShape3D_nhcrh")
+
+[connection signal="pressed" from="Spedometer" to="Spedometer" method="_on_spedometer_pressed"]
diff --git a/town/truck_town.glb b/town/truck_town.glb
new file mode 100644
index 0000000..fa1045d
Binary files /dev/null and b/town/truck_town.glb differ
diff --git a/town/truck_town.glb.import b/town/truck_town.glb.import
new file mode 100644
index 0000000..3582328
--- /dev/null
+++ b/town/truck_town.glb.import
@@ -0,0 +1,97 @@
+[remap]
+
+importer="scene"
+importer_version=1
+type="PackedScene"
+uid="uid://dfdgytsvtqxwv"
+path="res://.godot/imported/truck_town.glb-49b71606091d50bf5665443ce42e43d8.scn"
+
+[deps]
+
+source_file="res://town/truck_town.glb"
+dest_files=["res://.godot/imported/truck_town.glb-49b71606091d50bf5665443ce42e43d8.scn"]
+
+[params]
+
+nodes/root_type="Node3D"
+nodes/root_name="TruckTown"
+nodes/apply_root_scale=true
+nodes/root_scale=1.0
+meshes/ensure_tangents=true
+meshes/generate_lods=false
+meshes/create_shadow_meshes=true
+meshes/light_baking=1
+meshes/lightmap_texel_size=0.2
+meshes/force_disable_compression=false
+skins/use_named_skins=false
+animation/import=false
+animation/fps=30
+animation/trimming=false
+animation/remove_immutable_tracks=true
+import_script/path=""
+_subresources={
+"materials": {
+"grass": {
+"use_external/enabled": true,
+"use_external/path": "res://town/materials/grass.tres"
+},
+"road": {
+"use_external/enabled": true,
+"use_external/path": "res://town/materials/cement.tres"
+}
+},
+"nodes": {
+"PATH:Grass": {
+"generate/physics": true,
+"physics/shape_type": 2
+},
+"PATH:House01": {
+"generate/physics": true,
+"physics/shape_type": 2
+},
+"PATH:House02": {
+"generate/physics": true,
+"physics/shape_type": 2
+},
+"PATH:House03": {
+"generate/physics": true,
+"physics/shape_type": 2
+},
+"PATH:House04": {
+"generate/physics": true,
+"physics/shape_type": 2
+},
+"PATH:House05": {
+"generate/physics": true,
+"physics/shape_type": 2
+},
+"PATH:House06": {
+"generate/physics": true,
+"physics/shape_type": 2
+},
+"PATH:House07": {
+"generate/physics": true,
+"physics/shape_type": 2
+},
+"PATH:House08": {
+"generate/physics": true,
+"physics/shape_type": 2
+},
+"PATH:House09": {
+"generate/physics": true,
+"physics/shape_type": 2
+},
+"PATH:House10": {
+"generate/physics": true,
+"physics/shape_type": 2
+},
+"PATH:Road": {
+"decomposition/advanced": true,
+"decomposition/precision": 10,
+"generate/physics": true,
+"physics/shape_type": 2
+}
+}
+}
+gltf/naming_version=0
+gltf/embedded_image_handling=1
diff --git a/vehicles/blob_shadow.png b/vehicles/blob_shadow.png
new file mode 100644
index 0000000..b10f977
Binary files /dev/null and b/vehicles/blob_shadow.png differ
diff --git a/vehicles/blob_shadow.png.import b/vehicles/blob_shadow.png.import
new file mode 100644
index 0000000..75d4200
--- /dev/null
+++ b/vehicles/blob_shadow.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bju75l2w3r7vq"
+path="res://.godot/imported/blob_shadow.png-543236f87c8fdb7d06671b1460d3917a.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://vehicles/blob_shadow.png"
+dest_files=["res://.godot/imported/blob_shadow.png-543236f87c8fdb7d06671b1460d3917a.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/vehicles/car_base.tscn b/vehicles/car_base.tscn
new file mode 100644
index 0000000..507031a
--- /dev/null
+++ b/vehicles/car_base.tscn
@@ -0,0 +1,191 @@
+[gd_scene load_steps=19 format=3 uid="uid://c1uai3rvx8hul"]
+
+[ext_resource type="Script" path="res://vehicles/vehicle.gd" id="1_r806m"]
+[ext_resource type="Texture2D" uid="uid://d4ostmqwgytk" path="res://vehicles/particle_smoke.png" id="2_1gkvk"]
+[ext_resource type="ArrayMesh" uid="uid://bqrwin8ccgptt" path="res://vehicles/meshes/wheel.res" id="2_3cqaw"]
+[ext_resource type="ArrayMesh" uid="uid://b2xi556mwp7ue" path="res://vehicles/meshes/minivan.res" id="3_cqia8"]
+[ext_resource type="Script" path="res://vehicles/follow_camera.gd" id="4_6igu8"]
+[ext_resource type="AudioStream" uid="uid://cb7wvsd6vygd3" path="res://vehicles/engine.wav" id="5_m8g7o"]
+[ext_resource type="AudioStream" uid="uid://sy2li7u35867" path="res://vehicles/impact_1.wav" id="6_kq567"]
+[ext_resource type="AudioStream" uid="uid://bf0h7s81yr8nj" path="res://vehicles/impact_2.wav" id="7_e8n8v"]
+[ext_resource type="AudioStream" uid="uid://sun2n8a4xapl" path="res://vehicles/impact_3.wav" id="8_mh5uv"]
+[ext_resource type="AudioStream" uid="uid://dpbayeeufya21" path="res://vehicles/impact_4.wav" id="9_bomp1"]
+[ext_resource type="Texture2D" uid="uid://bju75l2w3r7vq" path="res://vehicles/blob_shadow.png" id="11_3ryw5"]
+
+[sub_resource type="PhysicsMaterial" id="PhysicsMaterial_l7i2k"]
+friction = 0.5
+
+[sub_resource type="BoxShape3D" id="BoxShape3D_x74tc"]
+size = Vector3(0.954078, 1, 2.32662)
+
+[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_bpr2q"]
+random_pitch = 1.05
+random_volume_offset_db = 2.0
+streams_count = 4
+stream_0/stream = ExtResource("6_kq567")
+stream_0/weight = 1.0
+stream_1/stream = ExtResource("7_e8n8v")
+stream_1/weight = 1.0
+stream_2/stream = ExtResource("8_mh5uv")
+stream_2/weight = 1.0
+stream_3/stream = ExtResource("9_bomp1")
+stream_3/weight = 1.0
+
+[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_fuuj3"]
+transparency = 1
+shading_mode = 0
+vertex_color_use_as_albedo = true
+albedo_color = Color(0.462745, 0.462745, 0.462745, 0.501961)
+albedo_texture = ExtResource("2_1gkvk")
+billboard_mode = 3
+billboard_keep_scale = true
+particles_anim_h_frames = 1
+particles_anim_v_frames = 1
+particles_anim_loop = false
+proximity_fade_enabled = true
+proximity_fade_distance = 0.5
+
+[sub_resource type="QuadMesh" id="QuadMesh_30wks"]
+material = SubResource("StandardMaterial3D_fuuj3")
+
+[sub_resource type="Curve" id="Curve_4j5vd"]
+_data = [Vector2(0, 0), 0.0, 0.0, 0, 0, Vector2(1, 1), 0.0, 0.0, 0, 0]
+point_count = 2
+
+[sub_resource type="Gradient" id="Gradient_p5xtl"]
+colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 0)
+
+[node name="CarBase" type="Node3D"]
+
+[node name="Body" type="VehicleBody3D" parent="."]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.00169557, 0.222867, -0.0955184)
+center_of_mass_mode = 1
+physics_material_override = SubResource("PhysicsMaterial_l7i2k")
+script = ExtResource("1_r806m")
+
+[node name="Wheel1" type="VehicleWheel3D" parent="Body"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.573678, 0.115169, 1.10416)
+use_as_traction = true
+use_as_steering = true
+wheel_roll_influence = 0.4
+wheel_radius = 0.25
+wheel_friction_slip = 1.0
+suspension_travel = 2.0
+suspension_stiffness = 40.0
+damping_compression = 0.88
+
+[node name="Wheel1" type="MeshInstance3D" parent="Body/Wheel1"]
+layers = 2
+gi_mode = 2
+mesh = ExtResource("2_3cqaw")
+
+[node name="Wheel2" type="VehicleWheel3D" parent="Body"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.573678, 0.115169, -0.783403)
+use_as_traction = true
+wheel_roll_influence = 0.4
+wheel_radius = 0.25
+wheel_friction_slip = 1.0
+suspension_travel = 2.0
+suspension_stiffness = 40.0
+damping_compression = 0.88
+
+[node name="Wheel2" type="MeshInstance3D" parent="Body/Wheel2"]
+layers = 2
+gi_mode = 2
+mesh = ExtResource("2_3cqaw")
+
+[node name="Wheel3" type="VehicleWheel3D" parent="Body"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.573678, 0.115169, 1.10416)
+use_as_traction = true
+use_as_steering = true
+wheel_roll_influence = 0.4
+wheel_radius = 0.25
+wheel_friction_slip = 1.0
+suspension_travel = 2.0
+suspension_stiffness = 40.0
+damping_compression = 0.88
+
+[node name="Wheel3" type="MeshInstance3D" parent="Body/Wheel3"]
+layers = 2
+gi_mode = 2
+mesh = ExtResource("2_3cqaw")
+
+[node name="Wheel4" type="VehicleWheel3D" parent="Body"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.573678, 0.115169, -0.783403)
+use_as_traction = true
+wheel_roll_influence = 0.4
+wheel_radius = 0.25
+wheel_friction_slip = 1.0
+suspension_travel = 2.0
+suspension_stiffness = 40.0
+damping_compression = 0.88
+
+[node name="Wheel4" type="MeshInstance3D" parent="Body/Wheel4"]
+layers = 2
+gi_mode = 2
+mesh = ExtResource("2_3cqaw")
+
+[node name="Body" type="MeshInstance3D" parent="Body"]
+layers = 2
+gi_mode = 2
+mesh = ExtResource("3_cqia8")
+
+[node name="CollisionShape3D" type="CollisionShape3D" parent="Body"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.588269, 0.0774262)
+shape = SubResource("BoxShape3D_x74tc")
+
+[node name="CameraBase" type="Node3D" parent="Body"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.97449, 0)
+
+[node name="Camera3D" type="Camera3D" parent="Body/CameraBase"]
+transform = Transform3D(-1, 2.11495e-08, -8.48259e-08, 0, 0.970296, 0.241922, 8.74228e-08, 0.241922, -0.970296, 0, 2.032, -4.394)
+fov = 74.0
+near = 0.1
+script = ExtResource("4_6igu8")
+min_distance = 4.0
+max_distance = 5.0
+height = 1.25
+
+[node name="EngineSound" type="AudioStreamPlayer3D" parent="Body"]
+stream = ExtResource("5_m8g7o")
+pitch_scale = 0.05
+autoplay = true
+attenuation_filter_cutoff_hz = 20500.0
+
+[node name="ImpactSound" type="AudioStreamPlayer3D" parent="Body"]
+stream = SubResource("AudioStreamRandomizer_bpr2q")
+volume_db = -9.0
+max_polyphony = 3
+attenuation_filter_cutoff_hz = 20500.0
+
+[node name="CPUParticles3D" type="CPUParticles3D" parent="Body"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.201696, -0.022867, -1.10448)
+amount = 125
+lifetime = 1.25
+mesh = SubResource("QuadMesh_30wks")
+direction = Vector3(0, 1, -0.5)
+gravity = Vector3(0, 0, 0)
+initial_velocity_min = 1.0
+initial_velocity_max = 1.0
+damping_min = 0.05
+damping_max = 0.05
+angle_max = 360.0
+scale_amount_curve = SubResource("Curve_4j5vd")
+color_ramp = SubResource("Gradient_p5xtl")
+
+[node name="BlobShadow" type="Decal" parent="Body"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.05)
+size = Vector3(1.6, 4, 3)
+texture_albedo = ExtResource("11_3ryw5")
+upper_fade = 2.0
+lower_fade = 1.0
+cull_mask = 1048573
+
+[node name="AudioListener3D" type="AudioListener3D" parent="Body"]
+current = true
+
+[node name="InteriorCameraPosition" type="Marker3D" parent="Body"]
+transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 0.9, 0.3)
+
+[node name="TopDownCameraPosition" type="Marker3D" parent="Body"]
+transform = Transform3D(-1, 8.74228e-08, 0, 3.82137e-15, 4.37114e-08, 1, 8.74228e-08, 1, -4.37114e-08, 0.00169557, 15.7771, 0.0955178)
diff --git a/vehicles/engine.wav b/vehicles/engine.wav
new file mode 100644
index 0000000..cad6a1a
Binary files /dev/null and b/vehicles/engine.wav differ
diff --git a/vehicles/engine.wav.import b/vehicles/engine.wav.import
new file mode 100644
index 0000000..9570a82
--- /dev/null
+++ b/vehicles/engine.wav.import
@@ -0,0 +1,24 @@
+[remap]
+
+importer="wav"
+type="AudioStreamWAV"
+uid="uid://cb7wvsd6vygd3"
+path="res://.godot/imported/engine.wav-d6b28d3271a4c3acd03d9445eeff7cb3.sample"
+
+[deps]
+
+source_file="res://vehicles/engine.wav"
+dest_files=["res://.godot/imported/engine.wav-d6b28d3271a4c3acd03d9445eeff7cb3.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=2
+edit/loop_begin=0
+edit/loop_end=-1
+compress/mode=0
diff --git a/vehicles/follow_camera.gd b/vehicles/follow_camera.gd
new file mode 100644
index 0000000..8fcf749
--- /dev/null
+++ b/vehicles/follow_camera.gd
@@ -0,0 +1,91 @@
+extends Camera3D
+
+# Higher values cause the field of view to increase more at high speeds.
+const FOV_SPEED_FACTOR = 60
+
+# Higher values cause the field of view to adapt to speed changes faster.
+const FOV_SMOOTH_FACTOR = 0.2
+
+# Don't change FOV if moving below this speed. This prevents shadows from flickering when driving slowly.
+const FOV_CHANGE_MIN_SPEED = 0.05
+
+@export var min_distance := 2.0
+@export var max_distance := 4.0
+@export var angle_v_adjust := 0.0
+@export var height := 1.5
+
+var camera_type := CameraType.EXTERIOR
+
+var initial_transform := transform
+
+var base_fov := fov
+
+# The field of view to smoothly interpolate to.
+var desired_fov := fov
+
+# Position on the last physics frame (used to measure speed).
+@onready var previous_position := global_position
+
+enum CameraType {
+ EXTERIOR,
+ INTERIOR,
+ TOP_DOWN,
+ MAX, # Represents the size of the CameraType enum.
+}
+
+func _ready():
+ update_camera()
+
+
+func _input(event):
+ if event.is_action_pressed(&"cycle_camera"):
+ camera_type = wrapi(camera_type + 1, 0, CameraType.MAX) as CameraType
+ update_camera()
+
+
+func _physics_process(_delta):
+ if camera_type == CameraType.EXTERIOR:
+ var target: Vector3 = get_parent().global_transform.origin
+ var pos := global_transform.origin
+
+ var from_target := pos - target
+
+ # Check ranges.
+ if from_target.length() < min_distance:
+ from_target = from_target.normalized() * min_distance
+ elif from_target.length() > max_distance:
+ from_target = from_target.normalized() * max_distance
+
+ from_target.y = height
+
+ pos = target + from_target
+
+ look_at_from_position(pos, target, Vector3.UP)
+ elif camera_type == CameraType.TOP_DOWN:
+ position.x = get_parent().global_transform.origin.x
+ position.z = get_parent().global_transform.origin.z
+ # Force rotation to prevent camera from being slanted after switching cameras while on a slope.
+ rotation_degrees = Vector3(270, 180, 0)
+
+ # Dynamic field of view based on car speed, with smoothing to prevent sudden changes on impact.
+ desired_fov = clamp(base_fov + (abs(global_position.length() - previous_position.length()) - FOV_CHANGE_MIN_SPEED) * FOV_SPEED_FACTOR, base_fov, 100)
+ fov = lerpf(fov, desired_fov, FOV_SMOOTH_FACTOR)
+
+ # Turn a little up or down
+ transform.basis = Basis(transform.basis[0], deg_to_rad(angle_v_adjust)) * transform.basis
+
+ previous_position = global_position
+
+
+func update_camera():
+ match camera_type:
+ CameraType.EXTERIOR:
+ transform = initial_transform
+ CameraType.INTERIOR:
+ global_transform = get_node(^"../../InteriorCameraPosition").global_transform
+ CameraType.TOP_DOWN:
+ global_transform = get_node(^"../../TopDownCameraPosition").global_transform
+
+ # This detaches the camera transform from the parent spatial node, but only
+ # for exterior and top-down cameras.
+ set_as_top_level(camera_type != CameraType.INTERIOR)
diff --git a/vehicles/impact.wav.import b/vehicles/impact.wav.import
new file mode 100644
index 0000000..bf6771c
--- /dev/null
+++ b/vehicles/impact.wav.import
@@ -0,0 +1,24 @@
+[remap]
+
+importer="wav"
+type="AudioStreamWAV"
+uid="uid://biwk66ryub3f1"
+path="res://.godot/imported/impact.wav-0e789bd7903e20aed8bed8918b465ad1.sample"
+
+[deps]
+
+source_file="res://vehicles/impact.wav"
+dest_files=["res://.godot/imported/impact.wav-0e789bd7903e20aed8bed8918b465ad1.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=0
diff --git a/vehicles/impact_1.wav b/vehicles/impact_1.wav
new file mode 100644
index 0000000..7985683
Binary files /dev/null and b/vehicles/impact_1.wav differ
diff --git a/vehicles/impact_1.wav.import b/vehicles/impact_1.wav.import
new file mode 100644
index 0000000..7a7e330
--- /dev/null
+++ b/vehicles/impact_1.wav.import
@@ -0,0 +1,24 @@
+[remap]
+
+importer="wav"
+type="AudioStreamWAV"
+uid="uid://sy2li7u35867"
+path="res://.godot/imported/impact_1.wav-b48c755a0f8f9c75d26b0f9cb15d1f4a.sample"
+
+[deps]
+
+source_file="res://vehicles/impact_1.wav"
+dest_files=["res://.godot/imported/impact_1.wav-b48c755a0f8f9c75d26b0f9cb15d1f4a.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=0
diff --git a/vehicles/impact_2.wav b/vehicles/impact_2.wav
new file mode 100644
index 0000000..2437de5
Binary files /dev/null and b/vehicles/impact_2.wav differ
diff --git a/vehicles/impact_2.wav.import b/vehicles/impact_2.wav.import
new file mode 100644
index 0000000..a4bdef8
--- /dev/null
+++ b/vehicles/impact_2.wav.import
@@ -0,0 +1,24 @@
+[remap]
+
+importer="wav"
+type="AudioStreamWAV"
+uid="uid://bf0h7s81yr8nj"
+path="res://.godot/imported/impact_2.wav-89ae4713c6333e6bda6389fc5bf000d9.sample"
+
+[deps]
+
+source_file="res://vehicles/impact_2.wav"
+dest_files=["res://.godot/imported/impact_2.wav-89ae4713c6333e6bda6389fc5bf000d9.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=0
diff --git a/vehicles/impact_3.wav b/vehicles/impact_3.wav
new file mode 100644
index 0000000..0e83aa7
Binary files /dev/null and b/vehicles/impact_3.wav differ
diff --git a/vehicles/impact_3.wav.import b/vehicles/impact_3.wav.import
new file mode 100644
index 0000000..3a4926f
--- /dev/null
+++ b/vehicles/impact_3.wav.import
@@ -0,0 +1,24 @@
+[remap]
+
+importer="wav"
+type="AudioStreamWAV"
+uid="uid://sun2n8a4xapl"
+path="res://.godot/imported/impact_3.wav-42b62d7e38b905503470ffc8bf41b3bd.sample"
+
+[deps]
+
+source_file="res://vehicles/impact_3.wav"
+dest_files=["res://.godot/imported/impact_3.wav-42b62d7e38b905503470ffc8bf41b3bd.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=0
diff --git a/vehicles/impact_4.wav b/vehicles/impact_4.wav
new file mode 100644
index 0000000..4a12073
Binary files /dev/null and b/vehicles/impact_4.wav differ
diff --git a/vehicles/impact_4.wav.import b/vehicles/impact_4.wav.import
new file mode 100644
index 0000000..f5cf3fb
--- /dev/null
+++ b/vehicles/impact_4.wav.import
@@ -0,0 +1,24 @@
+[remap]
+
+importer="wav"
+type="AudioStreamWAV"
+uid="uid://dpbayeeufya21"
+path="res://.godot/imported/impact_4.wav-eeff21d9a916250609ae682428d6f122.sample"
+
+[deps]
+
+source_file="res://vehicles/impact_4.wav"
+dest_files=["res://.godot/imported/impact_4.wav-eeff21d9a916250609ae682428d6f122.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=0
diff --git a/vehicles/meshes/meshes.glb b/vehicles/meshes/meshes.glb
new file mode 100644
index 0000000..41c5b36
Binary files /dev/null and b/vehicles/meshes/meshes.glb differ
diff --git a/vehicles/meshes/meshes.glb.import b/vehicles/meshes/meshes.glb.import
new file mode 100644
index 0000000..1789566
--- /dev/null
+++ b/vehicles/meshes/meshes.glb.import
@@ -0,0 +1,105 @@
+[remap]
+
+importer="scene"
+importer_version=1
+type="PackedScene"
+uid="uid://e8iojcfvf11q"
+path="res://.godot/imported/meshes.glb-030ff425937f3e98d423cb5cef7ede3d.scn"
+
+[deps]
+
+source_file="res://vehicles/meshes/meshes.glb"
+dest_files=["res://.godot/imported/meshes.glb-030ff425937f3e98d423cb5cef7ede3d.scn"]
+
+[params]
+
+nodes/root_type="Node3D"
+nodes/root_name="Scene Root"
+nodes/apply_root_scale=true
+nodes/root_scale=1.0
+meshes/ensure_tangents=true
+meshes/generate_lods=true
+meshes/create_shadow_meshes=true
+meshes/light_baking=1
+meshes/lightmap_texel_size=0.2
+meshes/force_disable_compression=false
+skins/use_named_skins=true
+animation/import=true
+animation/fps=30
+animation/trimming=false
+animation/remove_immutable_tracks=true
+import_script/path=""
+_subresources={
+"materials": {
+"car_blue": {
+"use_external/enabled": false,
+"use_external/path": "res://town/materials/car_blue.tres"
+},
+"car_yellow": {
+"use_external/enabled": false,
+"use_external/path": "res://town/materials/car_red.tres"
+},
+"chrome": {
+"use_external/enabled": false,
+"use_external/path": "res://town/materials/chrome.tres"
+},
+"truck_trailer": {
+"use_external/enabled": true,
+"use_external/path": "res://vehicles/truck_trailer.tres"
+}
+},
+"meshes": {
+"meshes_minivan": {
+"generate/lightmap_uv": 0,
+"generate/lods": 0,
+"generate/shadow_meshes": 0,
+"lods/normal_merge_angle": 60.0,
+"lods/normal_split_angle": 25.0,
+"save_to_file/enabled": true,
+"save_to_file/make_streamable": "",
+"save_to_file/path": "res://vehicles/meshes/minivan.res"
+},
+"meshes_tow_truck": {
+"generate/lightmap_uv": 0,
+"generate/lods": 0,
+"generate/shadow_meshes": 0,
+"lods/normal_merge_angle": 60.0,
+"lods/normal_split_angle": 25.0,
+"save_to_file/enabled": true,
+"save_to_file/make_streamable": "",
+"save_to_file/path": "res://vehicles/meshes/tow_truck.res"
+},
+"meshes_truck_cab": {
+"generate/lightmap_uv": 0,
+"generate/lods": 0,
+"generate/shadow_meshes": 0,
+"lods/normal_merge_angle": 60.0,
+"lods/normal_split_angle": 25.0,
+"save_to_file/enabled": true,
+"save_to_file/make_streamable": "",
+"save_to_file/path": "res://vehicles/meshes/truck_cab.res"
+},
+"meshes_truck_trailer": {
+"generate/lightmap_uv": 0,
+"generate/lods": 0,
+"generate/shadow_meshes": 0,
+"lods/normal_merge_angle": 60.0,
+"lods/normal_split_angle": 25.0,
+"save_to_file/enabled": true,
+"save_to_file/make_streamable": "",
+"save_to_file/path": "res://vehicles/meshes/truck_trailer.res"
+},
+"meshes_wheel": {
+"generate/lightmap_uv": 0,
+"generate/lods": 0,
+"generate/shadow_meshes": 0,
+"lods/normal_merge_angle": 60.0,
+"lods/normal_split_angle": 25.0,
+"save_to_file/enabled": true,
+"save_to_file/make_streamable": "",
+"save_to_file/path": "res://vehicles/meshes/wheel.res"
+}
+}
+}
+gltf/naming_version=0
+gltf/embedded_image_handling=1
diff --git a/vehicles/meshes/minivan.res b/vehicles/meshes/minivan.res
new file mode 100644
index 0000000..c897879
Binary files /dev/null and b/vehicles/meshes/minivan.res differ
diff --git a/vehicles/meshes/tow_truck.res b/vehicles/meshes/tow_truck.res
new file mode 100644
index 0000000..e799d01
Binary files /dev/null and b/vehicles/meshes/tow_truck.res differ
diff --git a/vehicles/meshes/truck_cab.res b/vehicles/meshes/truck_cab.res
new file mode 100644
index 0000000..f1db2c5
Binary files /dev/null and b/vehicles/meshes/truck_cab.res differ
diff --git a/vehicles/meshes/truck_trailer.res b/vehicles/meshes/truck_trailer.res
new file mode 100644
index 0000000..6688611
Binary files /dev/null and b/vehicles/meshes/truck_trailer.res differ
diff --git a/vehicles/meshes/wheel.res b/vehicles/meshes/wheel.res
new file mode 100644
index 0000000..99b083c
Binary files /dev/null and b/vehicles/meshes/wheel.res differ
diff --git a/vehicles/particle_smoke.png b/vehicles/particle_smoke.png
new file mode 100644
index 0000000..34cad39
Binary files /dev/null and b/vehicles/particle_smoke.png differ
diff --git a/vehicles/particle_smoke.png.import b/vehicles/particle_smoke.png.import
new file mode 100644
index 0000000..f4c3b2b
--- /dev/null
+++ b/vehicles/particle_smoke.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://d4ostmqwgytk"
+path="res://.godot/imported/particle_smoke.png-740721ed7d039c3c932866a66d9413f2.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://vehicles/particle_smoke.png"
+dest_files=["res://.godot/imported/particle_smoke.png-740721ed7d039c3c932866a66d9413f2.ctex"]
+
+[params]
+
+compress/mode=0
+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/vehicles/tow_truck.tscn b/vehicles/tow_truck.tscn
new file mode 100644
index 0000000..7b98624
--- /dev/null
+++ b/vehicles/tow_truck.tscn
@@ -0,0 +1,405 @@
+[gd_scene load_steps=28 format=3 uid="uid://bh7765vrq5muf"]
+
+[ext_resource type="Script" path="res://vehicles/vehicle.gd" id="1_qhfnb"]
+[ext_resource type="ArrayMesh" uid="uid://bqrwin8ccgptt" path="res://vehicles/meshes/wheel.res" id="2_uwuq1"]
+[ext_resource type="ArrayMesh" uid="uid://cbpqxxd14g8un" path="res://vehicles/meshes/tow_truck.res" id="3_tv0o3"]
+[ext_resource type="Script" path="res://vehicles/follow_camera.gd" id="4_wddne"]
+[ext_resource type="ArrayMesh" uid="uid://ctglc27jx8xe2" path="res://vehicles/meshes/truck_cab.res" id="5_04cnp"]
+[ext_resource type="AudioStream" uid="uid://cb7wvsd6vygd3" path="res://vehicles/engine.wav" id="5_fwfew"]
+[ext_resource type="AudioStream" uid="uid://sy2li7u35867" path="res://vehicles/impact_1.wav" id="6_i7k5m"]
+[ext_resource type="AudioStream" uid="uid://bf0h7s81yr8nj" path="res://vehicles/impact_2.wav" id="7_hc8k7"]
+[ext_resource type="AudioStream" uid="uid://sun2n8a4xapl" path="res://vehicles/impact_3.wav" id="8_cbgcu"]
+[ext_resource type="AudioStream" uid="uid://dpbayeeufya21" path="res://vehicles/impact_4.wav" id="9_y8ei3"]
+[ext_resource type="Texture2D" uid="uid://d4ostmqwgytk" path="res://vehicles/particle_smoke.png" id="10_lfosv"]
+[ext_resource type="Texture2D" uid="uid://bju75l2w3r7vq" path="res://vehicles/blob_shadow.png" id="11_5ul8v"]
+
+[sub_resource type="BoxShape3D" id="BoxShape3D_0hbge"]
+size = Vector3(1.17624, 0.6963, 2.23996)
+
+[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_aad58"]
+random_pitch = 1.05
+random_volume_offset_db = 2.0
+streams_count = 4
+stream_0/stream = ExtResource("6_i7k5m")
+stream_0/weight = 1.0
+stream_1/stream = ExtResource("7_hc8k7")
+stream_1/weight = 1.0
+stream_2/stream = ExtResource("8_cbgcu")
+stream_2/weight = 1.0
+stream_3/stream = ExtResource("9_y8ei3")
+stream_3/weight = 1.0
+
+[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_atib4"]
+transparency = 1
+shading_mode = 0
+vertex_color_use_as_albedo = true
+albedo_color = Color(0.462745, 0.462745, 0.462745, 0.501961)
+albedo_texture = ExtResource("10_lfosv")
+billboard_mode = 3
+billboard_keep_scale = true
+particles_anim_h_frames = 1
+particles_anim_v_frames = 1
+particles_anim_loop = false
+proximity_fade_enabled = true
+proximity_fade_distance = 0.5
+
+[sub_resource type="QuadMesh" id="QuadMesh_xsbig"]
+material = SubResource("StandardMaterial3D_atib4")
+
+[sub_resource type="Curve" id="Curve_kr6si"]
+_data = [Vector2(0, 0), 0.0, 0.0, 0, 0, Vector2(1, 1), 0.0, 0.0, 0, 0]
+point_count = 2
+
+[sub_resource type="Gradient" id="Gradient_38b5g"]
+colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 0)
+
+[sub_resource type="CapsuleMesh" id="CapsuleMesh_i2aww"]
+radius = 0.05
+height = 0.42
+radial_segments = 12
+rings = 3
+
+[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_nrety"]
+albedo_color = Color(0.635294, 0.635294, 0.635294, 1)
+metallic = 1.0
+roughness = 0.5
+
+[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_eoojf"]
+radius = 0.05
+height = 0.3
+
+[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_so248"]
+albedo_color = Color(0.635294, 0.635294, 0.635294, 1)
+metallic = 1.0
+roughness = 0.5
+
+[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_c2qj1"]
+albedo_color = Color(0.635294, 0.635294, 0.635294, 1)
+metallic = 1.0
+roughness = 0.5
+
+[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ffy5m"]
+albedo_color = Color(0.635294, 0.635294, 0.635294, 1)
+metallic = 1.0
+roughness = 0.5
+
+[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_l1evv"]
+albedo_color = Color(0.635294, 0.635294, 0.635294, 1)
+metallic = 1.0
+roughness = 0.5
+
+[sub_resource type="PhysicsMaterial" id="PhysicsMaterial_hvgqm"]
+friction = 0.5
+
+[sub_resource type="BoxShape3D" id="BoxShape3D_hbuqf"]
+size = Vector3(0.954078, 1, 2.32662)
+
+[node name="TowTruck" type="Node3D"]
+
+[node name="Body" type="VehicleBody3D" parent="."]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.00169557, 0.222867, -0.0955184)
+center_of_mass_mode = 1
+script = ExtResource("1_qhfnb")
+
+[node name="Wheel1" type="VehicleWheel3D" parent="Body"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.573678, 0.000773743, 1.10416)
+use_as_traction = true
+use_as_steering = true
+wheel_roll_influence = 0.4
+wheel_radius = 0.18
+wheel_friction_slip = 1.0
+suspension_stiffness = 30.0
+damping_compression = 0.88
+
+[node name="Wheel1" type="MeshInstance3D" parent="Body/Wheel1"]
+layers = 2
+gi_mode = 2
+mesh = ExtResource("2_uwuq1")
+
+[node name="Wheel2" type="VehicleWheel3D" parent="Body"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.573678, 0.000773743, -0.783403)
+use_as_traction = true
+wheel_roll_influence = 0.4
+wheel_radius = 0.18
+wheel_friction_slip = 1.0
+suspension_stiffness = 30.0
+damping_compression = 0.88
+
+[node name="Wheel2" type="MeshInstance3D" parent="Body/Wheel2"]
+layers = 2
+gi_mode = 2
+mesh = ExtResource("2_uwuq1")
+
+[node name="Wheel3" type="VehicleWheel3D" parent="Body"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.573678, 0.000773743, 1.10416)
+use_as_traction = true
+use_as_steering = true
+wheel_roll_influence = 0.4
+wheel_radius = 0.18
+wheel_friction_slip = 1.0
+suspension_stiffness = 30.0
+damping_compression = 0.88
+
+[node name="Wheel3" type="MeshInstance3D" parent="Body/Wheel3"]
+layers = 2
+gi_mode = 2
+mesh = ExtResource("2_uwuq1")
+
+[node name="Wheel4" type="VehicleWheel3D" parent="Body"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.573678, 0.000773743, -0.783403)
+use_as_traction = true
+wheel_roll_influence = 0.4
+wheel_radius = 0.18
+wheel_friction_slip = 1.0
+suspension_stiffness = 30.0
+damping_compression = 0.88
+
+[node name="Wheel4" type="MeshInstance3D" parent="Body/Wheel4"]
+layers = 2
+gi_mode = 2
+mesh = ExtResource("2_uwuq1")
+
+[node name="Body" type="MeshInstance3D" parent="Body"]
+layers = 2
+gi_mode = 2
+mesh = ExtResource("3_tv0o3")
+
+[node name="CameraBase" type="Node3D" parent="Body"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.97449, 0)
+
+[node name="Camera3D" type="Camera3D" parent="Body/CameraBase"]
+transform = Transform3D(-1, 2.11495e-08, -8.48259e-08, 0, 0.970296, 0.241922, 8.74227e-08, 0.241922, -0.970295, 0, 2.032, -4.394)
+current = true
+fov = 74.0
+near = 0.1
+script = ExtResource("4_wddne")
+min_distance = 5.0
+max_distance = 7.0
+height = 1.75
+
+[node name="CollisionShape3D" type="CollisionShape3D" parent="Body"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.391365, 0.158069)
+shape = SubResource("BoxShape3D_0hbge")
+
+[node name="EngineSound" type="AudioStreamPlayer3D" parent="Body"]
+stream = ExtResource("5_fwfew")
+pitch_scale = 0.05
+autoplay = true
+attenuation_filter_cutoff_hz = 20500.0
+
+[node name="ImpactSound" type="AudioStreamPlayer3D" parent="Body"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.391365, 0.158069)
+stream = SubResource("AudioStreamRandomizer_aad58")
+volume_db = -9.0
+max_polyphony = 3
+attenuation_filter_cutoff_hz = 20500.0
+
+[node name="CPUParticles3D" type="CPUParticles3D" parent="Body"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.201696, -0.022867, -1.10448)
+amount = 125
+lifetime = 1.25
+mesh = SubResource("QuadMesh_xsbig")
+direction = Vector3(0, 1, -0.5)
+gravity = Vector3(0, 0, 0)
+initial_velocity_min = 1.0
+initial_velocity_max = 1.0
+damping_min = 0.05
+damping_max = 0.05
+angle_max = 360.0
+scale_amount_curve = SubResource("Curve_kr6si")
+color_ramp = SubResource("Gradient_38b5g")
+
+[node name="BlobShadow" type="Decal" parent="Body"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.00169557, -0.222867, 0.145518)
+size = Vector3(1.6, 4, 3)
+texture_albedo = ExtResource("11_5ul8v")
+upper_fade = 2.0
+lower_fade = 1.0
+cull_mask = 1048573
+
+[node name="AudioListener3D" type="AudioListener3D" parent="Body"]
+current = true
+
+[node name="InteriorCameraPosition" type="Marker3D" parent="Body"]
+transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 0.9, 0.3)
+
+[node name="TopDownCameraPosition" type="Marker3D" parent="Body"]
+transform = Transform3D(-1, 8.74228e-08, 0, 3.82137e-15, 4.37114e-08, 1, 8.74228e-08, 1, -4.37114e-08, 0.00169557, 15.7771, 0.0955178)
+
+[node name="ChainB1" type="RigidBody3D" parent="."]
+transform = Transform3D(1, 0, 0, 0, 0.846248, -0.53279, 0, 0.53279, 0.846248, 0, 1.10846, -1.55698)
+
+[node name="Chain1" type="MeshInstance3D" parent="ChainB1"]
+layers = 2
+gi_mode = 2
+mesh = SubResource("CapsuleMesh_i2aww")
+surface_material_override/0 = SubResource("StandardMaterial3D_nrety")
+
+[node name="CollisionShape3D" type="CollisionShape3D" parent="ChainB1"]
+shape = SubResource("CapsuleShape3D_eoojf")
+
+[node name="ChainB2" type="RigidBody3D" parent="."]
+transform = Transform3D(1, 0, 0, 0, 0.846248, -0.53279, 0, 0.53279, 0.846248, 0, 0.803378, -1.75806)
+
+[node name="Chain1" type="MeshInstance3D" parent="ChainB2"]
+layers = 2
+gi_mode = 2
+mesh = SubResource("CapsuleMesh_i2aww")
+surface_material_override/0 = SubResource("StandardMaterial3D_so248")
+
+[node name="CollisionShape3D" type="CollisionShape3D" parent="ChainB2"]
+shape = SubResource("CapsuleShape3D_eoojf")
+
+[node name="ChainB3" type="RigidBody3D" parent="."]
+transform = Transform3D(1, 0, 0, 0, 0.846248, -0.53279, 0, 0.53279, 0.846248, 0, 0.490045, -1.96106)
+
+[node name="Chain1" type="MeshInstance3D" parent="ChainB3"]
+layers = 2
+gi_mode = 2
+mesh = SubResource("CapsuleMesh_i2aww")
+surface_material_override/0 = SubResource("StandardMaterial3D_c2qj1")
+
+[node name="CollisionShape3D" type="CollisionShape3D" parent="ChainB3"]
+shape = SubResource("CapsuleShape3D_eoojf")
+
+[node name="ChainB4" type="RigidBody3D" parent="."]
+transform = Transform3D(1, 0, 0, 0, 0.447167, -0.894451, 0, 0.894451, 0.447167, 0, 0.290326, -2.19413)
+
+[node name="Chain1" type="MeshInstance3D" parent="ChainB4"]
+layers = 2
+gi_mode = 2
+mesh = SubResource("CapsuleMesh_i2aww")
+surface_material_override/0 = SubResource("StandardMaterial3D_ffy5m")
+
+[node name="CollisionShape3D" type="CollisionShape3D" parent="ChainB4"]
+shape = SubResource("CapsuleShape3D_eoojf")
+
+[node name="ChainB5" type="RigidBody3D" parent="."]
+transform = Transform3D(1, 0, 0, 0, 0.0993884, -0.995049, 0, 0.995049, 0.0993884, 0, 0.205717, -2.50193)
+
+[node name="Chain1" type="MeshInstance3D" parent="ChainB5"]
+layers = 2
+gi_mode = 2
+mesh = SubResource("CapsuleMesh_i2aww")
+surface_material_override/0 = SubResource("StandardMaterial3D_l1evv")
+
+[node name="CollisionShape3D" type="CollisionShape3D" parent="ChainB5"]
+shape = SubResource("CapsuleShape3D_eoojf")
+
+[node name="PinJoint1" type="PinJoint3D" parent="."]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.28044, -1.4153)
+node_a = NodePath("../Body")
+node_b = NodePath("../ChainB1")
+
+[node name="PinJoint2" type="PinJoint3D" parent="."]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.962693, -1.6492)
+node_a = NodePath("../ChainB1")
+node_b = NodePath("../ChainB2")
+
+[node name="PinJoint3" type="PinJoint3D" parent="."]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.644947, -1.85661)
+node_a = NodePath("../ChainB2")
+node_b = NodePath("../ChainB3")
+params/bias = 0.5
+
+[node name="PinJoint4" type="PinJoint3D" parent="."]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.350687, -2.04279)
+node_a = NodePath("../ChainB3")
+node_b = NodePath("../ChainB4")
+params/bias = 0.5
+
+[node name="PinJoint5" type="PinJoint3D" parent="."]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.217609, -2.33375)
+node_a = NodePath("../ChainB4")
+node_b = NodePath("../ChainB5")
+params/bias = 0.5
+
+[node name="Body2" type="VehicleBody3D" parent="."]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.00169557, 0.222867, -3.97518)
+mass = 10.0
+center_of_mass_mode = 1
+physics_material_override = SubResource("PhysicsMaterial_hvgqm")
+
+[node name="Wheel1" type="VehicleWheel3D" parent="Body2"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.573678, 0.115169, 1.10416)
+use_as_traction = true
+use_as_steering = true
+wheel_roll_influence = 0.4
+wheel_radius = 0.25
+wheel_friction_slip = 1.0
+suspension_travel = 2.0
+suspension_stiffness = 40.0
+damping_compression = 0.88
+
+[node name="Wheel1" type="MeshInstance3D" parent="Body2/Wheel1"]
+layers = 2
+gi_mode = 2
+mesh = ExtResource("2_uwuq1")
+
+[node name="Wheel2" type="VehicleWheel3D" parent="Body2"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.573678, 0.115169, -0.783403)
+use_as_traction = true
+wheel_roll_influence = 0.4
+wheel_radius = 0.25
+wheel_friction_slip = 1.0
+suspension_travel = 2.0
+suspension_stiffness = 40.0
+damping_compression = 0.88
+
+[node name="Wheel2" type="MeshInstance3D" parent="Body2/Wheel2"]
+layers = 2
+gi_mode = 2
+mesh = ExtResource("2_uwuq1")
+
+[node name="Wheel3" type="VehicleWheel3D" parent="Body2"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.573678, 0.115169, 1.10416)
+use_as_traction = true
+use_as_steering = true
+wheel_roll_influence = 0.4
+wheel_radius = 0.25
+wheel_friction_slip = 1.0
+suspension_travel = 2.0
+suspension_stiffness = 40.0
+damping_compression = 0.88
+
+[node name="Wheel3" type="MeshInstance3D" parent="Body2/Wheel3"]
+layers = 2
+gi_mode = 2
+mesh = ExtResource("2_uwuq1")
+
+[node name="Wheel4" type="VehicleWheel3D" parent="Body2"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.573678, 0.115169, -0.783403)
+use_as_traction = true
+wheel_roll_influence = 0.4
+wheel_radius = 0.25
+wheel_friction_slip = 1.0
+suspension_travel = 2.0
+suspension_stiffness = 40.0
+damping_compression = 0.88
+
+[node name="Wheel4" type="MeshInstance3D" parent="Body2/Wheel4"]
+layers = 2
+gi_mode = 2
+mesh = ExtResource("2_uwuq1")
+
+[node name="Body" type="MeshInstance3D" parent="Body2"]
+layers = 2
+gi_mode = 2
+mesh = ExtResource("5_04cnp")
+
+[node name="CollisionShape3D" type="CollisionShape3D" parent="Body2"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.588269, 0.0774262)
+shape = SubResource("BoxShape3D_hbuqf")
+
+[node name="BlobShadow" type="Decal" parent="Body2"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.00169557, -0.122867, 0.0251799)
+size = Vector3(1.6, 4, 3)
+texture_albedo = ExtResource("11_5ul8v")
+upper_fade = 2.0
+lower_fade = 1.0
+cull_mask = 1048573
+
+[node name="PinJoint6" type="PinJoint3D" parent="."]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.148269, -2.64894)
+node_a = NodePath("../ChainB5")
+node_b = NodePath("../Body2")
diff --git a/vehicles/trailer_truck.tscn b/vehicles/trailer_truck.tscn
new file mode 100644
index 0000000..3ded4e4
--- /dev/null
+++ b/vehicles/trailer_truck.tscn
@@ -0,0 +1,367 @@
+[gd_scene load_steps=24 format=3 uid="uid://drinprblemj5u"]
+
+[ext_resource type="Script" path="res://vehicles/vehicle.gd" id="1_wetfm"]
+[ext_resource type="ArrayMesh" uid="uid://bqrwin8ccgptt" path="res://vehicles/meshes/wheel.res" id="2_q28iu"]
+[ext_resource type="ArrayMesh" uid="uid://ctglc27jx8xe2" path="res://vehicles/meshes/truck_cab.res" id="3_t1je7"]
+[ext_resource type="Script" path="res://vehicles/follow_camera.gd" id="4_4yhuf"]
+[ext_resource type="AudioStream" uid="uid://sy2li7u35867" path="res://vehicles/impact_1.wav" id="6_n54jl"]
+[ext_resource type="AudioStream" uid="uid://cb7wvsd6vygd3" path="res://vehicles/engine.wav" id="6_r21ue"]
+[ext_resource type="AudioStream" uid="uid://bf0h7s81yr8nj" path="res://vehicles/impact_2.wav" id="7_i1avs"]
+[ext_resource type="AudioStream" uid="uid://sun2n8a4xapl" path="res://vehicles/impact_3.wav" id="8_nmphs"]
+[ext_resource type="AudioStream" uid="uid://dpbayeeufya21" path="res://vehicles/impact_4.wav" id="9_11toc"]
+[ext_resource type="Texture2D" uid="uid://d4ostmqwgytk" path="res://vehicles/particle_smoke.png" id="10_5qary"]
+[ext_resource type="Texture2D" uid="uid://bju75l2w3r7vq" path="res://vehicles/blob_shadow.png" id="11_ifj1h"]
+[ext_resource type="Material" uid="uid://dyg750wqca86r" path="res://vehicles/truck_trailer.tres" id="12_hbs2y"]
+
+[sub_resource type="BoxShape3D" id="BoxShape3D_itmot"]
+size = Vector3(1.3392, 1.04159, 2.3947)
+
+[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_xu0em"]
+random_pitch = 1.05
+random_volume_offset_db = 2.0
+streams_count = 4
+stream_0/stream = ExtResource("6_n54jl")
+stream_0/weight = 1.0
+stream_1/stream = ExtResource("7_i1avs")
+stream_1/weight = 1.0
+stream_2/stream = ExtResource("8_nmphs")
+stream_2/weight = 1.0
+stream_3/stream = ExtResource("9_11toc")
+stream_3/weight = 1.0
+
+[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_u6m2g"]
+transparency = 1
+shading_mode = 0
+vertex_color_use_as_albedo = true
+albedo_color = Color(0.462745, 0.462745, 0.462745, 0.501961)
+albedo_texture = ExtResource("10_5qary")
+billboard_mode = 3
+billboard_keep_scale = true
+particles_anim_h_frames = 1
+particles_anim_v_frames = 1
+particles_anim_loop = false
+proximity_fade_enabled = true
+proximity_fade_distance = 0.5
+
+[sub_resource type="QuadMesh" id="QuadMesh_q42ka"]
+material = SubResource("StandardMaterial3D_u6m2g")
+
+[sub_resource type="Curve" id="Curve_n4o5r"]
+_data = [Vector2(0, 0), 0.0, 0.0, 0, 0, Vector2(1, 1), 0.0, 0.0, 0, 0]
+point_count = 2
+
+[sub_resource type="Gradient" id="Gradient_cj6wi"]
+colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 0)
+
+[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_70jti"]
+resource_name = "car_blue"
+vertex_color_use_as_albedo = true
+albedo_color = Color(0.0387471, 0, 0.256548, 1)
+roughness = 0.6
+
+[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_uj5nn"]
+resource_name = "chrome"
+vertex_color_use_as_albedo = true
+albedo_color = Color(0.797738, 0.797738, 0.797738, 1)
+metallic = 1.0
+roughness = 0.35
+
+[sub_resource type="ArrayMesh" id="ArrayMesh_8a087"]
+_surfaces = [{
+"aabb": AABB(-0.653809, -0.437256, -1.98144, 1.30762, 0.674683, 3.89161),
+"format": 34359742465,
+"index_count": 444,
+"index_data": PackedByteArray(4, 0, 1, 0, 2, 0, 4, 0, 6, 0, 1, 0, 3, 0, 6, 0, 4, 0, 3, 0, 5, 0, 6, 0, 5, 0, 0, 0, 7, 0, 5, 0, 3, 0, 0, 0, 4, 0, 0, 0, 3, 0, 4, 0, 2, 0, 0, 0, 1, 0, 5, 0, 7, 0, 1, 0, 6, 0, 5, 0, 51, 0, 8, 0, 50, 0, 51, 0, 9, 0, 8, 0, 55, 0, 9, 0, 48, 0, 55, 0, 8, 0, 9, 0, 43, 0, 46, 0, 39, 0, 43, 0, 40, 0, 46, 0, 62, 0, 28, 0, 60, 0, 62, 0, 11, 0, 28, 0, 14, 0, 67, 0, 15, 0, 14, 0, 10, 0, 67, 0, 17, 0, 56, 0, 16, 0, 17, 0, 73, 0, 56, 0, 71, 0, 38, 0, 18, 0, 71, 0, 70, 0, 38, 0, 21, 0, 73, 0, 17, 0, 21, 0, 22, 0, 73, 0, 27, 0, 64, 0, 66, 0, 27, 0, 63, 0, 64, 0, 26, 0, 68, 0, 32, 0, 26, 0, 27, 0, 68, 0, 32, 0, 35, 0, 33, 0, 32, 0, 68, 0, 35, 0, 53, 0, 11, 0, 13, 0, 53, 0, 12, 0, 11, 0, 68, 0, 30, 0, 35, 0, 68, 0, 34, 0, 30, 0, 43, 0, 69, 0, 74, 0, 43, 0, 23, 0, 69, 0, 63, 0, 26, 0, 54, 0, 63, 0, 27, 0, 26, 0, 47, 0, 17, 0, 16, 0, 47, 0, 65, 0, 17, 0, 13, 0, 10, 0, 14, 0, 13, 0, 11, 0, 10, 0, 24, 0, 74, 0, 31, 0, 24, 0, 41, 0, 74, 0, 28, 0, 25, 0, 60, 0, 28, 0, 34, 0, 25, 0, 41, 0, 44, 0, 74, 0, 41, 0, 42, 0, 44, 0, 57, 0, 11, 0, 62, 0, 57, 0, 10, 0, 11, 0, 73, 0, 49, 0, 50, 0, 73, 0, 58, 0, 49, 0, 52, 0, 34, 0, 28, 0, 52, 0, 29, 0, 34, 0, 34, 0, 37, 0, 30, 0, 34, 0, 29, 0, 37, 0, 10, 0, 51, 0, 67, 0, 10, 0, 9, 0, 51, 0, 63, 0, 24, 0, 31, 0, 63, 0, 54, 0, 24, 0, 67, 0, 49, 0, 52, 0, 67, 0, 50, 0, 49, 0, 7, 0, 2, 0, 1, 0, 7, 0, 0, 0, 2, 0, 34, 0, 59, 0, 25, 0, 34, 0, 68, 0, 59, 0, 31, 0, 64, 0, 63, 0, 31, 0, 72, 0, 64, 0, 32, 0, 49, 0, 54, 0, 32, 0, 52, 0, 49, 0, 51, 0, 50, 0, 67, 0, 12, 0, 67, 0, 52, 0, 68, 0, 66, 0, 59, 0, 68, 0, 27, 0, 66, 0, 20, 0, 17, 0, 18, 0, 20, 0, 21, 0, 17, 0, 58, 0, 43, 0, 39, 0, 58, 0, 38, 0, 43, 0, 11, 0, 52, 0, 28, 0, 11, 0, 12, 0, 52, 0, 61, 0, 18, 0, 19, 0, 61, 0, 20, 0, 18, 0, 29, 0, 36, 0, 37, 0, 29, 0, 52, 0, 36, 0, 55, 0, 16, 0, 8, 0, 55, 0, 47, 0, 16, 0, 26, 0, 32, 0, 54, 0, 29, 0, 52, 0, 32, 0, 74, 0, 40, 0, 43, 0, 74, 0, 44, 0, 40, 0, 41, 0, 49, 0, 58, 0, 41, 0, 54, 0, 49, 0, 65, 0, 18, 0, 17, 0, 65, 0, 71, 0, 18, 0, 74, 0, 72, 0, 31, 0, 74, 0, 69, 0, 72, 0, 19, 0, 58, 0, 73, 0, 38, 0, 23, 0, 43, 0, 38, 0, 70, 0, 23, 0, 36, 0, 12, 0, 53, 0, 36, 0, 52, 0, 12, 0, 48, 0, 10, 0, 57, 0, 48, 0, 9, 0, 10, 0, 39, 0, 41, 0, 58, 0, 45, 0, 19, 0, 58, 0, 45, 0, 61, 0, 19, 0, 24, 0, 54, 0, 41, 0, 56, 0, 8, 0, 16, 0, 56, 0, 50, 0, 8, 0, 56, 0, 73, 0, 50, 0, 39, 0, 45, 0, 58, 0, 39, 0, 46, 0, 45, 0, 18, 0, 58, 0, 19, 0, 18, 0, 38, 0, 58, 0, 43, 0, 46, 0, 40, 0, 43, 0, 39, 0, 46, 0, 14, 0, 67, 0, 10, 0, 14, 0, 15, 0, 67, 0, 21, 0, 73, 0, 22, 0, 21, 0, 17, 0, 73, 0, 32, 0, 35, 0, 68, 0, 32, 0, 33, 0, 35, 0, 53, 0, 11, 0, 12, 0, 53, 0, 13, 0, 11, 0, 68, 0, 30, 0, 34, 0, 68, 0, 35, 0, 30, 0, 13, 0, 10, 0, 11, 0, 13, 0, 14, 0, 10, 0, 41, 0, 44, 0, 42, 0, 41, 0, 74, 0, 44, 0, 34, 0, 37, 0, 29, 0, 34, 0, 30, 0, 37, 0, 20, 0, 17, 0, 21, 0, 20, 0, 18, 0, 17, 0, 61, 0, 18, 0, 20, 0, 61, 0, 19, 0, 18, 0, 29, 0, 36, 0, 52, 0, 29, 0, 37, 0, 36, 0, 74, 0, 40, 0, 44, 0, 74, 0, 43, 0, 40, 0, 36, 0, 12, 0, 52, 0, 36, 0, 53, 0, 12, 0, 45, 0, 19, 0, 61, 0, 45, 0, 58, 0, 19, 0, 39, 0, 45, 0, 46, 0, 39, 0, 58, 0, 45, 0),
+"name": "car_blue",
+"primitive": 3,
+"uv_scale": Vector4(0, 0, 0, 0),
+"vertex_count": 75,
+"vertex_data": PackedByteArray(248, 223, 10, 190, 12, 64, 51, 190, 254, 127, 244, 63, 248, 223, 10, 190, 16, 32, 115, 62, 1, 192, 221, 63, 248, 223, 10, 190, 12, 64, 51, 190, 1, 192, 221, 63, 29, 0, 1, 62, 12, 64, 51, 190, 254, 127, 244, 63, 29, 0, 1, 62, 12, 64, 51, 190, 1, 192, 221, 63, 29, 0, 1, 62, 16, 32, 115, 62, 254, 127, 244, 63, 29, 0, 1, 62, 16, 32, 115, 62, 1, 192, 221, 63, 248, 223, 10, 190, 16, 32, 115, 62, 254, 127, 244, 63, 0, 0, 0, 0, 230, 31, 253, 189, 1, 224, 244, 191, 249, 159, 0, 63, 230, 31, 253, 189, 1, 224, 244, 191, 249, 159, 0, 63, 31, 160, 251, 189, 254, 127, 216, 191, 249, 159, 0, 63, 31, 160, 251, 189, 2, 128, 173, 191, 249, 159, 0, 63, 5, 224, 223, 190, 254, 95, 157, 191, 7, 96, 39, 63, 6, 160, 33, 190, 253, 159, 175, 191, 7, 96, 39, 63, 6, 160, 33, 190, 3, 96, 214, 191, 7, 96, 39, 63, 5, 224, 223, 190, 2, 160, 232, 191, 249, 159, 0, 191, 230, 31, 253, 189, 1, 224, 244, 191, 249, 159, 0, 191, 31, 160, 251, 189, 254, 127, 216, 191, 249, 159, 0, 191, 31, 160, 251, 189, 2, 128, 173, 191, 249, 159, 0, 191, 5, 224, 223, 190, 254, 95, 157, 191, 7, 96, 39, 191, 6, 160, 33, 190, 253, 159, 175, 191, 7, 96, 39, 191, 6, 160, 33, 190, 3, 96, 214, 191, 7, 96, 39, 191, 5, 224, 223, 190, 2, 160, 232, 191, 249, 159, 0, 191, 81, 160, 207, 60, 8, 32, 65, 191, 249, 159, 0, 191, 5, 224, 223, 190, 7, 96, 3, 190, 249, 159, 0, 63, 81, 160, 207, 60, 8, 32, 65, 191, 249, 159, 0, 63, 5, 224, 223, 190, 7, 96, 3, 190, 249, 159, 0, 63, 230, 31, 253, 189, 228, 159, 73, 190, 249, 159, 0, 63, 66, 64, 254, 189, 252, 255, 134, 191, 249, 159, 0, 63, 5, 224, 223, 190, 254, 95, 97, 191, 7, 96, 39, 63, 6, 160, 33, 190, 5, 192, 60, 191, 249, 159, 0, 191, 230, 31, 253, 189, 228, 159, 73, 190, 249, 159, 0, 63, 5, 224, 223, 190, 13, 224, 149, 190, 7, 96, 39, 63, 5, 224, 223, 190, 13, 224, 149, 190, 249, 159, 0, 63, 31, 160, 251, 189, 8, 32, 65, 191, 7, 96, 39, 63, 6, 160, 33, 190, 4, 0, 223, 190, 7, 96, 39, 63, 5, 224, 223, 190, 252, 255, 134, 191, 7, 96, 39, 63, 5, 224, 223, 190, 254, 95, 97, 191, 249, 159, 0, 191, 66, 64, 254, 189, 252, 255, 134, 191, 249, 159, 0, 191, 5, 224, 223, 190, 254, 95, 97, 191, 7, 96, 39, 191, 6, 160, 33, 190, 5, 192, 60, 191, 249, 159, 0, 191, 5, 224, 223, 190, 13, 224, 149, 190, 7, 96, 39, 191, 5, 224, 223, 190, 13, 224, 149, 190, 249, 159, 0, 191, 31, 160, 251, 189, 8, 32, 65, 191, 7, 96, 39, 191, 6, 160, 33, 190, 4, 0, 223, 190, 7, 96, 39, 191, 5, 224, 223, 190, 252, 255, 134, 191, 7, 96, 39, 191, 5, 224, 223, 190, 254, 95, 97, 191, 249, 159, 0, 191, 169, 192, 201, 60, 1, 224, 244, 191, 249, 159, 0, 63, 169, 192, 201, 60, 1, 224, 244, 191, 0, 0, 0, 0, 5, 224, 223, 190, 252, 255, 134, 191, 0, 0, 0, 0, 5, 224, 223, 190, 253, 159, 253, 191, 249, 159, 0, 63, 5, 224, 223, 190, 253, 159, 253, 191, 249, 159, 0, 63, 5, 224, 223, 190, 252, 255, 134, 191, 7, 96, 39, 63, 5, 224, 223, 190, 254, 95, 157, 191, 0, 0, 0, 0, 5, 224, 223, 190, 7, 96, 3, 190, 0, 0, 0, 0, 169, 192, 201, 60, 1, 224, 244, 191, 249, 159, 0, 191, 5, 224, 223, 190, 253, 159, 253, 191, 249, 159, 0, 63, 81, 160, 207, 60, 254, 127, 216, 191, 249, 159, 0, 191, 5, 224, 223, 190, 252, 255, 134, 191, 249, 159, 0, 63, 81, 160, 207, 60, 250, 95, 214, 190, 249, 159, 0, 63, 197, 31, 197, 60, 252, 255, 134, 191, 7, 96, 39, 191, 5, 224, 223, 190, 254, 95, 157, 191, 249, 159, 0, 63, 81, 160, 207, 60, 2, 128, 173, 191, 0, 0, 0, 0, 230, 31, 253, 189, 228, 159, 73, 190, 0, 0, 0, 0, 169, 192, 201, 60, 228, 159, 73, 190, 249, 159, 0, 191, 81, 160, 207, 60, 254, 127, 216, 191, 249, 159, 0, 63, 169, 192, 201, 60, 228, 159, 73, 190, 249, 159, 0, 63, 5, 224, 223, 190, 2, 160, 232, 191, 249, 159, 0, 63, 31, 160, 251, 189, 250, 95, 214, 190, 249, 159, 0, 191, 81, 160, 207, 60, 250, 95, 214, 190, 249, 159, 0, 191, 197, 31, 197, 60, 252, 255, 134, 191, 249, 159, 0, 191, 81, 160, 207, 60, 2, 128, 173, 191, 249, 159, 0, 191, 169, 192, 201, 60, 228, 159, 73, 190, 249, 159, 0, 191, 5, 224, 223, 190, 2, 160, 232, 191, 249, 159, 0, 191, 31, 160, 251, 189, 250, 95, 214, 190)
+}, {
+"aabb": AABB(-0.502441, -0.437256, -1.81738, 1.00489, 0.314402, 1.52466),
+"format": 34359742465,
+"index_count": 24,
+"index_data": PackedByteArray(7, 0, 8, 0, 6, 0, 7, 0, 13, 0, 8, 0, 10, 0, 11, 0, 15, 0, 10, 0, 9, 0, 11, 0, 4, 0, 14, 0, 3, 0, 4, 0, 5, 0, 14, 0, 1, 0, 12, 0, 2, 0, 1, 0, 0, 0, 12, 0),
+"name": "chrome",
+"primitive": 3,
+"uv_scale": Vector4(0, 0, 0, 0),
+"vertex_count": 16,
+"vertex_data": PackedByteArray(249, 159, 0, 63, 31, 160, 251, 189, 254, 127, 216, 191, 249, 159, 0, 63, 31, 160, 251, 189, 2, 128, 173, 191, 249, 159, 0, 63, 5, 224, 223, 190, 254, 95, 157, 191, 249, 159, 0, 191, 31, 160, 251, 189, 254, 127, 216, 191, 249, 159, 0, 191, 31, 160, 251, 189, 2, 128, 173, 191, 249, 159, 0, 191, 5, 224, 223, 190, 254, 95, 157, 191, 249, 159, 0, 63, 5, 224, 223, 190, 254, 95, 97, 191, 249, 159, 0, 63, 5, 224, 223, 190, 13, 224, 149, 190, 249, 159, 0, 63, 31, 160, 251, 189, 8, 32, 65, 191, 249, 159, 0, 191, 5, 224, 223, 190, 254, 95, 97, 191, 249, 159, 0, 191, 5, 224, 223, 190, 13, 224, 149, 190, 249, 159, 0, 191, 31, 160, 251, 189, 8, 32, 65, 191, 249, 159, 0, 63, 5, 224, 223, 190, 2, 160, 232, 191, 249, 159, 0, 63, 31, 160, 251, 189, 250, 95, 214, 190, 249, 159, 0, 191, 5, 224, 223, 190, 2, 160, 232, 191, 249, 159, 0, 191, 31, 160, 251, 189, 250, 95, 214, 190)
+}, {
+"aabb": AABB(-0.625, -0.00771, -2.00586, 1.24024, 1.12197, 4.19922),
+"format": 34359742465,
+"index_count": 36,
+"index_data": PackedByteArray(1, 0, 7, 0, 4, 0, 1, 0, 6, 0, 7, 0, 0, 0, 6, 0, 1, 0, 0, 0, 5, 0, 6, 0, 3, 0, 5, 0, 0, 0, 3, 0, 2, 0, 5, 0, 4, 0, 2, 0, 3, 0, 4, 0, 7, 0, 2, 0, 0, 0, 4, 0, 3, 0, 0, 0, 1, 0, 4, 0, 6, 0, 2, 0, 7, 0, 6, 0, 5, 0, 2, 0),
+"name": "truck_trailer",
+"primitive": 3,
+"uv_scale": Vector4(0, 0, 0, 0),
+"vertex_count": 8,
+"vertex_data": PackedByteArray(250, 127, 29, 63, 43, 164, 252, 187, 254, 95, 0, 192, 0, 0, 32, 191, 43, 164, 252, 187, 254, 95, 0, 192, 250, 127, 29, 63, 2, 160, 142, 63, 254, 95, 12, 64, 250, 127, 29, 63, 43, 164, 252, 187, 254, 95, 12, 64, 0, 0, 32, 191, 43, 164, 252, 187, 254, 95, 12, 64, 250, 127, 29, 63, 2, 160, 142, 63, 254, 95, 0, 192, 0, 0, 32, 191, 2, 160, 142, 63, 254, 95, 0, 192, 0, 0, 32, 191, 2, 160, 142, 63, 254, 95, 12, 64)
+}]
+blend_shape_mode = 0
+
+[sub_resource type="ArrayMesh" id="ArrayMesh_e2bcg"]
+resource_name = "meshes_truck_trailer"
+_surfaces = [{
+"aabb": AABB(-0.653809, -0.437256, -1.98144, 1.30762, 0.674683, 3.89161),
+"attribute_data": PackedByteArray(0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63),
+"format": 34359742487,
+"index_count": 444,
+"index_data": PackedByteArray(13, 0, 4, 0, 8, 0, 13, 0, 18, 0, 4, 0, 11, 0, 20, 0, 14, 0, 11, 0, 17, 0, 20, 0, 15, 0, 2, 0, 22, 0, 15, 0, 10, 0, 2, 0, 12, 0, 1, 0, 9, 0, 12, 0, 7, 0, 1, 0, 5, 0, 16, 0, 23, 0, 5, 0, 19, 0, 16, 0, 117, 0, 24, 0, 115, 0, 117, 0, 25, 0, 24, 0, 126, 0, 25, 0, 111, 0, 126, 0, 24, 0, 25, 0, 103, 0, 107, 0, 92, 0, 103, 0, 95, 0, 107, 0, 138, 0, 69, 0, 135, 0, 138, 0, 32, 0, 69, 0, 39, 0, 146, 0, 41, 0, 39, 0, 27, 0, 146, 0, 44, 0, 127, 0, 42, 0, 44, 0, 156, 0, 127, 0, 153, 0, 90, 0, 47, 0, 153, 0, 152, 0, 90, 0, 57, 0, 157, 0, 46, 0, 57, 0, 58, 0, 157, 0, 67, 0, 140, 0, 142, 0, 67, 0, 139, 0, 140, 0, 66, 0, 150, 0, 80, 0, 66, 0, 68, 0, 150, 0, 79, 0, 85, 0, 81, 0, 79, 0, 148, 0, 85, 0, 123, 0, 30, 0, 37, 0, 123, 0, 35, 0, 30, 0, 149, 0, 74, 0, 86, 0, 149, 0, 83, 0, 74, 0, 101, 0, 151, 0, 160, 0, 101, 0, 59, 0, 151, 0, 139, 0, 65, 0, 125, 0, 139, 0, 67, 0, 65, 0, 109, 0, 44, 0, 42, 0, 109, 0, 141, 0, 44, 0, 38, 0, 28, 0, 40, 0, 38, 0, 31, 0, 28, 0, 60, 0, 160, 0, 75, 0, 60, 0, 96, 0, 160, 0, 69, 0, 63, 0, 135, 0, 69, 0, 84, 0, 63, 0, 97, 0, 105, 0, 162, 0, 97, 0, 100, 0, 105, 0, 130, 0, 32, 0, 138, 0, 130, 0, 29, 0, 32, 0, 158, 0, 113, 0, 114, 0, 158, 0, 133, 0, 113, 0, 121, 0, 84, 0, 69, 0, 121, 0, 72, 0, 84, 0, 82, 0, 89, 0, 73, 0, 82, 0, 71, 0, 89, 0, 29, 0, 118, 0, 147, 0, 29, 0, 26, 0, 118, 0, 139, 0, 62, 0, 76, 0, 139, 0, 125, 0, 62, 0, 144, 0, 113, 0, 119, 0, 144, 0, 114, 0, 113, 0, 21, 0, 6, 0, 3, 0, 21, 0, 0, 0, 6, 0, 84, 0, 134, 0, 63, 0, 84, 0, 150, 0, 134, 0, 76, 0, 140, 0, 139, 0, 76, 0, 155, 0, 140, 0, 77, 0, 113, 0, 124, 0, 77, 0, 119, 0, 113, 0, 116, 0, 114, 0, 144, 0, 34, 0, 145, 0, 120, 0, 150, 0, 143, 0, 134, 0, 150, 0, 68, 0, 143, 0, 54, 0, 45, 0, 48, 0, 54, 0, 56, 0, 45, 0, 131, 0, 101, 0, 91, 0, 131, 0, 90, 0, 101, 0, 32, 0, 121, 0, 69, 0, 32, 0, 36, 0, 121, 0, 136, 0, 49, 0, 51, 0, 136, 0, 55, 0, 49, 0, 70, 0, 87, 0, 88, 0, 70, 0, 120, 0, 87, 0, 126, 0, 43, 0, 24, 0, 126, 0, 110, 0, 43, 0, 64, 0, 77, 0, 124, 0, 70, 0, 120, 0, 78, 0, 161, 0, 94, 0, 102, 0, 161, 0, 104, 0, 94, 0, 99, 0, 113, 0, 133, 0, 99, 0, 124, 0, 113, 0, 141, 0, 47, 0, 44, 0, 141, 0, 153, 0, 47, 0, 160, 0, 154, 0, 75, 0, 160, 0, 151, 0, 154, 0, 53, 0, 132, 0, 159, 0, 90, 0, 59, 0, 101, 0, 90, 0, 152, 0, 59, 0, 87, 0, 33, 0, 122, 0, 87, 0, 120, 0, 33, 0, 112, 0, 29, 0, 130, 0, 112, 0, 26, 0, 29, 0, 93, 0, 98, 0, 132, 0, 106, 0, 52, 0, 132, 0, 106, 0, 137, 0, 52, 0, 61, 0, 124, 0, 99, 0, 129, 0, 24, 0, 43, 0, 129, 0, 115, 0, 24, 0, 128, 0, 158, 0, 114, 0, 93, 0, 106, 0, 132, 0, 93, 0, 108, 0, 106, 0, 47, 0, 131, 0, 50, 0, 47, 0, 90, 0, 131, 0, 204, 0, 210, 0, 200, 0, 204, 0, 199, 0, 210, 0, 172, 0, 217, 0, 164, 0, 172, 0, 173, 0, 217, 0, 182, 0, 220, 0, 184, 0, 182, 0, 174, 0, 220, 0, 189, 0, 194, 0, 219, 0, 189, 0, 190, 0, 194, 0, 212, 0, 166, 0, 167, 0, 212, 0, 170, 0, 166, 0, 218, 0, 187, 0, 191, 0, 218, 0, 193, 0, 187, 0, 169, 0, 163, 0, 165, 0, 169, 0, 171, 0, 163, 0, 202, 0, 206, 0, 203, 0, 202, 0, 221, 0, 206, 0, 192, 0, 196, 0, 185, 0, 192, 0, 188, 0, 196, 0, 181, 0, 175, 0, 183, 0, 181, 0, 177, 0, 175, 0, 216, 0, 176, 0, 180, 0, 216, 0, 179, 0, 176, 0, 186, 0, 195, 0, 211, 0, 186, 0, 197, 0, 195, 0, 222, 0, 201, 0, 207, 0, 222, 0, 205, 0, 201, 0, 195, 0, 168, 0, 211, 0, 195, 0, 213, 0, 168, 0, 208, 0, 178, 0, 215, 0, 208, 0, 214, 0, 178, 0, 198, 0, 208, 0, 209, 0, 198, 0, 214, 0, 208, 0),
+"material": SubResource("StandardMaterial3D_70jti"),
+"name": "car_blue",
+"primitive": 3,
+"uv_scale": Vector4(0, 0, 0, 0),
+"vertex_count": 223,
+"vertex_data": PackedByteArray(248, 223, 10, 190, 12, 64, 51, 190, 254, 127, 244, 63, 248, 223, 10, 190, 12, 64, 51, 190, 254, 127, 244, 63, 248, 223, 10, 190, 12, 64, 51, 190, 254, 127, 244, 63, 248, 223, 10, 190, 16, 32, 115, 62, 1, 192, 221, 63, 248, 223, 10, 190, 16, 32, 115, 62, 1, 192, 221, 63, 248, 223, 10, 190, 16, 32, 115, 62, 1, 192, 221, 63, 248, 223, 10, 190, 12, 64, 51, 190, 1, 192, 221, 63, 248, 223, 10, 190, 12, 64, 51, 190, 1, 192, 221, 63, 248, 223, 10, 190, 12, 64, 51, 190, 1, 192, 221, 63, 29, 0, 1, 62, 12, 64, 51, 190, 254, 127, 244, 63, 29, 0, 1, 62, 12, 64, 51, 190, 254, 127, 244, 63, 29, 0, 1, 62, 12, 64, 51, 190, 254, 127, 244, 63, 29, 0, 1, 62, 12, 64, 51, 190, 1, 192, 221, 63, 29, 0, 1, 62, 12, 64, 51, 190, 1, 192, 221, 63, 29, 0, 1, 62, 12, 64, 51, 190, 1, 192, 221, 63, 29, 0, 1, 62, 16, 32, 115, 62, 254, 127, 244, 63, 29, 0, 1, 62, 16, 32, 115, 62, 254, 127, 244, 63, 29, 0, 1, 62, 16, 32, 115, 62, 254, 127, 244, 63, 29, 0, 1, 62, 16, 32, 115, 62, 1, 192, 221, 63, 29, 0, 1, 62, 16, 32, 115, 62, 1, 192, 221, 63, 29, 0, 1, 62, 16, 32, 115, 62, 1, 192, 221, 63, 248, 223, 10, 190, 16, 32, 115, 62, 254, 127, 244, 63, 248, 223, 10, 190, 16, 32, 115, 62, 254, 127, 244, 63, 248, 223, 10, 190, 16, 32, 115, 62, 254, 127, 244, 63, 0, 0, 0, 0, 230, 31, 253, 189, 1, 224, 244, 191, 249, 159, 0, 63, 230, 31, 253, 189, 1, 224, 244, 191, 249, 159, 0, 63, 230, 31, 253, 189, 1, 224, 244, 191, 249, 159, 0, 63, 31, 160, 251, 189, 254, 127, 216, 191, 249, 159, 0, 63, 31, 160, 251, 189, 254, 127, 216, 191, 249, 159, 0, 63, 31, 160, 251, 189, 254, 127, 216, 191, 249, 159, 0, 63, 31, 160, 251, 189, 2, 128, 173, 191, 249, 159, 0, 63, 31, 160, 251, 189, 2, 128, 173, 191, 249, 159, 0, 63, 31, 160, 251, 189, 2, 128, 173, 191, 249, 159, 0, 63, 5, 224, 223, 190, 254, 95, 157, 191, 249, 159, 0, 63, 5, 224, 223, 190, 254, 95, 157, 191, 249, 159, 0, 63, 5, 224, 223, 190, 254, 95, 157, 191, 249, 159, 0, 63, 5, 224, 223, 190, 254, 95, 157, 191, 7, 96, 39, 63, 6, 160, 33, 190, 253, 159, 175, 191, 7, 96, 39, 63, 6, 160, 33, 190, 253, 159, 175, 191, 7, 96, 39, 63, 6, 160, 33, 190, 3, 96, 214, 191, 7, 96, 39, 63, 6, 160, 33, 190, 3, 96, 214, 191, 7, 96, 39, 63, 5, 224, 223, 190, 2, 160, 232, 191, 249, 159, 0, 191, 230, 31, 253, 189, 1, 224, 244, 191, 249, 159, 0, 191, 230, 31, 253, 189, 1, 224, 244, 191, 249, 159, 0, 191, 31, 160, 251, 189, 254, 127, 216, 191, 249, 159, 0, 191, 31, 160, 251, 189, 254, 127, 216, 191, 249, 159, 0, 191, 31, 160, 251, 189, 254, 127, 216, 191, 249, 159, 0, 191, 31, 160, 251, 189, 2, 128, 173, 191, 249, 159, 0, 191, 31, 160, 251, 189, 2, 128, 173, 191, 249, 159, 0, 191, 31, 160, 251, 189, 2, 128, 173, 191, 249, 159, 0, 191, 5, 224, 223, 190, 254, 95, 157, 191, 249, 159, 0, 191, 5, 224, 223, 190, 254, 95, 157, 191, 249, 159, 0, 191, 5, 224, 223, 190, 254, 95, 157, 191, 249, 159, 0, 191, 5, 224, 223, 190, 254, 95, 157, 191, 7, 96, 39, 191, 6, 160, 33, 190, 253, 159, 175, 191, 7, 96, 39, 191, 6, 160, 33, 190, 253, 159, 175, 191, 7, 96, 39, 191, 6, 160, 33, 190, 3, 96, 214, 191, 7, 96, 39, 191, 6, 160, 33, 190, 3, 96, 214, 191, 7, 96, 39, 191, 5, 224, 223, 190, 2, 160, 232, 191, 249, 159, 0, 191, 81, 160, 207, 60, 8, 32, 65, 191, 249, 159, 0, 191, 5, 224, 223, 190, 7, 96, 3, 190, 249, 159, 0, 191, 5, 224, 223, 190, 7, 96, 3, 190, 249, 159, 0, 191, 5, 224, 223, 190, 7, 96, 3, 190, 249, 159, 0, 63, 81, 160, 207, 60, 8, 32, 65, 191, 249, 159, 0, 63, 5, 224, 223, 190, 7, 96, 3, 190, 249, 159, 0, 63, 5, 224, 223, 190, 7, 96, 3, 190, 249, 159, 0, 63, 5, 224, 223, 190, 7, 96, 3, 190, 249, 159, 0, 63, 230, 31, 253, 189, 228, 159, 73, 190, 249, 159, 0, 63, 230, 31, 253, 189, 228, 159, 73, 190, 249, 159, 0, 63, 66, 64, 254, 189, 252, 255, 134, 191, 249, 159, 0, 63, 5, 224, 223, 190, 254, 95, 97, 191, 249, 159, 0, 63, 5, 224, 223, 190, 254, 95, 97, 191, 249, 159, 0, 63, 5, 224, 223, 190, 254, 95, 97, 191, 7, 96, 39, 63, 6, 160, 33, 190, 5, 192, 60, 191, 7, 96, 39, 63, 6, 160, 33, 190, 5, 192, 60, 191, 249, 159, 0, 191, 230, 31, 253, 189, 228, 159, 73, 190, 249, 159, 0, 191, 230, 31, 253, 189, 228, 159, 73, 190, 249, 159, 0, 63, 5, 224, 223, 190, 13, 224, 149, 190, 249, 159, 0, 63, 5, 224, 223, 190, 13, 224, 149, 190, 249, 159, 0, 63, 5, 224, 223, 190, 13, 224, 149, 190, 249, 159, 0, 63, 5, 224, 223, 190, 13, 224, 149, 190, 7, 96, 39, 63, 5, 224, 223, 190, 13, 224, 149, 190, 249, 159, 0, 63, 31, 160, 251, 189, 8, 32, 65, 191, 249, 159, 0, 63, 31, 160, 251, 189, 8, 32, 65, 191, 249, 159, 0, 63, 31, 160, 251, 189, 8, 32, 65, 191, 7, 96, 39, 63, 6, 160, 33, 190, 4, 0, 223, 190, 7, 96, 39, 63, 6, 160, 33, 190, 4, 0, 223, 190, 7, 96, 39, 63, 5, 224, 223, 190, 252, 255, 134, 191, 7, 96, 39, 63, 5, 224, 223, 190, 254, 95, 97, 191, 7, 96, 39, 63, 5, 224, 223, 190, 254, 95, 97, 191, 249, 159, 0, 191, 66, 64, 254, 189, 252, 255, 134, 191, 249, 159, 0, 191, 5, 224, 223, 190, 254, 95, 97, 191, 249, 159, 0, 191, 5, 224, 223, 190, 254, 95, 97, 191, 249, 159, 0, 191, 5, 224, 223, 190, 254, 95, 97, 191, 7, 96, 39, 191, 6, 160, 33, 190, 5, 192, 60, 191, 7, 96, 39, 191, 6, 160, 33, 190, 5, 192, 60, 191, 249, 159, 0, 191, 5, 224, 223, 190, 13, 224, 149, 190, 249, 159, 0, 191, 5, 224, 223, 190, 13, 224, 149, 190, 249, 159, 0, 191, 5, 224, 223, 190, 13, 224, 149, 190, 249, 159, 0, 191, 5, 224, 223, 190, 13, 224, 149, 190, 7, 96, 39, 191, 5, 224, 223, 190, 13, 224, 149, 190, 249, 159, 0, 191, 31, 160, 251, 189, 8, 32, 65, 191, 249, 159, 0, 191, 31, 160, 251, 189, 8, 32, 65, 191, 249, 159, 0, 191, 31, 160, 251, 189, 8, 32, 65, 191, 7, 96, 39, 191, 6, 160, 33, 190, 4, 0, 223, 190, 7, 96, 39, 191, 6, 160, 33, 190, 4, 0, 223, 190, 7, 96, 39, 191, 5, 224, 223, 190, 252, 255, 134, 191, 7, 96, 39, 191, 5, 224, 223, 190, 254, 95, 97, 191, 7, 96, 39, 191, 5, 224, 223, 190, 254, 95, 97, 191, 249, 159, 0, 191, 169, 192, 201, 60, 1, 224, 244, 191, 249, 159, 0, 191, 169, 192, 201, 60, 1, 224, 244, 191, 249, 159, 0, 63, 169, 192, 201, 60, 1, 224, 244, 191, 249, 159, 0, 63, 169, 192, 201, 60, 1, 224, 244, 191, 0, 0, 0, 0, 5, 224, 223, 190, 252, 255, 134, 191, 0, 0, 0, 0, 5, 224, 223, 190, 253, 159, 253, 191, 0, 0, 0, 0, 5, 224, 223, 190, 253, 159, 253, 191, 249, 159, 0, 63, 5, 224, 223, 190, 253, 159, 253, 191, 249, 159, 0, 63, 5, 224, 223, 190, 253, 159, 253, 191, 249, 159, 0, 63, 5, 224, 223, 190, 253, 159, 253, 191, 249, 159, 0, 63, 5, 224, 223, 190, 252, 255, 134, 191, 249, 159, 0, 63, 5, 224, 223, 190, 252, 255, 134, 191, 249, 159, 0, 63, 5, 224, 223, 190, 252, 255, 134, 191, 7, 96, 39, 63, 5, 224, 223, 190, 254, 95, 157, 191, 7, 96, 39, 63, 5, 224, 223, 190, 254, 95, 157, 191, 0, 0, 0, 0, 5, 224, 223, 190, 7, 96, 3, 190, 0, 0, 0, 0, 5, 224, 223, 190, 7, 96, 3, 190, 0, 0, 0, 0, 169, 192, 201, 60, 1, 224, 244, 191, 249, 159, 0, 191, 5, 224, 223, 190, 253, 159, 253, 191, 249, 159, 0, 191, 5, 224, 223, 190, 253, 159, 253, 191, 249, 159, 0, 191, 5, 224, 223, 190, 253, 159, 253, 191, 249, 159, 0, 63, 81, 160, 207, 60, 254, 127, 216, 191, 249, 159, 0, 191, 5, 224, 223, 190, 252, 255, 134, 191, 249, 159, 0, 191, 5, 224, 223, 190, 252, 255, 134, 191, 249, 159, 0, 191, 5, 224, 223, 190, 252, 255, 134, 191, 249, 159, 0, 63, 81, 160, 207, 60, 250, 95, 214, 190, 249, 159, 0, 63, 197, 31, 197, 60, 252, 255, 134, 191, 7, 96, 39, 191, 5, 224, 223, 190, 254, 95, 157, 191, 7, 96, 39, 191, 5, 224, 223, 190, 254, 95, 157, 191, 249, 159, 0, 63, 81, 160, 207, 60, 2, 128, 173, 191, 0, 0, 0, 0, 230, 31, 253, 189, 228, 159, 73, 190, 0, 0, 0, 0, 169, 192, 201, 60, 228, 159, 73, 190, 249, 159, 0, 191, 81, 160, 207, 60, 254, 127, 216, 191, 249, 159, 0, 63, 169, 192, 201, 60, 228, 159, 73, 190, 249, 159, 0, 63, 169, 192, 201, 60, 228, 159, 73, 190, 249, 159, 0, 63, 5, 224, 223, 190, 2, 160, 232, 191, 249, 159, 0, 63, 5, 224, 223, 190, 2, 160, 232, 191, 249, 159, 0, 63, 5, 224, 223, 190, 2, 160, 232, 191, 249, 159, 0, 63, 5, 224, 223, 190, 2, 160, 232, 191, 249, 159, 0, 63, 31, 160, 251, 189, 250, 95, 214, 190, 249, 159, 0, 63, 31, 160, 251, 189, 250, 95, 214, 190, 249, 159, 0, 63, 31, 160, 251, 189, 250, 95, 214, 190, 249, 159, 0, 191, 81, 160, 207, 60, 250, 95, 214, 190, 249, 159, 0, 191, 197, 31, 197, 60, 252, 255, 134, 191, 249, 159, 0, 191, 81, 160, 207, 60, 2, 128, 173, 191, 249, 159, 0, 191, 169, 192, 201, 60, 228, 159, 73, 190, 249, 159, 0, 191, 169, 192, 201, 60, 228, 159, 73, 190, 249, 159, 0, 191, 5, 224, 223, 190, 2, 160, 232, 191, 249, 159, 0, 191, 5, 224, 223, 190, 2, 160, 232, 191, 249, 159, 0, 191, 5, 224, 223, 190, 2, 160, 232, 191, 249, 159, 0, 191, 5, 224, 223, 190, 2, 160, 232, 191, 249, 159, 0, 191, 31, 160, 251, 189, 250, 95, 214, 190, 249, 159, 0, 191, 31, 160, 251, 189, 250, 95, 214, 190, 249, 159, 0, 191, 31, 160, 251, 189, 250, 95, 214, 190, 249, 159, 0, 63, 31, 160, 251, 189, 254, 127, 216, 191, 249, 159, 0, 63, 31, 160, 251, 189, 254, 127, 216, 191, 249, 159, 0, 63, 31, 160, 251, 189, 2, 128, 173, 191, 249, 159, 0, 63, 31, 160, 251, 189, 2, 128, 173, 191, 249, 159, 0, 63, 5, 224, 223, 190, 254, 95, 157, 191, 249, 159, 0, 63, 5, 224, 223, 190, 254, 95, 157, 191, 7, 96, 39, 63, 6, 160, 33, 190, 253, 159, 175, 191, 7, 96, 39, 63, 6, 160, 33, 190, 253, 159, 175, 191, 7, 96, 39, 63, 6, 160, 33, 190, 3, 96, 214, 191, 7, 96, 39, 63, 6, 160, 33, 190, 3, 96, 214, 191, 7, 96, 39, 63, 5, 224, 223, 190, 2, 160, 232, 191, 249, 159, 0, 191, 31, 160, 251, 189, 254, 127, 216, 191, 249, 159, 0, 191, 31, 160, 251, 189, 254, 127, 216, 191, 249, 159, 0, 191, 31, 160, 251, 189, 2, 128, 173, 191, 249, 159, 0, 191, 31, 160, 251, 189, 2, 128, 173, 191, 249, 159, 0, 191, 5, 224, 223, 190, 254, 95, 157, 191, 249, 159, 0, 191, 5, 224, 223, 190, 254, 95, 157, 191, 7, 96, 39, 191, 6, 160, 33, 190, 253, 159, 175, 191, 7, 96, 39, 191, 6, 160, 33, 190, 253, 159, 175, 191, 7, 96, 39, 191, 6, 160, 33, 190, 3, 96, 214, 191, 7, 96, 39, 191, 6, 160, 33, 190, 3, 96, 214, 191, 7, 96, 39, 191, 5, 224, 223, 190, 2, 160, 232, 191, 249, 159, 0, 63, 5, 224, 223, 190, 254, 95, 97, 191, 249, 159, 0, 63, 5, 224, 223, 190, 254, 95, 97, 191, 7, 96, 39, 63, 6, 160, 33, 190, 5, 192, 60, 191, 7, 96, 39, 63, 6, 160, 33, 190, 5, 192, 60, 191, 249, 159, 0, 63, 5, 224, 223, 190, 13, 224, 149, 190, 7, 96, 39, 63, 5, 224, 223, 190, 13, 224, 149, 190, 249, 159, 0, 63, 31, 160, 251, 189, 8, 32, 65, 191, 249, 159, 0, 63, 31, 160, 251, 189, 8, 32, 65, 191, 7, 96, 39, 63, 6, 160, 33, 190, 4, 0, 223, 190, 7, 96, 39, 63, 6, 160, 33, 190, 4, 0, 223, 190, 7, 96, 39, 63, 5, 224, 223, 190, 252, 255, 134, 191, 7, 96, 39, 63, 5, 224, 223, 190, 254, 95, 97, 191, 7, 96, 39, 63, 5, 224, 223, 190, 254, 95, 97, 191, 249, 159, 0, 191, 5, 224, 223, 190, 254, 95, 97, 191, 249, 159, 0, 191, 5, 224, 223, 190, 254, 95, 97, 191, 7, 96, 39, 191, 6, 160, 33, 190, 5, 192, 60, 191, 7, 96, 39, 191, 6, 160, 33, 190, 5, 192, 60, 191, 249, 159, 0, 191, 5, 224, 223, 190, 13, 224, 149, 190, 7, 96, 39, 191, 5, 224, 223, 190, 13, 224, 149, 190, 249, 159, 0, 191, 31, 160, 251, 189, 8, 32, 65, 191, 249, 159, 0, 191, 31, 160, 251, 189, 8, 32, 65, 191, 7, 96, 39, 191, 6, 160, 33, 190, 4, 0, 223, 190, 7, 96, 39, 191, 6, 160, 33, 190, 4, 0, 223, 190, 7, 96, 39, 191, 5, 224, 223, 190, 252, 255, 134, 191, 7, 96, 39, 191, 5, 224, 223, 190, 254, 95, 97, 191, 7, 96, 39, 191, 5, 224, 223, 190, 254, 95, 97, 191, 249, 159, 0, 63, 5, 224, 223, 190, 252, 255, 134, 191, 7, 96, 39, 63, 5, 224, 223, 190, 254, 95, 157, 191, 7, 96, 39, 63, 5, 224, 223, 190, 254, 95, 157, 191, 249, 159, 0, 191, 5, 224, 223, 190, 252, 255, 134, 191, 7, 96, 39, 191, 5, 224, 223, 190, 254, 95, 157, 191, 7, 96, 39, 191, 5, 224, 223, 190, 254, 95, 157, 191, 249, 159, 0, 63, 5, 224, 223, 190, 2, 160, 232, 191, 249, 159, 0, 63, 31, 160, 251, 189, 250, 95, 214, 190, 249, 159, 0, 63, 31, 160, 251, 189, 250, 95, 214, 190, 249, 159, 0, 191, 5, 224, 223, 190, 2, 160, 232, 191, 249, 159, 0, 191, 31, 160, 251, 189, 250, 95, 214, 190, 249, 159, 0, 191, 31, 160, 251, 189, 250, 95, 214, 190, 0, 0, 255, 127, 255, 255, 255, 191, 255, 127, 0, 0, 255, 255, 255, 191, 255, 127, 255, 127, 255, 255, 255, 63, 0, 0, 255, 127, 255, 255, 255, 191, 255, 255, 255, 255, 255, 255, 255, 191, 255, 127, 255, 255, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 191, 255, 127, 0, 0, 255, 255, 255, 191, 255, 255, 255, 255, 255, 255, 255, 191, 255, 127, 0, 0, 255, 255, 255, 191, 255, 127, 255, 127, 255, 255, 255, 63, 255, 255, 255, 127, 255, 255, 255, 191, 255, 127, 0, 0, 255, 255, 255, 191, 255, 255, 255, 255, 255, 255, 255, 191, 255, 255, 255, 127, 255, 255, 255, 191, 255, 127, 255, 127, 255, 255, 255, 63, 255, 127, 255, 255, 255, 255, 255, 191, 255, 255, 255, 127, 255, 255, 255, 191, 255, 255, 255, 255, 255, 255, 255, 191, 255, 127, 255, 255, 255, 255, 255, 191, 255, 255, 255, 127, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 191, 255, 127, 255, 127, 255, 255, 255, 63, 255, 127, 255, 255, 255, 255, 255, 191, 140, 243, 255, 255, 255, 255, 255, 191, 140, 243, 255, 255, 255, 255, 255, 191, 254, 255, 255, 127, 255, 255, 255, 63, 223, 218, 52, 247, 255, 255, 255, 191, 5, 152, 249, 231, 255, 255, 255, 191, 255, 255, 255, 127, 255, 255, 255, 63, 201, 136, 31, 165, 255, 255, 255, 63, 5, 152, 249, 231, 255, 255, 255, 191, 255, 255, 255, 127, 255, 255, 255, 191, 255, 127, 255, 255, 255, 255, 255, 191, 255, 127, 255, 255, 255, 255, 255, 191, 201, 136, 31, 165, 255, 255, 255, 63, 255, 255, 255, 127, 255, 255, 255, 191, 201, 136, 31, 165, 255, 255, 255, 63, 5, 152, 249, 231, 255, 255, 255, 191, 223, 218, 52, 247, 255, 255, 255, 191, 5, 152, 249, 231, 255, 255, 255, 191, 223, 218, 52, 247, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 63, 140, 243, 255, 255, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 63, 249, 103, 249, 231, 255, 255, 255, 191, 31, 37, 52, 247, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 191, 249, 103, 249, 231, 255, 255, 255, 191, 53, 119, 31, 165, 255, 255, 255, 63, 0, 0, 255, 127, 255, 255, 255, 191, 53, 119, 31, 165, 255, 255, 255, 63, 255, 127, 255, 255, 255, 255, 255, 191, 255, 127, 255, 255, 255, 255, 255, 191, 249, 103, 249, 231, 255, 255, 255, 191, 53, 119, 31, 165, 255, 255, 255, 63, 249, 103, 249, 231, 255, 255, 255, 191, 31, 37, 52, 247, 255, 255, 255, 191, 31, 37, 52, 247, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 191, 255, 127, 0, 0, 255, 255, 255, 191, 255, 127, 248, 150, 255, 255, 255, 63, 255, 255, 255, 127, 255, 255, 255, 191, 255, 127, 0, 0, 255, 255, 255, 191, 255, 127, 248, 150, 255, 255, 255, 63, 255, 255, 255, 127, 255, 255, 255, 191, 255, 127, 123, 140, 255, 255, 255, 63, 255, 255, 255, 127, 255, 255, 255, 191, 255, 255, 255, 127, 255, 255, 255, 191, 255, 127, 255, 255, 255, 255, 255, 191, 221, 218, 20, 247, 255, 255, 255, 191, 255, 255, 255, 127, 255, 255, 255, 191, 221, 218, 20, 247, 255, 255, 255, 191, 5, 152, 249, 231, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 191, 255, 127, 123, 140, 255, 255, 255, 63, 255, 127, 0, 0, 255, 255, 255, 191, 255, 127, 255, 255, 255, 255, 255, 191, 217, 136, 31, 165, 255, 255, 255, 63, 255, 255, 255, 127, 255, 255, 255, 191, 217, 136, 31, 165, 255, 255, 255, 63, 221, 218, 20, 247, 255, 255, 255, 191, 5, 152, 249, 231, 255, 255, 255, 191, 255, 255, 255, 127, 255, 255, 255, 191, 217, 136, 31, 165, 255, 255, 255, 63, 5, 152, 249, 231, 255, 255, 255, 191, 255, 127, 255, 255, 255, 255, 255, 191, 255, 127, 255, 255, 255, 255, 255, 191, 221, 218, 20, 247, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 191, 33, 37, 20, 247, 255, 255, 255, 191, 255, 127, 255, 255, 255, 255, 255, 191, 249, 103, 249, 231, 255, 255, 255, 191, 33, 37, 20, 247, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 191, 37, 119, 31, 165, 255, 255, 255, 63, 255, 127, 255, 255, 255, 255, 255, 191, 255, 127, 0, 0, 255, 255, 255, 191, 37, 119, 31, 165, 255, 255, 255, 63, 0, 0, 255, 127, 255, 255, 255, 191, 249, 103, 249, 231, 255, 255, 255, 191, 33, 37, 20, 247, 255, 255, 255, 191, 249, 103, 249, 231, 255, 255, 255, 191, 37, 119, 31, 165, 255, 255, 255, 63, 255, 127, 255, 255, 255, 255, 255, 191, 33, 37, 20, 247, 255, 255, 255, 191, 255, 127, 255, 255, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 191, 255, 255, 255, 255, 255, 255, 255, 191, 255, 255, 255, 255, 255, 255, 255, 191, 255, 255, 255, 127, 255, 255, 255, 191, 255, 127, 0, 0, 255, 255, 255, 191, 255, 127, 0, 0, 255, 255, 255, 191, 23, 233, 255, 255, 255, 255, 255, 191, 255, 127, 0, 0, 255, 255, 255, 191, 23, 233, 255, 255, 255, 255, 255, 191, 254, 255, 255, 127, 255, 255, 255, 63, 255, 127, 0, 0, 255, 255, 255, 191, 255, 127, 255, 255, 255, 255, 255, 191, 255, 255, 255, 127, 255, 255, 255, 191, 255, 127, 255, 255, 255, 255, 255, 191, 201, 136, 31, 165, 255, 255, 255, 63, 255, 127, 0, 0, 255, 255, 255, 191, 255, 127, 248, 150, 255, 255, 255, 63, 255, 255, 255, 255, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 63, 255, 127, 0, 0, 255, 255, 255, 191, 23, 233, 255, 255, 255, 255, 255, 191, 255, 255, 255, 127, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 191, 255, 127, 255, 255, 255, 255, 255, 191, 255, 127, 0, 0, 255, 255, 255, 191, 255, 255, 255, 127, 255, 255, 255, 191, 255, 255, 255, 127, 255, 255, 255, 191, 53, 119, 31, 165, 255, 255, 255, 63, 255, 127, 255, 255, 255, 255, 255, 191, 255, 255, 255, 127, 255, 255, 255, 191, 255, 127, 123, 140, 255, 255, 255, 63, 255, 127, 255, 127, 255, 255, 255, 63, 0, 0, 255, 127, 255, 255, 255, 191, 255, 127, 255, 127, 255, 255, 255, 63, 255, 255, 255, 127, 255, 255, 255, 191, 255, 127, 0, 0, 255, 255, 255, 191, 255, 127, 255, 255, 255, 255, 255, 191, 223, 218, 52, 247, 255, 255, 255, 191, 254, 255, 255, 127, 255, 255, 255, 63, 217, 136, 31, 165, 255, 255, 255, 63, 5, 152, 249, 231, 255, 255, 255, 191, 255, 255, 255, 127, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 63, 0, 0, 255, 127, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 63, 255, 127, 255, 127, 255, 255, 255, 63, 0, 0, 255, 127, 255, 255, 255, 63, 31, 37, 52, 247, 255, 255, 255, 191, 255, 127, 0, 0, 255, 255, 255, 191, 255, 127, 255, 255, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 191, 249, 103, 249, 231, 255, 255, 255, 191, 37, 119, 31, 165, 255, 255, 255, 63, 249, 103, 5, 24, 255, 255, 255, 191, 53, 119, 223, 90, 255, 255, 255, 63, 249, 103, 5, 24, 255, 255, 255, 191, 31, 37, 202, 8, 255, 255, 255, 191, 31, 37, 202, 8, 255, 255, 255, 191, 255, 127, 0, 0, 255, 255, 255, 191, 249, 103, 5, 24, 255, 255, 255, 191, 31, 37, 202, 8, 255, 255, 255, 191, 249, 103, 5, 24, 255, 255, 255, 191, 53, 119, 223, 90, 255, 255, 255, 63, 53, 119, 223, 90, 255, 255, 255, 63, 201, 136, 223, 90, 255, 255, 255, 63, 5, 152, 5, 24, 255, 255, 255, 191, 223, 218, 202, 8, 255, 255, 255, 191, 5, 152, 5, 24, 255, 255, 255, 191, 255, 127, 0, 0, 255, 255, 255, 191, 223, 218, 202, 8, 255, 255, 255, 191, 223, 218, 202, 8, 255, 255, 255, 191, 5, 152, 5, 24, 255, 255, 255, 191, 201, 136, 223, 90, 255, 255, 255, 63, 5, 152, 5, 24, 255, 255, 255, 191, 201, 136, 223, 90, 255, 255, 255, 63, 21, 119, 222, 90, 255, 255, 255, 63, 255, 127, 0, 0, 255, 255, 255, 191, 249, 103, 5, 24, 255, 255, 255, 191, 21, 119, 222, 90, 255, 255, 255, 63, 32, 37, 218, 8, 255, 255, 255, 191, 32, 37, 218, 8, 255, 255, 255, 191, 249, 103, 5, 24, 255, 255, 255, 191, 21, 119, 222, 90, 255, 255, 255, 63, 249, 103, 5, 24, 255, 255, 255, 191, 32, 37, 218, 8, 255, 255, 255, 191, 255, 127, 0, 0, 255, 255, 255, 191, 21, 119, 222, 90, 255, 255, 255, 63, 255, 127, 0, 0, 255, 255, 255, 191, 255, 127, 0, 0, 255, 255, 255, 191, 233, 136, 222, 90, 255, 255, 255, 63, 233, 136, 222, 90, 255, 255, 255, 63, 5, 152, 5, 24, 255, 255, 255, 191, 222, 218, 218, 8, 255, 255, 255, 191, 222, 218, 218, 8, 255, 255, 255, 191, 233, 136, 222, 90, 255, 255, 255, 63, 5, 152, 5, 24, 255, 255, 255, 191, 222, 218, 218, 8, 255, 255, 255, 191, 5, 152, 5, 24, 255, 255, 255, 191, 255, 127, 0, 0, 255, 255, 255, 191, 255, 127, 0, 0, 255, 255, 255, 191, 233, 136, 222, 90, 255, 255, 255, 63, 255, 127, 0, 0, 255, 255, 255, 191, 31, 37, 202, 8, 255, 255, 255, 191, 255, 127, 0, 0, 255, 255, 255, 191, 255, 127, 0, 0, 255, 255, 255, 191, 255, 127, 0, 0, 255, 255, 255, 191, 223, 218, 202, 8, 255, 255, 255, 191, 53, 119, 223, 90, 255, 255, 255, 63, 249, 103, 5, 24, 255, 255, 255, 191, 32, 37, 218, 8, 255, 255, 255, 191, 201, 136, 223, 90, 255, 255, 255, 63, 222, 218, 218, 8, 255, 255, 255, 191, 5, 152, 5, 24, 255, 255, 255, 191)
+}, {
+"aabb": AABB(-0.502441, -0.437256, -1.81738, 1.00489, 0.314402, 1.52466),
+"attribute_data": PackedByteArray(0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 128, 63),
+"format": 34359742487,
+"index_count": 24,
+"index_data": PackedByteArray(7, 0, 8, 0, 6, 0, 7, 0, 13, 0, 8, 0, 10, 0, 11, 0, 15, 0, 10, 0, 9, 0, 11, 0, 4, 0, 14, 0, 3, 0, 4, 0, 5, 0, 14, 0, 1, 0, 12, 0, 2, 0, 1, 0, 0, 0, 12, 0),
+"material": SubResource("StandardMaterial3D_uj5nn"),
+"name": "chrome",
+"primitive": 3,
+"uv_scale": Vector4(0, 0, 0, 0),
+"vertex_count": 16,
+"vertex_data": PackedByteArray(249, 159, 0, 63, 31, 160, 251, 189, 254, 127, 216, 191, 249, 159, 0, 63, 31, 160, 251, 189, 2, 128, 173, 191, 249, 159, 0, 63, 5, 224, 223, 190, 254, 95, 157, 191, 249, 159, 0, 191, 31, 160, 251, 189, 254, 127, 216, 191, 249, 159, 0, 191, 31, 160, 251, 189, 2, 128, 173, 191, 249, 159, 0, 191, 5, 224, 223, 190, 254, 95, 157, 191, 249, 159, 0, 63, 5, 224, 223, 190, 254, 95, 97, 191, 249, 159, 0, 63, 5, 224, 223, 190, 13, 224, 149, 190, 249, 159, 0, 63, 31, 160, 251, 189, 8, 32, 65, 191, 249, 159, 0, 191, 5, 224, 223, 190, 254, 95, 97, 191, 249, 159, 0, 191, 5, 224, 223, 190, 13, 224, 149, 190, 249, 159, 0, 191, 31, 160, 251, 189, 8, 32, 65, 191, 249, 159, 0, 63, 5, 224, 223, 190, 2, 160, 232, 191, 249, 159, 0, 63, 31, 160, 251, 189, 250, 95, 214, 190, 249, 159, 0, 191, 5, 224, 223, 190, 2, 160, 232, 191, 249, 159, 0, 191, 31, 160, 251, 189, 250, 95, 214, 190, 255, 255, 255, 127, 255, 255, 255, 191, 255, 255, 255, 127, 255, 255, 255, 191, 255, 255, 255, 127, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 191, 255, 255, 255, 127, 255, 255, 255, 191, 255, 255, 255, 127, 255, 255, 255, 191, 255, 255, 255, 127, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 191, 255, 255, 255, 127, 255, 255, 255, 191, 255, 255, 255, 127, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 191, 0, 0, 255, 127, 255, 255, 255, 191)
+}, {
+"aabb": AABB(-0.625, -0.00771, -2.00586, 1.24024, 1.12197, 4.19922),
+"attribute_data": PackedByteArray(64, 193, 241, 62, 218, 161, 71, 63, 31, 250, 91, 63, 5, 121, 127, 63, 182, 186, 127, 63, 136, 28, 41, 63, 0, 79, 60, 59, 168, 28, 41, 63, 66, 193, 241, 62, 203, 255, 125, 63, 143, 251, 118, 63, 5, 121, 127, 63, 192, 218, 96, 60, 115, 56, 72, 63, 109, 151, 248, 62, 194, 197, 125, 63, 3, 118, 94, 59, 208, 175, 3, 62, 66, 182, 230, 61, 220, 161, 71, 63, 232, 183, 210, 61, 115, 56, 72, 63, 3, 118, 94, 59, 140, 28, 41, 63, 171, 17, 127, 63, 161, 28, 41, 63, 66, 182, 230, 61, 203, 255, 125, 63, 232, 183, 210, 61, 135, 175, 122, 63, 31, 250, 91, 63, 164, 156, 78, 63, 11, 233, 88, 63, 194, 197, 125, 63, 182, 186, 127, 63, 208, 175, 3, 62, 0, 79, 60, 59, 152, 208, 4, 62, 143, 251, 118, 63, 164, 156, 78, 63, 11, 233, 88, 63, 179, 16, 71, 63, 171, 17, 127, 63, 144, 208, 4, 62, 192, 218, 96, 60, 135, 175, 122, 63, 111, 151, 248, 62, 181, 16, 71, 63),
+"format": 34359742487,
+"index_count": 36,
+"index_data": PackedByteArray(3, 0, 21, 0, 12, 0, 3, 0, 18, 0, 21, 0, 1, 0, 19, 0, 5, 0, 1, 0, 15, 0, 19, 0, 11, 0, 17, 0, 2, 0, 11, 0, 8, 0, 17, 0, 14, 0, 6, 0, 10, 0, 14, 0, 22, 0, 6, 0, 0, 0, 13, 0, 9, 0, 0, 0, 4, 0, 13, 0, 20, 0, 7, 0, 23, 0, 20, 0, 16, 0, 7, 0),
+"material": ExtResource("12_hbs2y"),
+"name": "truck_trailer",
+"primitive": 3,
+"uv_scale": Vector4(0, 0, 0, 0),
+"vertex_count": 24,
+"vertex_data": PackedByteArray(250, 127, 29, 63, 43, 164, 252, 187, 254, 95, 0, 192, 250, 127, 29, 63, 43, 164, 252, 187, 254, 95, 0, 192, 250, 127, 29, 63, 43, 164, 252, 187, 254, 95, 0, 192, 0, 0, 32, 191, 43, 164, 252, 187, 254, 95, 0, 192, 0, 0, 32, 191, 43, 164, 252, 187, 254, 95, 0, 192, 0, 0, 32, 191, 43, 164, 252, 187, 254, 95, 0, 192, 250, 127, 29, 63, 2, 160, 142, 63, 254, 95, 12, 64, 250, 127, 29, 63, 2, 160, 142, 63, 254, 95, 12, 64, 250, 127, 29, 63, 2, 160, 142, 63, 254, 95, 12, 64, 250, 127, 29, 63, 43, 164, 252, 187, 254, 95, 12, 64, 250, 127, 29, 63, 43, 164, 252, 187, 254, 95, 12, 64, 250, 127, 29, 63, 43, 164, 252, 187, 254, 95, 12, 64, 0, 0, 32, 191, 43, 164, 252, 187, 254, 95, 12, 64, 0, 0, 32, 191, 43, 164, 252, 187, 254, 95, 12, 64, 0, 0, 32, 191, 43, 164, 252, 187, 254, 95, 12, 64, 250, 127, 29, 63, 2, 160, 142, 63, 254, 95, 0, 192, 250, 127, 29, 63, 2, 160, 142, 63, 254, 95, 0, 192, 250, 127, 29, 63, 2, 160, 142, 63, 254, 95, 0, 192, 0, 0, 32, 191, 2, 160, 142, 63, 254, 95, 0, 192, 0, 0, 32, 191, 2, 160, 142, 63, 254, 95, 0, 192, 0, 0, 32, 191, 2, 160, 142, 63, 254, 95, 0, 192, 0, 0, 32, 191, 2, 160, 142, 63, 254, 95, 12, 64, 0, 0, 32, 191, 2, 160, 142, 63, 254, 95, 12, 64, 0, 0, 32, 191, 2, 160, 142, 63, 254, 95, 12, 64, 255, 127, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 0, 255, 191, 255, 255, 255, 127, 254, 255, 0, 128, 0, 0, 255, 127, 255, 127, 255, 191, 255, 127, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 191, 255, 127, 255, 127, 255, 127, 0, 128, 255, 127, 255, 255, 255, 255, 255, 255, 255, 255, 255, 127, 255, 255, 255, 255, 255, 127, 0, 0, 0, 0, 254, 255, 255, 127, 255, 127, 255, 127, 0, 128, 255, 255, 255, 127, 255, 255, 0, 128, 0, 0, 255, 127, 255, 127, 255, 191, 255, 127, 0, 0, 0, 0, 255, 255, 255, 127, 255, 127, 255, 127, 0, 128, 255, 255, 255, 255, 0, 0, 255, 191, 255, 127, 255, 255, 255, 255, 255, 255, 255, 255, 255, 127, 254, 255, 0, 128, 0, 0, 255, 127, 255, 127, 255, 191, 255, 255, 255, 255, 0, 0, 255, 191, 255, 127, 255, 255, 255, 255, 255, 255, 0, 0, 255, 127, 255, 127, 255, 191, 255, 127, 255, 127, 255, 127, 0, 128, 255, 127, 255, 255, 255, 255, 254, 255)
+}]
+blend_shape_mode = 0
+shadow_mesh = SubResource("ArrayMesh_8a087")
+
+[sub_resource type="BoxShape3D" id="BoxShape3D_dpscj"]
+size = Vector3(1.49783, 1.38835, 3.94168)
+
+[node name="TrailerTruck" type="Node3D"]
+
+[node name="Body" type="VehicleBody3D" parent="."]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.00169557, 0.222867, -0.0955184)
+center_of_mass_mode = 1
+script = ExtResource("1_wetfm")
+
+[node name="Wheel1" type="VehicleWheel3D" parent="Body"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.573678, 0.000773743, 1.10416)
+use_as_traction = true
+use_as_steering = true
+wheel_roll_influence = 0.4
+wheel_radius = 0.23
+wheel_friction_slip = 1.0
+suspension_stiffness = 28.0
+damping_compression = 0.88
+
+[node name="Wheel1" type="MeshInstance3D" parent="Body/Wheel1"]
+layers = 2
+gi_mode = 2
+mesh = ExtResource("2_q28iu")
+
+[node name="Wheel2" type="VehicleWheel3D" parent="Body"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.573678, 0.000773743, -0.783403)
+use_as_traction = true
+wheel_roll_influence = 0.4
+wheel_radius = 0.23
+wheel_friction_slip = 1.0
+suspension_stiffness = 28.0
+damping_compression = 0.88
+
+[node name="Wheel2" type="MeshInstance3D" parent="Body/Wheel2"]
+layers = 2
+gi_mode = 2
+mesh = ExtResource("2_q28iu")
+
+[node name="Wheel3" type="VehicleWheel3D" parent="Body"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.573678, 0.000773743, 1.10416)
+use_as_traction = true
+use_as_steering = true
+wheel_roll_influence = 0.4
+wheel_radius = 0.23
+wheel_friction_slip = 1.0
+suspension_stiffness = 28.0
+damping_compression = 0.88
+
+[node name="Wheel3" type="MeshInstance3D" parent="Body/Wheel3"]
+layers = 2
+gi_mode = 2
+mesh = ExtResource("2_q28iu")
+
+[node name="Wheel4" type="VehicleWheel3D" parent="Body"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.573678, 0.000773743, -0.783403)
+use_as_traction = true
+wheel_roll_influence = 0.4
+wheel_radius = 0.23
+wheel_friction_slip = 1.0
+suspension_stiffness = 28.0
+damping_compression = 0.88
+
+[node name="Wheel4" type="MeshInstance3D" parent="Body/Wheel4"]
+layers = 2
+gi_mode = 2
+mesh = ExtResource("2_q28iu")
+
+[node name="Body" type="MeshInstance3D" parent="Body"]
+layers = 2
+gi_mode = 2
+mesh = ExtResource("3_t1je7")
+
+[node name="CollisionShape3D" type="CollisionShape3D" parent="Body"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.571059, 0.132248)
+shape = SubResource("BoxShape3D_itmot")
+
+[node name="CameraBase" type="Node3D" parent="Body"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.97449, 0)
+
+[node name="Camera3D" type="Camera3D" parent="Body/CameraBase"]
+transform = Transform3D(-1, 2.11495e-08, -8.48259e-08, 0, 0.970296, 0.241922, 8.74227e-08, 0.241922, -0.970295, 0, 2.032, -4.394)
+current = true
+fov = 74.0
+near = 0.1
+script = ExtResource("4_4yhuf")
+min_distance = 5.0
+max_distance = 7.0
+height = 2.5
+
+[node name="EngineSound" type="AudioStreamPlayer3D" parent="Body"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.00169557, -0.222867, 0.0955184)
+stream = ExtResource("6_r21ue")
+pitch_scale = 0.05
+autoplay = true
+attenuation_filter_cutoff_hz = 20500.0
+
+[node name="ImpactSound" type="AudioStreamPlayer3D" parent="Body"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.00169557, -0.222867, 0.0955184)
+stream = SubResource("AudioStreamRandomizer_xu0em")
+volume_db = -9.0
+max_polyphony = 3
+attenuation_filter_cutoff_hz = 20500.0
+
+[node name="CPUParticles3D" type="CPUParticles3D" parent="Body"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.201696, -0.022867, -1.10448)
+amount = 125
+lifetime = 1.25
+mesh = SubResource("QuadMesh_q42ka")
+direction = Vector3(0, 1, -0.5)
+gravity = Vector3(0, 0, 0)
+initial_velocity_min = 1.0
+initial_velocity_max = 1.0
+damping_min = 0.05
+damping_max = 0.05
+angle_max = 360.0
+scale_amount_curve = SubResource("Curve_n4o5r")
+color_ramp = SubResource("Gradient_cj6wi")
+
+[node name="BlobShadow" type="Decal" parent="Body"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.00169557, -0.222867, 0.145518)
+size = Vector3(1.6, 4, 3)
+texture_albedo = ExtResource("11_ifj1h")
+upper_fade = 2.0
+lower_fade = 1.0
+cull_mask = 1048573
+
+[node name="AudioListener3D" type="AudioListener3D" parent="Body"]
+current = true
+
+[node name="InteriorCameraPosition" type="Marker3D" parent="Body"]
+transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 0.9, 0.3)
+
+[node name="TopDownCameraPosition" type="Marker3D" parent="Body"]
+transform = Transform3D(-1, 8.74228e-08, 0, 3.82137e-15, 4.37114e-08, 1, 8.74228e-08, 1, -4.37114e-08, 0.00169557, 15.7771, 0.0955178)
+
+[node name="Trailer" type="VehicleBody3D" parent="."]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.00169557, 0.637902, -2.78118)
+center_of_mass_mode = 1
+
+[node name="TWheel1" type="VehicleWheel3D" parent="Trailer"]
+transform = Transform3D(1, 0, 0, 0, 1, -1.49012e-08, 0, 0, 1, 0.573678, -0.402732, -1.53277)
+wheel_roll_influence = 0.4
+wheel_radius = 0.1
+wheel_friction_slip = 1.0
+suspension_stiffness = 28.0
+damping_compression = 0.88
+
+[node name="TWheel1" type="MeshInstance3D" parent="Trailer/TWheel1"]
+layers = 2
+gi_mode = 2
+mesh = ExtResource("2_q28iu")
+
+[node name="TWheel2" type="VehicleWheel3D" parent="Trailer"]
+transform = Transform3D(1, 0, 0, 0, 1, -1.49012e-08, 0, 0, 1, 0.573678, -0.402732, -0.600809)
+wheel_roll_influence = 0.4
+wheel_radius = 0.23
+wheel_friction_slip = 1.0
+suspension_stiffness = 28.0
+damping_compression = 0.88
+
+[node name="TWheel2" type="MeshInstance3D" parent="Trailer/TWheel2"]
+layers = 2
+gi_mode = 2
+mesh = ExtResource("2_q28iu")
+
+[node name="TWheel3" type="VehicleWheel3D" parent="Trailer"]
+transform = Transform3D(1, 0, 0, 0, 1, -1.49012e-08, 0, 0, 1, -0.573678, -0.402732, -1.53277)
+wheel_roll_influence = 0.4
+wheel_radius = 0.1
+wheel_friction_slip = 1.0
+suspension_stiffness = 28.0
+damping_compression = 0.88
+
+[node name="TWheel3" type="MeshInstance3D" parent="Trailer/TWheel3"]
+layers = 2
+gi_mode = 2
+mesh = ExtResource("2_q28iu")
+
+[node name="TWheel4" type="VehicleWheel3D" parent="Trailer"]
+transform = Transform3D(1, 0, 0, 0, 1, -1.49012e-08, 0, 0, 1, -0.573678, -0.402732, -0.600809)
+wheel_roll_influence = 0.4
+wheel_radius = 0.23
+wheel_friction_slip = 1.0
+suspension_stiffness = 20.0
+damping_compression = 0.88
+
+[node name="TWheel4" type="MeshInstance3D" parent="Trailer/TWheel4"]
+layers = 2
+gi_mode = 2
+mesh = ExtResource("2_q28iu")
+
+[node name="Trailer" type="MeshInstance3D" parent="Trailer"]
+layers = 2
+gi_mode = 2
+mesh = SubResource("ArrayMesh_e2bcg")
+
+[node name="BlobShadow" type="Decal" parent="Trailer/Trailer"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.00339114, -0.160769, 0.0766983)
+size = Vector3(1.2, 4, 4.2)
+texture_albedo = ExtResource("11_ifj1h")
+upper_fade = 2.0
+lower_fade = 1.0
+cull_mask = 1048573
+
+[node name="CollisionShape3D" type="CollisionShape3D" parent="Trailer"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.383046, -0.0335202)
+shape = SubResource("BoxShape3D_dpscj")
+
+[node name="BlobShadow" type="Decal" parent="Trailer"]
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.003, -0.661, -1.05)
+size = Vector3(1.6, 4, 1.8)
+texture_albedo = ExtResource("11_ifj1h")
+upper_fade = 2.0
+lower_fade = 1.0
+cull_mask = 1048573
+
+[node name="PinJoint3D" type="ConeTwistJoint3D" parent="."]
+transform = Transform3D(-4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0, 1, 0, 0.704587, -0.960112)
+node_a = NodePath("../Trailer")
+node_b = NodePath("../Body")
+swing_span = 30.0
+twist_span = 45.0
diff --git a/vehicles/truck_trailer.png b/vehicles/truck_trailer.png
new file mode 100644
index 0000000..7aa994c
Binary files /dev/null and b/vehicles/truck_trailer.png differ
diff --git a/vehicles/truck_trailer.png.import b/vehicles/truck_trailer.png.import
new file mode 100644
index 0000000..63691fe
--- /dev/null
+++ b/vehicles/truck_trailer.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://q7uvsiqefkwr"
+path="res://.godot/imported/truck_trailer.png-37383ff0a7e2053e450f6ec8ff2bdcae.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://vehicles/truck_trailer.png"
+dest_files=["res://.godot/imported/truck_trailer.png-37383ff0a7e2053e450f6ec8ff2bdcae.ctex"]
+
+[params]
+
+compress/mode=0
+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/vehicles/truck_trailer.tres b/vehicles/truck_trailer.tres
new file mode 100644
index 0000000..dd8f432
--- /dev/null
+++ b/vehicles/truck_trailer.tres
@@ -0,0 +1,8 @@
+[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://dyg750wqca86r"]
+
+[ext_resource type="Texture2D" uid="uid://q7uvsiqefkwr" path="res://vehicles/truck_trailer.png" id="1_jkh55"]
+
+[resource]
+albedo_texture = ExtResource("1_jkh55")
+roughness = 0.6
+texture_filter = 5
diff --git a/vehicles/vehicle.gd b/vehicles/vehicle.gd
new file mode 100644
index 0000000..b74c241
--- /dev/null
+++ b/vehicles/vehicle.gd
@@ -0,0 +1,61 @@
+extends VehicleBody3D
+
+const STEER_SPEED = 1.5
+const STEER_LIMIT = 0.4
+const BRAKE_STRENGTH = 2.0
+
+@export var engine_force_value := 40.0
+
+var previous_speed := linear_velocity.length()
+var _steer_target := 0.0
+
+@onready var desired_engine_pitch: float = $EngineSound.pitch_scale
+
+func _physics_process(delta: float):
+ var fwd_mps := (linear_velocity * transform.basis).x
+
+ _steer_target = Input.get_axis(&"turn_right", &"turn_left")
+ _steer_target *= STEER_LIMIT
+
+ # Engine sound simulation (not realistic, as this car script has no notion of gear or engine RPM).
+ desired_engine_pitch = 0.05 + linear_velocity.length() / (engine_force_value * 0.5)
+ # Change pitch smoothly to avoid abrupt change on collision.
+ $EngineSound.pitch_scale = lerpf($EngineSound.pitch_scale, desired_engine_pitch, 0.2)
+
+ if abs(linear_velocity.length() - previous_speed) > 1.0:
+ # Sudden velocity change, likely due to a collision. Play an impact sound to give audible feedback,
+ # and vibrate for haptic feedback.
+ $ImpactSound.play()
+ Input.vibrate_handheld(100)
+ for joypad in Input.get_connected_joypads():
+ Input.start_joy_vibration(joypad, 0.0, 0.5, 0.1)
+
+ # Automatically accelerate when using touch controls (reversing overrides acceleration).
+ if DisplayServer.is_touchscreen_available() or Input.is_action_pressed(&"accelerate"):
+ # Increase engine force at low speeds to make the initial acceleration faster.
+ var speed := linear_velocity.length()
+ if speed < 5.0 and not is_zero_approx(speed):
+ engine_force = clampf(engine_force_value * 5.0 / speed, 0.0, 100.0)
+ else:
+ engine_force = engine_force_value
+
+ if not DisplayServer.is_touchscreen_available():
+ # Apply analog throttle factor for more subtle acceleration if not fully holding down the trigger.
+ engine_force *= Input.get_action_strength(&"accelerate")
+ else:
+ engine_force = 0.0
+
+ if Input.is_action_pressed(&"reverse"):
+ # Increase engine force at low speeds to make the initial reversing faster.
+ var speed := linear_velocity.length()
+ if speed < 5.0 and not is_zero_approx(speed):
+ engine_force = -clampf(engine_force_value * BRAKE_STRENGTH * 5.0 / speed, 0.0, 100.0)
+ else:
+ engine_force = -engine_force_value * BRAKE_STRENGTH
+
+ # Apply analog brake factor for more subtle braking if not fully holding down the trigger.
+ engine_force *= Input.get_action_strength(&"reverse")
+
+ steering = move_toward(steering, _steer_target, STEER_SPEED * delta)
+
+ previous_speed = linear_velocity.length()