diff --git a/Fonts/Roboto-Regular.ttf b/Fonts/Roboto-Regular.ttf new file mode 100644 index 0000000..2c97eea Binary files /dev/null and b/Fonts/Roboto-Regular.ttf differ diff --git a/Fonts/title.tres b/Fonts/title.tres new file mode 100644 index 0000000..48e0972 --- /dev/null +++ b/Fonts/title.tres @@ -0,0 +1,9 @@ +[gd_resource type="DynamicFont" load_steps=2 format=2] + +[sub_resource type="DynamicFontData" id=1] +font_path = "res://Fonts/Roboto-Regular.ttf" + +[resource] +size = 128 +font_data = SubResource( 1 ) + diff --git a/Resources/ball.png b/Resources/ball.png new file mode 100644 index 0000000..2c33814 Binary files /dev/null and b/Resources/ball.png differ diff --git a/Resources/ball.png.import b/Resources/ball.png.import new file mode 100644 index 0000000..9978b38 --- /dev/null +++ b/Resources/ball.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/ball.png-0c3280ad08e14f6566aaeef4d0612e1c.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Resources/ball.png" +dest_files=[ "res://.import/ball.png-0c3280ad08e14f6566aaeef4d0612e1c.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/Resources/grass.png b/Resources/grass.png new file mode 100644 index 0000000..dee9f1e Binary files /dev/null and b/Resources/grass.png differ diff --git a/Resources/grass.png.import b/Resources/grass.png.import new file mode 100644 index 0000000..eae07de --- /dev/null +++ b/Resources/grass.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/grass.png-ea8eb11baefddc112f9bb25c7c5bb84f.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Resources/grass.png" +dest_files=[ "res://.import/grass.png-ea8eb11baefddc112f9bb25c7c5bb84f.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/Resources/hole.png b/Resources/hole.png new file mode 100644 index 0000000..57089cf Binary files /dev/null and b/Resources/hole.png differ diff --git a/Resources/hole.png.import b/Resources/hole.png.import new file mode 100644 index 0000000..2352a24 --- /dev/null +++ b/Resources/hole.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/hole.png-cf640f704a6730cffbc50c5cbbf4e023.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Resources/hole.png" +dest_files=[ "res://.import/hole.png-cf640f704a6730cffbc50c5cbbf4e023.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/Resources/tileset.tres b/Resources/tileset.tres new file mode 100644 index 0000000..e369538 --- /dev/null +++ b/Resources/tileset.tres @@ -0,0 +1,47 @@ +[gd_resource type="TileSet" load_steps=5 format=2] + +[ext_resource path="res://Resources/grass.png" type="Texture" id=1] +[ext_resource path="res://Resources/wall.png" type="Texture" id=2] +[ext_resource path="res://Resources/hole.png" type="Texture" id=3] + +[sub_resource type="ConvexPolygonShape2D" id=1] +points = PoolVector2Array( 0, 0, 50, 0, 50, 50, 0, 50 ) + +[resource] +0/name = "Grass" +0/texture = ExtResource( 1 ) +0/tex_offset = Vector2( 0, 0 ) +0/modulate = Color( 1, 1, 1, 1 ) +0/region = Rect2( 0, 0, 50, 50 ) +0/tile_mode = 0 +0/occluder_offset = Vector2( 0, 0 ) +0/navigation_offset = Vector2( 0, 0 ) +0/shapes = [ ] +0/z_index = 0 +1/name = "Wall" +1/texture = ExtResource( 2 ) +1/tex_offset = Vector2( 0, 0 ) +1/modulate = Color( 1, 1, 1, 1 ) +1/region = Rect2( 0, 0, 50, 50 ) +1/tile_mode = 0 +1/occluder_offset = Vector2( 0, 0 ) +1/navigation_offset = Vector2( 0, 0 ) +1/shapes = [ { +"autotile_coord": Vector2( 0, 0 ), +"one_way": false, +"one_way_margin": 1.0, +"shape": SubResource( 1 ), +"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 ) +} ] +1/z_index = 0 +2/name = "Hole" +2/texture = ExtResource( 3 ) +2/tex_offset = Vector2( 0, 0 ) +2/modulate = Color( 1, 1, 1, 1 ) +2/region = Rect2( 0, 0, 50, 50 ) +2/tile_mode = 0 +2/occluder_offset = Vector2( 0, 0 ) +2/navigation_offset = Vector2( 0, 0 ) +2/shapes = [ ] +2/z_index = 0 + diff --git a/Resources/tileset_edit.tscn b/Resources/tileset_edit.tscn new file mode 100644 index 0000000..45f7fcb --- /dev/null +++ b/Resources/tileset_edit.tscn @@ -0,0 +1,27 @@ +[gd_scene load_steps=4 format=2] + +[ext_resource path="res://Resources/grass.png" type="Texture" id=1] +[ext_resource path="res://Resources/wall.png" type="Texture" id=2] +[ext_resource path="res://Resources/hole.png" type="Texture" id=3] + +[node name="Node2D" type="Node2D"] + +[node name="Grass" type="Sprite" parent="."] +texture = ExtResource( 1 ) +centered = false + +[node name="Wall" type="Sprite" parent="."] +position = Vector2( 50, 0 ) +texture = ExtResource( 2 ) +centered = false + +[node name="StaticBody2D" type="StaticBody2D" parent="Wall"] + +[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Wall/StaticBody2D"] +polygon = PoolVector2Array( 0, 0, 50, 0, 50, 50, 0, 50 ) + +[node name="Hole" type="Sprite" parent="."] +position = Vector2( 100, 0 ) +texture = ExtResource( 3 ) +centered = false + diff --git a/Resources/wall.png b/Resources/wall.png new file mode 100644 index 0000000..01f5bcf Binary files /dev/null and b/Resources/wall.png differ diff --git a/Resources/wall.png.import b/Resources/wall.png.import new file mode 100644 index 0000000..5ae00f0 --- /dev/null +++ b/Resources/wall.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/wall.png-5fd3e28897256be5a67ec1f6c35e5f75.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Resources/wall.png" +dest_files=[ "res://.import/wall.png-5fd3e28897256be5a67ec1f6c35e5f75.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/Scenes/Assets/Hole.tscn b/Scenes/Assets/Hole.tscn new file mode 100644 index 0000000..f752470 --- /dev/null +++ b/Scenes/Assets/Hole.tscn @@ -0,0 +1,11 @@ +[gd_scene load_steps=2 format=2] + +[sub_resource type="CircleShape2D" id=1] +radius = 7.07107 + +[node name="Hole" type="Area2D"] + +[node name="Area" type="CollisionShape2D" parent="."] +position = Vector2( 25, 25 ) +shape = SubResource( 1 ) + diff --git a/Scenes/Assets/Player.gd b/Scenes/Assets/Player.gd new file mode 100644 index 0000000..9f5c35c --- /dev/null +++ b/Scenes/Assets/Player.gd @@ -0,0 +1,42 @@ +extends KinematicBody2D + +var max_force = 500 +var ball_vector = Vector2() +var collision +var in_motion +var friction = 0.98 + +func _draw(): + if in_motion == false: + draw_line(Vector2(), get_local_mouse_position().clamped(max_force/2), Color(0.0, 0.0, 0.0), 1.0, false) + +func _process(delta): + update() + +func _physics_process(delta): + #Update in_motion variable + check_motion() + + if in_motion == false and Input.is_action_just_pressed("touch_main"): + get_new_vector() + + hit_ball(delta) + + #Apply friction + ball_vector = ball_vector.linear_interpolate(Vector2(0,0), friction * delta) + +func get_new_vector(): + ball_vector = -get_local_mouse_position().clamped(max_force) + +func check_motion(): + if ball_vector.length() < 1: + ball_vector = Vector2() + in_motion = false + else: + in_motion = true + +func hit_ball(delta): + collision = move_and_collide(ball_vector * delta) + if collision: + ball_vector = ball_vector.bounce(collision.normal) + move_and_collide(ball_vector * delta) \ No newline at end of file diff --git a/Scenes/Assets/Player.tscn b/Scenes/Assets/Player.tscn new file mode 100644 index 0000000..fc05a14 --- /dev/null +++ b/Scenes/Assets/Player.tscn @@ -0,0 +1,19 @@ +[gd_scene load_steps=4 format=2] + +[ext_resource path="res://Scenes/Assets/Player.gd" type="Script" id=1] +[ext_resource path="res://Resources/ball.png" type="Texture" id=2] + +[sub_resource type="CircleShape2D" id=1] +custom_solver_bias = 1.0 +radius = 25.0 + +[node name="Player" type="KinematicBody2D"] +scale = Vector2( 0.5, 0.5 ) +script = ExtResource( 1 ) + +[node name="Sprite" type="Sprite" parent="."] +texture = ExtResource( 2 ) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource( 1 ) + diff --git a/Scenes/GUI/Menu.gd b/Scenes/GUI/Menu.gd new file mode 100644 index 0000000..b15c2e3 --- /dev/null +++ b/Scenes/GUI/Menu.gd @@ -0,0 +1,7 @@ +extends Control + +var TestLevel = preload("res://Scenes/Levels/TestLevel.tscn") + +func _on_Test_pressed(): +#warning-ignore:return_value_discarded + get_tree().change_scene_to(TestLevel) diff --git a/Scenes/GUI/Menu.tscn b/Scenes/GUI/Menu.tscn new file mode 100644 index 0000000..adda085 --- /dev/null +++ b/Scenes/GUI/Menu.tscn @@ -0,0 +1,35 @@ +[gd_scene load_steps=5 format=2] + +[ext_resource path="res://Scenes/GUI/Menu.gd" type="Script" id=1] +[ext_resource path="res://Fonts/title.tres" type="DynamicFont" id=2] + +[sub_resource type="DynamicFontData" id=1] +font_path = "res://Fonts/Roboto-Regular.ttf" + +[sub_resource type="DynamicFont" id=2] +size = 24 +font_data = SubResource( 1 ) + +[node name="Menu" type="Control"] +anchor_right = 1.0 +anchor_bottom = 1.0 +script = ExtResource( 1 ) + +[node name="Title" type="Label" parent="."] +margin_right = 1024.0 +margin_bottom = 600.0 +custom_fonts/font = ExtResource( 2 ) +text = "Gulf +" +align = 1 +valign = 1 + +[node name="Test" type="Button" parent="."] +margin_left = 410.0 +margin_top = 340.0 +margin_right = 615.0 +margin_bottom = 400.0 +custom_fonts/font = SubResource( 2 ) +text = "Test Level" + +[connection signal="pressed" from="Test" to="." method="_on_Test_pressed"] diff --git a/Scenes/GUI/Splash.gd b/Scenes/GUI/Splash.gd new file mode 100644 index 0000000..6787627 --- /dev/null +++ b/Scenes/GUI/Splash.gd @@ -0,0 +1,19 @@ +extends Control + +var Menu = preload("res://Scenes/GUI/Menu.tscn") + +func _input(event): + + #Skip splash screen on mouse click + if event is InputEventMouseButton: + if event.button_index == BUTTON_LEFT and event.pressed: + get_node("Splash").hide() + +func _on_Timer_timeout(): + get_node("Splash").hide() + + +func _on_Splash_hide(): + #Show menu when splash disappears + var menuScene = Menu.instance() + add_child(menuScene) diff --git a/Scenes/GUI/Splash.tscn b/Scenes/GUI/Splash.tscn new file mode 100644 index 0000000..ae96478 --- /dev/null +++ b/Scenes/GUI/Splash.tscn @@ -0,0 +1,26 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://Scenes/GUI/Splash.gd" type="Script" id=1] +[ext_resource path="res://Fonts/title.tres" type="DynamicFont" id=2] + + +[node name="Splash" type="Control"] +anchor_right = 1.0 +anchor_bottom = 1.0 +script = ExtResource( 1 ) + +[node name="Splash" type="Label" parent="."] +margin_right = 1024.0 +margin_bottom = 600.0 +custom_fonts/font = ExtResource( 2 ) +text = "Gulf" +align = 1 +valign = 1 + +[node name="Timer" type="Timer" parent="."] +wait_time = 5.0 +one_shot = true +autostart = true + +[connection signal="hide" from="Splash" to="." method="_on_Splash_hide"] +[connection signal="timeout" from="Timer" to="." method="_on_Timer_timeout"] diff --git a/Scenes/Levels/TestLevel.gd b/Scenes/Levels/TestLevel.gd new file mode 100644 index 0000000..9c8f5bd --- /dev/null +++ b/Scenes/Levels/TestLevel.gd @@ -0,0 +1,6 @@ +extends Node2D + +func _on_Hole_body_entered(body): + if body.get_name() == "Player": + print("GOAAAAAAAAAAAAAAAAL!") + #get_node("Player").hide() \ No newline at end of file diff --git a/Scenes/Levels/TestLevel.tscn b/Scenes/Levels/TestLevel.tscn new file mode 100644 index 0000000..321da13 --- /dev/null +++ b/Scenes/Levels/TestLevel.tscn @@ -0,0 +1,26 @@ +[gd_scene load_steps=5 format=2] + +[ext_resource path="res://Scenes/Levels/TestLevel.gd" type="Script" id=1] +[ext_resource path="res://Resources/tileset.tres" type="TileSet" id=2] +[ext_resource path="res://Scenes/Assets/Player.tscn" type="PackedScene" id=3] +[ext_resource path="res://Scenes/Assets/Hole.tscn" type="PackedScene" id=4] + +[node name="TestLevel" type="Node2D"] +script = ExtResource( 1 ) + +[node name="TileMap" type="TileMap" parent="."] +tile_set = ExtResource( 2 ) +cell_size = Vector2( 50, 50 ) +format = 1 +tile_data = PoolIntArray( 0, 1, 0, 1, 1, 0, 2, 1, 0, 3, 1, 0, 4, 1, 0, 5, 1, 0, 6, 1, 0, 7, 1, 0, 8, 1, 0, 9, 1, 0, 10, 1, 0, 11, 1, 0, 12, 1, 0, 13, 1, 0, 14, 1, 0, 15, 1, 0, 16, 1, 0, 17, 1, 0, 18, 1, 0, 19, 1, 0, 65536, 1, 0, 65537, 0, 0, 65538, 0, 0, 65539, 0, 0, 65540, 0, 0, 65541, 0, 0, 65542, 1, 0, 65543, 0, 0, 65544, 1, 0, 65545, 0, 0, 65546, 0, 0, 65547, 1, 0, 65548, 0, 0, 65549, 1, 0, 65550, 0, 0, 65551, 0, 0, 65552, 0, 0, 65553, 0, 0, 65554, 0, 0, 65555, 1, 0, 131072, 1, 0, 131073, 0, 0, 131074, 0, 0, 131075, 0, 0, 131076, 0, 0, 131077, 0, 0, 131078, 0, 0, 131079, 0, 0, 131080, 1, 0, 131081, 0, 0, 131082, 0, 0, 131083, 1, 0, 131084, 0, 0, 131085, 0, 0, 131086, 0, 0, 131087, 0, 0, 131088, 0, 0, 131089, 2, 0, 131090, 0, 0, 131091, 1, 0, 196608, 1, 0, 196609, 0, 0, 196610, 0, 0, 196611, 0, 0, 196612, 0, 0, 196613, 0, 0, 196614, 1, 0, 196615, 0, 0, 196616, 0, 0, 196617, 0, 0, 196618, 0, 0, 196619, 0, 0, 196620, 0, 0, 196621, 1, 0, 196622, 0, 0, 196623, 0, 0, 196624, 0, 0, 196625, 0, 0, 196626, 0, 0, 196627, 1, 0, 262144, 1, 0, 262145, 0, 0, 262146, 0, 0, 262147, 0, 0, 262148, 0, 0, 262149, 0, 0, 262150, 1, 0, 262151, 0, 0, 262152, 1, 0, 262153, 0, 0, 262154, 0, 0, 262155, 1, 0, 262156, 0, 0, 262157, 1, 0, 262158, 0, 0, 262159, 0, 0, 262160, 0, 0, 262161, 0, 0, 262162, 0, 0, 262163, 1, 0, 327680, 1, 0, 327681, 0, 0, 327682, 0, 0, 327683, 0, 0, 327684, 0, 0, 327685, 1, 0, 327686, 1, 0, 327687, 1, 0, 327688, 1, 0, 327689, 1, 0, 327690, 1, 0, 327691, 1, 0, 327692, 1, 0, 327693, 1, 0, 327694, 1, 0, 327695, 0, 0, 327696, 0, 0, 327697, 0, 0, 327698, 0, 0, 327699, 1, 0, 393216, 1, 0, 393217, 0, 0, 393218, 0, 0, 393219, 0, 0, 393220, 0, 0, 393221, 1, 0, 393222, 1, 0, 393223, 1, 0, 393224, 1, 0, 393225, 1, 0, 393226, 1, 0, 393227, 1, 0, 393228, 1, 0, 393229, 1, 0, 393230, 1, 0, 393231, 0, 0, 393232, 0, 0, 393233, 0, 0, 393234, 0, 0, 393235, 1, 0, 458752, 1, 0, 458753, 0, 0, 458754, 0, 0, 458755, 0, 0, 458756, 0, 0, 458757, 0, 0, 458758, 0, 0, 458759, 0, 0, 458760, 0, 0, 458761, 0, 0, 458762, 0, 0, 458763, 0, 0, 458764, 0, 0, 458765, 0, 0, 458766, 0, 0, 458767, 0, 0, 458768, 0, 0, 458769, 0, 0, 458770, 0, 0, 458771, 1, 0, 524288, 1, 0, 524289, 1, 0, 524290, 1, 0, 524291, 0, 0, 524292, 0, 0, 524293, 1, 0, 524294, 1, 0, 524295, 1, 0, 524296, 1, 0, 524297, 1, 0, 524298, 1, 0, 524299, 1, 0, 524300, 1, 0, 524301, 1, 0, 524302, 1, 0, 524303, 0, 0, 524304, 0, 0, 524305, 1, 0, 524306, 1, 0, 524307, 1, 0, 589824, 1, 0, 589825, 1, 0, 589826, 1, 0, 589827, 0, 0, 589828, 0, 0, 589829, 1, 0, 589830, 0, 0, 589831, 0, 0, 589832, 0, 0, 589833, 1, 0, 589834, 1, 0, 589835, 0, 0, 589836, 0, 0, 589837, 0, 0, 589838, 1, 0, 589839, 0, 0, 589840, 0, 0, 589841, 1, 0, 589842, 1, 0, 589843, 1, 0, 655360, 1, 0, 655361, 1, 0, 655362, 1, 0, 655363, 0, 0, 655364, 0, 0, 655365, 0, 0, 655366, 0, 0, 655367, 1, 0, 655368, 0, 0, 655369, 0, 0, 655370, 0, 0, 655371, 0, 0, 655372, 1, 0, 655373, 0, 0, 655374, 0, 0, 655375, 0, 0, 655376, 0, 0, 655377, 1, 0, 655378, 1, 0, 655379, 1, 0, 720896, 1, 0, 720897, 1, 0, 720898, 1, 0, 720899, 1, 0, 720900, 1, 0, 720901, 1, 0, 720902, 1, 0, 720903, 1, 0, 720904, 1, 0, 720905, 1, 0, 720906, 1, 0, 720907, 1, 0, 720908, 1, 0, 720909, 1, 0, 720910, 1, 0, 720911, 1, 0, 720912, 1, 0, 720913, 1, 0, 720914, 1, 0, 720915, 1, 0 ) +__meta__ = { +"_edit_lock_": true +} + +[node name="Player" parent="." instance=ExtResource( 3 )] +position = Vector2( 160, 150 ) + +[node name="Hole" parent="." instance=ExtResource( 4 )] +position = Vector2( 850, 100 ) + +[connection signal="body_entered" from="Hole" to="." method="_on_Hole_body_entered"] diff --git a/Scenes/Main.gd b/Scenes/Main.gd new file mode 100644 index 0000000..ec405ad --- /dev/null +++ b/Scenes/Main.gd @@ -0,0 +1,8 @@ +extends Node + +var Splash = preload("res://Scenes/GUI/Splash.tscn") + +# Called when the node enters the scene tree for the first time. +func _ready(): +#warning-ignore:return_value_discarded + get_tree().change_scene_to(Splash) diff --git a/Scenes/Main.tscn b/Scenes/Main.tscn new file mode 100644 index 0000000..0320cf9 --- /dev/null +++ b/Scenes/Main.tscn @@ -0,0 +1,7 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://Scenes/Main.gd" type="Script" id=1] + +[node name="Node" type="Node"] +script = ExtResource( 1 ) + diff --git a/default_env.tres b/default_env.tres index 98f26a7..bed4799 100644 --- a/default_env.tres +++ b/default_env.tres @@ -1,5 +1,8 @@ [gd_resource type="Environment" load_steps=2 format=2] + [sub_resource type="ProceduralSky" id=1] + [resource] background_mode = 2 background_sky = SubResource( 1 ) + diff --git a/project.godot b/project.godot index 5cb895b..0b7a2f5 100644 --- a/project.godot +++ b/project.godot @@ -16,8 +16,31 @@ _global_script_class_icons={ [application] config/name="Gulf" +run/main_scene="res://Scenes/Main.tscn" config/icon="res://icon.png" +[display] + +window/size/width=1000 +window/stretch/mode="2d" +window/stretch/aspect="keep" + +[input] + +touch_main={ +"deadzone": 0.5, +"events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":1,"pressed":false,"doubleclick":false,"script":null) + ] +} + +[physics] + +2d/physics_engine="GodotPhysics" +2d/thread_model=2 +2d/sleep_threshold_linear=1.0 +2d/default_gravity_vector=Vector2( 0, 0 ) +3d/default_gravity_vector=Vector3( 0, 0, -1 ) + [rendering] environment/default_environment="res://default_env.tres"