summaryrefslogtreecommitdiff
path: root/demos/2d/space_shooter
diff options
context:
space:
mode:
Diffstat (limited to 'demos/2d/space_shooter')
-rw-r--r--demos/2d/space_shooter/asteroid.scnbin3548 -> 0 bytes
-rw-r--r--demos/2d/space_shooter/asteroid.tscn129
-rw-r--r--demos/2d/space_shooter/enemy1.scnbin3369 -> 0 bytes
-rw-r--r--demos/2d/space_shooter/enemy1.tscn108
-rw-r--r--demos/2d/space_shooter/enemy2.gd2
-rw-r--r--demos/2d/space_shooter/enemy2.scnbin3253 -> 0 bytes
-rw-r--r--demos/2d/space_shooter/enemy2.tscn98
-rw-r--r--demos/2d/space_shooter/enemy_shot.scnbin3218 -> 0 bytes
-rw-r--r--demos/2d/space_shooter/enemy_shot.tscn99
-rw-r--r--demos/2d/space_shooter/engine.cfg2
-rw-r--r--demos/2d/space_shooter/explosion.scnbin1756 -> 0 bytes
-rw-r--r--demos/2d/space_shooter/explosion.tscn37
-rw-r--r--demos/2d/space_shooter/level.scnbin6496 -> 0 bytes
-rw-r--r--demos/2d/space_shooter/level.tscn354
-rw-r--r--demos/2d/space_shooter/level_tiles.resbin720 -> 0 bytes
-rw-r--r--demos/2d/space_shooter/level_tiles.scnbin1825 -> 0 bytes
-rw-r--r--demos/2d/space_shooter/main_menu.gd2
-rw-r--r--demos/2d/space_shooter/main_menu.scnbin1903 -> 0 bytes
-rw-r--r--demos/2d/space_shooter/main_menu.tscn64
-rw-r--r--demos/2d/space_shooter/parallax.scnbin2814 -> 0 bytes
-rw-r--r--demos/2d/space_shooter/parallax.tscn201
-rw-r--r--demos/2d/space_shooter/ship.gd4
-rw-r--r--demos/2d/space_shooter/ship.scnbin4965 -> 0 bytes
-rw-r--r--demos/2d/space_shooter/ship.tscn229
-rw-r--r--demos/2d/space_shooter/shot.scnbin3315 -> 0 bytes
-rw-r--r--demos/2d/space_shooter/shot.tscn103
-rw-r--r--demos/2d/space_shooter/tileset.tres20
-rw-r--r--demos/2d/space_shooter/tileset_edit.tscn35
28 files changed, 1482 insertions, 5 deletions
diff --git a/demos/2d/space_shooter/asteroid.scn b/demos/2d/space_shooter/asteroid.scn
deleted file mode 100644
index 6bca98cd30..0000000000
--- a/demos/2d/space_shooter/asteroid.scn
+++ /dev/null
Binary files differ
diff --git a/demos/2d/space_shooter/asteroid.tscn b/demos/2d/space_shooter/asteroid.tscn
new file mode 100644
index 0000000000..ad57f6ef7c
--- /dev/null
+++ b/demos/2d/space_shooter/asteroid.tscn
@@ -0,0 +1,129 @@
+[gd_scene load_steps=9 format=1]
+
+[ext_resource path="res://asteroid.gd" type="Script" id=1]
+[ext_resource path="res://meteorite.png" type="Texture" id=2]
+[ext_resource path="res://sound_explode.wav" type="Sample" id=3]
+
+[sub_resource type="CircleShape2D" id=1]
+
+custom_solver_bias = 0.0
+radius = 22.0
+
+[sub_resource type="Animation" id=2]
+
+resource/name = "explode"
+length = 1.0
+loop = false
+step = 0.1
+tracks/0/type = "value"
+tracks/0/path = NodePath("particles:config/emitting")
+tracks/0/interp = 1
+tracks/0/keys = { "cont":false, "times":FloatArray( 0, 0.1 ), "transitions":FloatArray( 1, 1 ), "values":[ true, false ] }
+tracks/1/type = "value"
+tracks/1/path = NodePath("sprite:visibility/visible")
+tracks/1/interp = 1
+tracks/1/keys = { "cont":false, "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "values":[ false ] }
+tracks/2/type = "method"
+tracks/2/path = NodePath(".")
+tracks/2/interp = 1
+tracks/2/keys = { "times":FloatArray( 0.7 ), "transitions":FloatArray( 1 ), "values":[ { "args":[ ], "method":"queue_free" } ] }
+
+[sub_resource type="Animation" id=3]
+
+length = 3.0
+loop = true
+step = 0.1
+tracks/0/type = "value"
+tracks/0/path = NodePath("sprite:transform/rot")
+tracks/0/interp = 1
+tracks/0/keys = { "cont":true, "times":FloatArray( 0, 3 ), "transitions":FloatArray( 1, 1 ), "values":[ 0.0, 360.0 ] }
+
+[sub_resource type="ColorRamp" id=4]
+
+offsets = FloatArray( 0, 1 )
+colors = ColorArray( 1, 1, 1, 1, 1, 1, 1, 0 )
+
+[sub_resource type="SampleLibrary" id=5]
+
+samples/sound_explode = { "db":0.0, "pitch":1.0, "sample":ExtResource( 3 ) }
+
+[node name="asteroid" type="Area2D"]
+
+input/pickable = true
+shapes/0/shape = SubResource( 1 )
+shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
+shapes/0/trigger = false
+gravity_vec = Vector2( 0, 1 )
+gravity = 98.0
+linear_damp = 0.1
+angular_damp = 1.0
+script/script = ExtResource( 1 )
+
+[node name="sprite" type="Sprite" parent="."]
+
+texture = ExtResource( 2 )
+
+[node name="anim" type="AnimationPlayer" parent="."]
+
+playback/process_mode = 1
+playback/default_blend_time = 0.0
+root/root = NodePath("..")
+anims/explode = SubResource( 2 )
+anims/spin = SubResource( 3 )
+playback/active = true
+playback/speed = 1.0
+blend_times = [ ]
+autoplay = ""
+
+[node name="collision" type="CollisionShape2D" parent="."]
+
+shape = SubResource( 1 )
+trigger = false
+_update_shape_index = -1
+
+[node name="visibility" type="VisibilityNotifier2D" parent="."]
+
+rect = Rect2( -10, -10, 20, 20 )
+
+[node name="particles" type="Particles2D" parent="."]
+
+config/amount = 32
+config/lifetime = 0.5
+config/emitting = false
+config/half_extents = Vector2( 20, 20 )
+config/explosiveness = 0.1
+config/texture = ExtResource( 2 )
+params/direction = 0.0
+params/spread = 180.0
+params/linear_velocity = 200.0
+params/spin_velocity = 0.0
+params/orbit_velocity = 0.0
+params/gravity_direction = 0.0
+params/gravity_strength = 9.8
+params/radial_accel = 0.0
+params/tangential_accel = 0.0
+params/damping = 0.0
+params/initial_angle = 0.0
+params/initial_size = 0.5
+params/final_size = 0.2
+params/hue_variation = 0.0
+params/anim_speed_scale = 1.0
+params/anim_initial_pos = 0.0
+color/color_ramp = SubResource( 4 )
+
+[node name="sfx" type="SamplePlayer2D" parent="."]
+
+params/volume_db = 0.0
+params/pitch_scale = 1.0
+params/attenuation/min_distance = 1.0
+params/attenuation/max_distance = 2048.0
+params/attenuation/distance_exp = 1.0
+config/polyphony = 1
+config/samples = SubResource( 5 )
+config/pitch_random = 0.0
+
+[connection signal="enter_screen" from="visibility" to="." method="_on_visibility_enter_screen"]
+
+[connection signal="exit_screen" from="visibility" to="." method="_on_visibility_exit_screen"]
+
+
diff --git a/demos/2d/space_shooter/enemy1.scn b/demos/2d/space_shooter/enemy1.scn
deleted file mode 100644
index 805071b772..0000000000
--- a/demos/2d/space_shooter/enemy1.scn
+++ /dev/null
Binary files differ
diff --git a/demos/2d/space_shooter/enemy1.tscn b/demos/2d/space_shooter/enemy1.tscn
new file mode 100644
index 0000000000..5fd4435382
--- /dev/null
+++ b/demos/2d/space_shooter/enemy1.tscn
@@ -0,0 +1,108 @@
+[gd_scene load_steps=9 format=1]
+
+[ext_resource path="res://enemy1.gd" type="Script" id=1]
+[ext_resource path="res://enemy1.png" type="Texture" id=2]
+[ext_resource path="res://explosion.tscn" type="PackedScene" id=3]
+[ext_resource path="res://sound_explode.wav" type="Sample" id=4]
+
+[sub_resource type="ConvexPolygonShape2D" id=1]
+
+custom_solver_bias = 0.0
+points = Vector2Array( -25.3272, 15.4072, -31.2711, -7.28794, -1.01097, -20.7969, 24.9263, -4.58614, 30.3299, 13.2457, -2.63205, 17.5686 )
+
+[sub_resource type="Animation" id=2]
+
+length = 1.0
+loop = false
+step = 0.1
+tracks/0/type = "value"
+tracks/0/path = NodePath("sprite:visibility/visible")
+tracks/0/interp = 1
+tracks/0/keys = { "cont":false, "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "values":[ false ] }
+tracks/1/type = "value"
+tracks/1/path = NodePath("explosion:config/emitting")
+tracks/1/interp = 1
+tracks/1/keys = { "cont":false, "times":FloatArray( 0, 0.1 ), "transitions":FloatArray( 1, 1 ), "values":[ true, false ] }
+tracks/2/type = "method"
+tracks/2/path = NodePath("..")
+tracks/2/interp = 1
+tracks/2/keys = { "times":FloatArray( 0.9 ), "transitions":FloatArray( 1 ), "values":[ { "args":[ ], "method":"queue_free" } ] }
+
+[sub_resource type="Animation" id=3]
+
+length = 2.0
+loop = true
+step = 0.1
+tracks/0/type = "value"
+tracks/0/path = NodePath(".:transform/pos")
+tracks/0/interp = 1
+tracks/0/keys = { "cont":true, "times":FloatArray( 0, 1 ), "transitions":FloatArray( -1.86607, -1.86607 ), "values":[ Vector2( 0, -100 ), Vector2( 0, 100 ) ] }
+
+[sub_resource type="SampleLibrary" id=4]
+
+samples/sound_explode = { "db":0.0, "pitch":1.0, "sample":ExtResource( 4 ) }
+
+[node name="enemy1" type="Node2D"]
+
+[node name="area" type="Area2D" parent="."]
+
+transform/pos = Vector2( 0, -100 )
+input/pickable = true
+shapes/0/shape = SubResource( 1 )
+shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
+shapes/0/trigger = false
+gravity_vec = Vector2( 0, 1 )
+gravity = 98.0
+linear_damp = 0.1
+angular_damp = 1.0
+script/script = ExtResource( 1 )
+
+[node name="collision" type="CollisionPolygon2D" parent="area"]
+
+build_mode = 0
+polygon = Vector2Array( -31.2711, -7.28794, -1.01097, -20.7969, 24.9263, -4.58614, 30.3299, 13.2457, -2.63205, 17.5686, -25.3272, 15.4072 )
+shape_range = Vector2( -1, -1 )
+trigger = false
+
+[node name="sprite" type="Sprite" parent="area"]
+
+texture = ExtResource( 2 )
+
+[node name="explosion" parent="area" instance=ExtResource( 3 )]
+
+transform/rot = -91.1436
+config/explosiveness = 0.1
+params/gravity_strength = 9.8
+
+[node name="anim" type="AnimationPlayer" parent="area"]
+
+playback/process_mode = 1
+playback/default_blend_time = 0.0
+root/root = NodePath("..")
+anims/explode = SubResource( 2 )
+anims/zigzag = SubResource( 3 )
+playback/active = true
+playback/speed = 1.0
+blend_times = [ ]
+autoplay = ""
+
+[node name="visibility" type="VisibilityNotifier2D" parent="area"]
+
+rect = Rect2( -10, -10, 20, 20 )
+
+[node name="sfx" type="SamplePlayer2D" parent="area"]
+
+params/volume_db = 0.0
+params/pitch_scale = 1.0
+params/attenuation/min_distance = 1.0
+params/attenuation/max_distance = 2048.0
+params/attenuation/distance_exp = 1.0
+config/polyphony = 1
+config/samples = SubResource( 4 )
+config/pitch_random = 0.0
+
+[connection signal="enter_screen" from="area/visibility" to="area" method="_on_visibility_enter_screen"]
+
+[connection signal="exit_screen" from="area/visibility" to="area" method="_on_visibility_exit_screen"]
+
+
diff --git a/demos/2d/space_shooter/enemy2.gd b/demos/2d/space_shooter/enemy2.gd
index bfdb743103..cd06579d74 100644
--- a/demos/2d/space_shooter/enemy2.gd
+++ b/demos/2d/space_shooter/enemy2.gd
@@ -17,7 +17,7 @@ func _process(delta):
shoot_timeout = SHOOT_INTERVAL
# Instance a shot
- var shot = preload("res://enemy_shot.scn").instance()
+ var shot = preload("res://enemy_shot.tscn").instance()
# Set pos as "shoot_from" Position2D node
shot.set_pos(get_node("shoot_from").get_global_pos())
# Add it to parent, so it has world coordinates
diff --git a/demos/2d/space_shooter/enemy2.scn b/demos/2d/space_shooter/enemy2.scn
deleted file mode 100644
index 644add77aa..0000000000
--- a/demos/2d/space_shooter/enemy2.scn
+++ /dev/null
Binary files differ
diff --git a/demos/2d/space_shooter/enemy2.tscn b/demos/2d/space_shooter/enemy2.tscn
new file mode 100644
index 0000000000..56d9f49720
--- /dev/null
+++ b/demos/2d/space_shooter/enemy2.tscn
@@ -0,0 +1,98 @@
+[gd_scene load_steps=8 format=1]
+
+[ext_resource path="res://enemy2.gd" type="Script" id=1]
+[ext_resource path="res://enemy2.png" type="Texture" id=2]
+[ext_resource path="res://explosion.tscn" type="PackedScene" id=3]
+[ext_resource path="res://sound_explode.wav" type="Sample" id=4]
+
+[sub_resource type="ConvexPolygonShape2D" id=1]
+
+custom_solver_bias = 0.0
+points = Vector2Array( -31.9306, -11.1163, 15.748, -16.1351, 32.2383, -3.94662, 25.7856, 13.6192, -20.4591, 16.1286 )
+
+[sub_resource type="Animation" id=2]
+
+length = 1.0
+loop = false
+step = 0.1
+tracks/0/type = "value"
+tracks/0/path = NodePath("explosion:config/emitting")
+tracks/0/interp = 1
+tracks/0/keys = { "cont":false, "times":FloatArray( 0, 0.1 ), "transitions":FloatArray( 1, 1 ), "values":[ true, false ] }
+tracks/1/type = "value"
+tracks/1/path = NodePath("sprite:visibility/visible")
+tracks/1/interp = 1
+tracks/1/keys = { "cont":false, "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "values":[ false ] }
+tracks/2/type = "method"
+tracks/2/path = NodePath(".")
+tracks/2/interp = 1
+tracks/2/keys = { "times":FloatArray( 0.9 ), "transitions":FloatArray( 1 ), "values":[ { "args":[ ], "method":"queue_free" } ] }
+
+[sub_resource type="SampleLibrary" id=3]
+
+samples/sound_explode = { "db":0.0, "pitch":1.0, "sample":ExtResource( 4 ) }
+
+[node name="enemy2" type="Area2D"]
+
+input/pickable = true
+shapes/0/shape = SubResource( 1 )
+shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
+shapes/0/trigger = false
+gravity_vec = Vector2( 0, 1 )
+gravity = 98.0
+linear_damp = 0.1
+angular_damp = 1.0
+script/script = ExtResource( 1 )
+
+[node name="collision" type="CollisionPolygon2D" parent="."]
+
+build_mode = 0
+polygon = Vector2Array( -31.9306, -11.1163, 15.748, -16.1351, 32.2383, -3.94662, 25.7856, 13.6192, -20.4591, 16.1286 )
+shape_range = Vector2( -1, -1 )
+trigger = false
+
+[node name="sprite" type="Sprite" parent="."]
+
+texture = ExtResource( 2 )
+
+[node name="explosion" parent="." instance=ExtResource( 3 )]
+
+transform/rot = -91.1436
+config/explosiveness = 0.1
+params/gravity_strength = 9.8
+
+[node name="anim" type="AnimationPlayer" parent="."]
+
+playback/process_mode = 1
+playback/default_blend_time = 0.0
+root/root = NodePath("..")
+anims/explode = SubResource( 2 )
+playback/active = true
+playback/speed = 1.0
+blend_times = [ ]
+autoplay = ""
+
+[node name="visibility" type="VisibilityNotifier2D" parent="."]
+
+rect = Rect2( -10, -10, 20, 20 )
+
+[node name="sfx" type="SamplePlayer2D" parent="."]
+
+params/volume_db = 0.0
+params/pitch_scale = 1.0
+params/attenuation/min_distance = 1.0
+params/attenuation/max_distance = 2048.0
+params/attenuation/distance_exp = 1.0
+config/polyphony = 1
+config/samples = SubResource( 3 )
+config/pitch_random = 0.0
+
+[node name="shoot_from" type="Position2D" parent="."]
+
+transform/pos = Vector2( -84.6027, 0.358482 )
+
+[connection signal="enter_screen" from="visibility" to="." method="_on_visibility_enter_screen"]
+
+[connection signal="exit_screen" from="visibility" to="." method="_on_visibility_exit_screen"]
+
+
diff --git a/demos/2d/space_shooter/enemy_shot.scn b/demos/2d/space_shooter/enemy_shot.scn
deleted file mode 100644
index 353c9058f7..0000000000
--- a/demos/2d/space_shooter/enemy_shot.scn
+++ /dev/null
Binary files differ
diff --git a/demos/2d/space_shooter/enemy_shot.tscn b/demos/2d/space_shooter/enemy_shot.tscn
new file mode 100644
index 0000000000..da6ed6f806
--- /dev/null
+++ b/demos/2d/space_shooter/enemy_shot.tscn
@@ -0,0 +1,99 @@
+[gd_scene load_steps=6 format=1]
+
+[ext_resource path="res://enemy_shot.gd" type="Script" id=1]
+[ext_resource path="res://enemy_shot.png" type="Texture" id=2]
+
+[sub_resource type="RectangleShape2D" id=1]
+
+custom_solver_bias = 0.0
+extents = Vector2( 10, 4 )
+
+[sub_resource type="ColorRamp" id=2]
+
+offsets = FloatArray( 0, 1 )
+colors = ColorArray( 1, 0.0491249, 0.0113636, 1, 1, 1, 1, 0 )
+
+[sub_resource type="Animation" id=3]
+
+length = 1.0
+loop = false
+step = 0.1
+tracks/0/type = "value"
+tracks/0/path = NodePath("hit_splash:config/emitting")
+tracks/0/interp = 1
+tracks/0/keys = { "cont":false, "times":FloatArray( 0, 0.1 ), "transitions":FloatArray( 1, 1 ), "values":[ true, false ] }
+tracks/1/type = "method"
+tracks/1/path = NodePath(".")
+tracks/1/interp = 1
+tracks/1/keys = { "times":FloatArray( 0.9 ), "transitions":FloatArray( 1 ), "values":[ { "args":[ ], "method":"queue_free" } ] }
+tracks/2/type = "value"
+tracks/2/path = NodePath("sprite:visibility/visible")
+tracks/2/interp = 1
+tracks/2/keys = { "cont":false, "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "values":[ false ] }
+
+[node name="enemy_shot" type="Area2D"]
+
+input/pickable = true
+shapes/0/shape = SubResource( 1 )
+shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
+shapes/0/trigger = false
+gravity_vec = Vector2( 0, 1 )
+gravity = 98.0
+linear_damp = 0.1
+angular_damp = 1.0
+script/script = ExtResource( 1 )
+
+[node name="visibility" type="VisibilityNotifier2D" parent="."]
+
+transform/pos = Vector2( 1.8353, -0.0742126 )
+transform/scale = Vector2( 1.54149, 0.770745 )
+rect = Rect2( -10, -10, 20, 20 )
+
+[node name="sprite" type="Sprite" parent="."]
+
+texture = ExtResource( 2 )
+
+[node name="collision" type="CollisionShape2D" parent="."]
+
+shape = SubResource( 1 )
+trigger = false
+_update_shape_index = -1
+
+[node name="hit_splash" type="Particles2D" parent="."]
+
+config/amount = 32
+config/lifetime = 0.5
+config/emitting = false
+config/explosiveness = 0.1
+params/direction = 0.0
+params/spread = 180.0
+params/linear_velocity = 50.0
+params/spin_velocity = 0.0
+params/orbit_velocity = 0.0
+params/gravity_direction = 0.0
+params/gravity_strength = 0.0
+params/radial_accel = 0.0
+params/tangential_accel = 0.0
+params/damping = 0.0
+params/initial_angle = 0.0
+params/initial_size = 3.0
+params/final_size = 3.0
+params/hue_variation = 0.0
+params/anim_speed_scale = 1.0
+params/anim_initial_pos = 0.0
+color/color_ramp = SubResource( 2 )
+
+[node name="anim" type="AnimationPlayer" parent="."]
+
+playback/process_mode = 1
+playback/default_blend_time = 0.0
+root/root = NodePath("..")
+anims/splash = SubResource( 3 )
+playback/active = true
+playback/speed = 1.0
+blend_times = [ ]
+autoplay = ""
+
+[connection signal="exit_screen" from="visibility" to="." method="_on_visibility_exit_screen"]
+
+
diff --git a/demos/2d/space_shooter/engine.cfg b/demos/2d/space_shooter/engine.cfg
index 8047cebdd3..8563bd8aa9 100644
--- a/demos/2d/space_shooter/engine.cfg
+++ b/demos/2d/space_shooter/engine.cfg
@@ -1,7 +1,7 @@
[application]
name="Simple Shooter"
-main_scene="res://main_menu.scn"
+main_scene="res://main_menu.tscn"
icon="res://icon.png"
[autoload]
diff --git a/demos/2d/space_shooter/explosion.scn b/demos/2d/space_shooter/explosion.scn
deleted file mode 100644
index 6fc105fac3..0000000000
--- a/demos/2d/space_shooter/explosion.scn
+++ /dev/null
Binary files differ
diff --git a/demos/2d/space_shooter/explosion.tscn b/demos/2d/space_shooter/explosion.tscn
new file mode 100644
index 0000000000..7c8f94be7d
--- /dev/null
+++ b/demos/2d/space_shooter/explosion.tscn
@@ -0,0 +1,37 @@
+[gd_scene load_steps=3 format=1]
+
+[ext_resource path="res://fire.png" type="Texture" id=1]
+
+[sub_resource type="ColorRamp" id=1]
+
+offsets = FloatArray( 0, 0.364725, 0.77494, 1 )
+colors = ColorArray( 1, 1, 1, 1, 1, 0, 0, 1, 0.184473, 0.181601, 0.181345, 1, 1, 1, 1, 0 )
+
+[node name="explosion" type="Particles2D"]
+
+transform/pos = Vector2( 0.918983, -2.11041 )
+transform/rot = -91.1436
+config/amount = 32
+config/lifetime = 0.5
+config/emitting = false
+config/explosiveness = 0.1
+config/texture = ExtResource( 1 )
+params/direction = 0.0
+params/spread = 180.0
+params/linear_velocity = 100.0
+params/spin_velocity = 0.0
+params/orbit_velocity = 0.0
+params/gravity_direction = 0.0
+params/gravity_strength = 9.8
+params/radial_accel = 0.0
+params/tangential_accel = 0.0
+params/damping = 0.0
+params/initial_angle = 0.0
+params/initial_size = 3.0
+params/final_size = 1.0
+params/hue_variation = 0.0
+params/anim_speed_scale = 1.0
+params/anim_initial_pos = 0.0
+color/color_ramp = SubResource( 1 )
+
+
diff --git a/demos/2d/space_shooter/level.scn b/demos/2d/space_shooter/level.scn
deleted file mode 100644
index 6d5f8005f5..0000000000
--- a/demos/2d/space_shooter/level.scn
+++ /dev/null
Binary files differ
diff --git a/demos/2d/space_shooter/level.tscn b/demos/2d/space_shooter/level.tscn
new file mode 100644
index 0000000000..840d66bd5a
--- /dev/null
+++ b/demos/2d/space_shooter/level.tscn
@@ -0,0 +1,354 @@
+[gd_scene load_steps=7 format=1]
+
+[ext_resource path="res://tileset.tres" type="TileSet" id=1]
+[ext_resource path="res://ship.tscn" type="PackedScene" id=2]
+[ext_resource path="res://asteroid.tscn" type="PackedScene" id=3]
+[ext_resource path="res://enemy1.tscn" type="PackedScene" id=4]
+[ext_resource path="res://enemy2.tscn" type="PackedScene" id=5]
+[ext_resource path="res://parallax.tscn" type="PackedScene" id=6]
+
+[node name="Node2D" type="Node2D"]
+
+[node name="TileMap" type="TileMap" parent="."]
+
+mode = 0
+tile_set = ExtResource( 1 )
+cell/size = Vector2( 32, 32 )
+cell/quadrant_size = 16
+cell/custom_transform = Matrix32( 1, 0, 0, 1, 0, 0 )
+cell/half_offset = 2
+cell/tile_origin = 0
+cell/y_sort = false
+collision/use_kinematic = false
+collision/friction = 1.0
+collision/bounce = 0.0
+collision/layers = 1
+collision/mask = 1
+occluder/light_mask = 1
+tile_data = IntArray( 16, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 31, 0, 32, 0, 33, 0, 34, 0, 35, 0, 36, 0, 37, 0, 38, 0, 39, 0, 63, 0, 64, 0, 99, 0, 100, 0, 101, 0, 102, 0, 103, 0, 104, 0, 105, 0, 106, 0, 107, 0, 108, 0, 109, 0, 110, 0, 111, 0, 112, 0, 113, 0, 114, 0, 115, 0, 116, 0, 117, 0, 118, 0, 119, 0, 120, 0, 121, 0, 122, 0, 123, 0, 124, 0, 125, 0, 126, 0, 127, 0, 128, 0, 145, 0, 184, 0, 65556, 0, 65557, 0, 65558, 0, 65559, 0, 65560, 0, 65561, 0, 65562, 0, 65563, 0, 65564, 0, 65565, 0, 65566, 0, 65567, 0, 65568, 0, 65569, 0, 65570, 0, 65571, 0, 65572, 0, 65573, 0, 65574, 0, 65575, 0, 65599, 0, 65600, 0, 65637, 0, 65638, 0, 65639, 0, 65640, 0, 65641, 0, 65642, 0, 65643, 0, 65644, 0, 65645, 0, 65646, 0, 65647, 0, 65648, 0, 65649, 0, 65650, 0, 65651, 0, 65652, 0, 65653, 0, 65654, 0, 65655, 0, 65656, 0, 65657, 0, 65658, 0, 65659, 0, 65660, 0, 65661, 0, 65662, 0, 65663, 0, 65664, 0, 65681, 0, 65720, 0, 131094, 0, 131095, 0, 131096, 0, 131097, 0, 131098, 0, 131099, 0, 131100, 0, 131101, 0, 131102, 0, 131103, 0, 131104, 0, 131105, 0, 131106, 0, 131107, 0, 131108, 0, 131109, 0, 131135, 0, 131136, 0, 131137, 0, 131176, 0, 131177, 0, 131178, 0, 131179, 0, 131180, 0, 131181, 0, 131182, 0, 131183, 0, 131184, 0, 131185, 0, 131186, 0, 131187, 0, 131188, 0, 131189, 0, 131190, 0, 131191, 0, 131192, 0, 131193, 0, 131194, 0, 131195, 0, 131196, 0, 131197, 0, 131198, 0, 131199, 0, 131217, 0, 131256, 0, 196631, 0, 196632, 0, 196633, 0, 196634, 0, 196635, 0, 196636, 0, 196637, 0, 196638, 0, 196639, 0, 196640, 0, 196641, 0, 196642, 0, 196671, 0, 196672, 0, 196673, 0, 196716, 0, 196717, 0, 196718, 0, 196719, 0, 196720, 0, 196721, 0, 196722, 0, 196723, 0, 196724, 0, 196725, 0, 196726, 0, 196727, 0, 196728, 0, 196729, 0, 196730, 0, 196753, 0, 196792, 0, 262169, 0, 262170, 0, 262171, 0, 262172, 0, 262173, 0, 262174, 0, 262175, 0, 262207, 0, 262208, 0, 262209, 0, 262256, 0, 262257, 0, 262258, 0, 262259, 0, 262260, 0, 262261, 0, 262262, 0, 262263, 0, 262289, 0, 262328, 0, 327707, 0, 327708, 0, 327743, 0, 327744, 0, 327825, 0, 327826, 0, 327827, 0, 327828, 0, 327829, 0, 327830, 0, 327831, 0, 327832, 0, 327833, 0, 327834, 0, 327835, 0, 327836, 0, 327845, 0, 327846, 0, 327847, 0, 327848, 0, 327849, 0, 327850, 0, 327851, 0, 327852, 0, 327853, 0, 327854, 0, 327855, 0, 327856, 0, 327857, 0, 327864, 0, 327911, 0, 327912, 0, 328010, 0, 328011, 0, 328012, 0, 328013, 0, 328014, 0, 393372, 0, 393393, 0, 393400, 0, 393445, 0, 393446, 0, 393447, 0, 393448, 0, 393548, 0, 393549, 0, 393550, 0, 458908, 0, 458929, 0, 458936, 0, 458981, 0, 458982, 0, 458983, 0, 524444, 0, 524465, 0, 524472, 0, 524517, 0, 524518, 0, 589980, 0, 590001, 0, 590008, 0, 655516, 0, 655521, 0, 655522, 0, 655523, 0, 655524, 0, 655525, 0, 655526, 0, 655537, 0, 655544, 0, 655646, 0, 721041, 0, 721042, 0, 721043, 0, 721044, 0, 721045, 0, 721046, 0, 721052, 0, 721062, 0, 721073, 0, 721080, 0, 721181, 0, 721182, 0, 721183, 0, 721184, 0, 786577, 0, 786588, 0, 786598, 0, 786616, 0, 786717, 0, 786718, 0, 786719, 0, 786720, 0, 852113, 0, 852124, 0, 852134, 0, 852152, 0, 852253, 0, 852254, 0, 852255, 0, 917573, 0, 917574, 0, 917575, 0, 917576, 0, 917577, 0, 917578, 0, 917579, 0, 917580, 0, 917581, 0, 917582, 0, 917583, 0, 917584, 0, 917585, 0, 917649, 0, 917660, 0, 917670, 0, 917688, 0, 983106, 0, 983107, 0, 983108, 0, 983109, 0, 983110, 0, 983111, 0, 983112, 0, 983113, 0, 983114, 0, 983115, 0, 983116, 0, 983117, 0, 983118, 0, 983119, 0, 983120, 0, 983121, 0, 983122, 0, 983185, 0, 983206, 0, 983224, 0, 1048640, 0, 1048641, 0, 1048642, 0, 1048643, 0, 1048644, 0, 1048645, 0, 1048646, 0, 1048647, 0, 1048648, 0, 1048649, 0, 1048650, 0, 1048651, 0, 1048652, 0, 1048653, 0, 1048654, 0, 1048655, 0, 1048656, 0, 1048657, 0, 1048658, 0, 1048659, 0, 1048721, 0, 1048742, 0, 1048826, 0, 1048828, 0, 1114175, 0, 1114176, 0, 1114177, 0, 1114178, 0, 1114179, 0, 1114180, 0, 1114181, 0, 1114182, 0, 1114183, 0, 1114184, 0, 1114185, 0, 1114186, 0, 1114187, 0, 1114188, 0, 1114189, 0, 1114190, 0, 1114191, 0, 1114192, 0, 1114193, 0, 1114194, 0, 1114195, 0, 1114196, 0, 1114197, 0, 1114198, 0, 1114257, 0, 1114278, 0, 1114360, 0, 1114361, 0, 1114362, 0, 1114363, 0, 1114365, 0, 1114480, 0, 1114481, 0, 1179707, 0, 1179708, 0, 1179709, 0, 1179710, 0, 1179711, 0, 1179712, 0, 1179713, 0, 1179714, 0, 1179715, 0, 1179716, 0, 1179717, 0, 1179718, 0, 1179719, 0, 1179720, 0, 1179721, 0, 1179722, 0, 1179723, 0, 1179724, 0, 1179725, 0, 1179726, 0, 1179727, 0, 1179728, 0, 1179729, 0, 1179730, 0, 1179731, 0, 1179732, 0, 1179733, 0, 1179734, 0, 1179735, 0, 1179736, 0, 1179737, 0, 1179738, 0, 1179739, 0, 1179740, 0, 1179741, 0, 1179793, 0, 1179814, 0, 1179896, 0, 1179898, 0, 1179899, 0, 1179900, 0, 1179901, 0, 1180015, 0, 1180016, 0, 1180017, 0, 1180018, 0, 1180019, 0, 1245244, 0, 1245245, 0, 1245246, 0, 1245247, 0, 1245248, 0, 1245249, 0, 1245250, 0, 1245251, 0, 1245252, 0, 1245253, 0, 1245254, 0, 1245255, 0, 1245256, 0, 1245257, 0, 1245258, 0, 1245259, 0, 1245260, 0, 1245261, 0, 1245262, 0, 1245263, 0, 1245264, 0, 1245265, 0, 1245266, 0, 1245267, 0, 1245268, 0, 1245269, 0, 1245270, 0, 1245271, 0, 1245272, 0, 1245273, 0, 1245274, 0, 1245275, 0, 1245276, 0, 1245277, 0, 1245329, 0, 1245350, 0, 1245432, 0, 1245433, 0, 1245434, 0, 1245435, 0, 1245480, 0, 1245481, 0, 1245482, 0, 1245551, 0, 1245552, 0, 1245553, 0, 1245554, 0, 1310886, 0, 1310905, 0, 1311015, 0, 1311016, 0, 1311017, 0, 1311018, 0 )
+
+[node name="rail" parent="." instance=ExtResource( 2 )]
+
+[node name="enemies" type="Node2D" parent="."]
+
+[node name="asteroid" parent="enemies" instance=ExtResource( 3 )]
+
+transform/pos = Vector2( 1797.52, 105.736 )
+linear_damp = 0.1
+
+[node name="asteroid1" parent="enemies" instance=ExtResource( 3 )]
+
+transform/pos = Vector2( 1666.61, 304.621 )
+linear_damp = 0.1
+
+[node name="asteroid2" parent="enemies" instance=ExtResource( 3 )]
+
+transform/pos = Vector2( 1988.85, 443.086 )
+linear_damp = 0.1
+
+[node name="asteroid3" parent="enemies" instance=ExtResource( 3 )]
+
+transform/pos = Vector2( 2595.58, 103.219 )
+linear_damp = 0.1
+
+[node name="asteroid4" parent="enemies" instance=ExtResource( 3 )]
+
+transform/pos = Vector2( 3229.99, 299.586 )
+linear_damp = 0.1
+
+[node name="asteroid5" parent="enemies" instance=ExtResource( 3 )]
+
+transform/pos = Vector2( 3592.52, 541.269 )
+linear_damp = 0.1
+
+[node name="asteroid6" parent="enemies" instance=ExtResource( 3 )]
+
+transform/pos = Vector2( 4571.84, 216.508 )
+linear_damp = 0.1
+
+[node name="asteroid7" parent="enemies" instance=ExtResource( 3 )]
+
+transform/pos = Vector2( 4571.84, 284.481 )
+linear_damp = 0.1
+
+[node name="asteroid8" parent="enemies" instance=ExtResource( 3 )]
+
+transform/pos = Vector2( 4571.84, 360.007 )
+linear_damp = 0.1
+
+[node name="asteroid9" parent="enemies" instance=ExtResource( 3 )]
+
+transform/pos = Vector2( 5140.8, 108.254 )
+linear_damp = 0.1
+
+[node name="asteroid10" parent="enemies" instance=ExtResource( 3 )]
+
+transform/pos = Vector2( 5168.5, 475.814 )
+linear_damp = 0.1
+
+[node name="asteroid11" parent="enemies" instance=ExtResource( 3 )]
+
+transform/pos = Vector2( 5767.67, 113.289 )
+linear_damp = 0.1
+
+[node name="asteroid12" parent="enemies" instance=ExtResource( 3 )]
+
+transform/pos = Vector2( 6107.53, 480.849 )
+linear_damp = 0.1
+
+[node name="asteroid13" parent="enemies" instance=ExtResource( 3 )]
+
+transform/pos = Vector2( 6364.32, 105.736 )
+linear_damp = 0.1
+
+[node name="asteroid14" parent="enemies" instance=ExtResource( 3 )]
+
+transform/pos = Vector2( 6731.88, 573.997 )
+linear_damp = 0.1
+
+[node name="asteroid15" parent="enemies" instance=ExtResource( 3 )]
+
+transform/pos = Vector2( 7033.99, 166.157 )
+linear_damp = 0.1
+
+[node name="asteroid16" parent="enemies" instance=ExtResource( 3 )]
+
+transform/pos = Vector2( 6424.74, 352.454 )
+linear_damp = 0.1
+
+[node name="asteroid17" parent="enemies" instance=ExtResource( 3 )]
+
+transform/pos = Vector2( 7263.08, 80.5608 )
+linear_damp = 0.1
+
+[node name="asteroid18" parent="enemies" instance=ExtResource( 3 )]
+
+transform/pos = Vector2( 7177.49, 541.269 )
+linear_damp = 0.1
+
+[node name="asteroid19" parent="enemies" instance=ExtResource( 3 )]
+
+transform/pos = Vector2( 7066.71, 344.902 )
+linear_damp = 0.1
+
+[node name="asteroid20" parent="enemies" instance=ExtResource( 3 )]
+
+transform/pos = Vector2( 7655.82, 118.324 )
+linear_damp = 0.1
+
+[node name="asteroid21" parent="enemies" instance=ExtResource( 3 )]
+
+transform/pos = Vector2( 7540.01, 324.762 )
+linear_damp = 0.1
+
+[node name="asteroid22" parent="enemies" instance=ExtResource( 3 )]
+
+transform/pos = Vector2( 7764.07, 566.445 )
+linear_damp = 0.1
+
+[node name="asteroid23" parent="enemies" instance=ExtResource( 3 )]
+
+transform/pos = Vector2( 7872.33, 216.508 )
+linear_damp = 0.1
+
+[node name="asteroid24" parent="enemies" instance=ExtResource( 3 )]
+
+transform/pos = Vector2( 8458.91, 95.666 )
+linear_damp = 0.1
+
+[node name="asteroid25" parent="enemies" instance=ExtResource( 3 )]
+
+transform/pos = Vector2( 8786.19, 231.613 )
+linear_damp = 0.1
+
+[node name="asteroid26" parent="enemies" instance=ExtResource( 3 )]
+
+transform/pos = Vector2( 8599.89, 551.339 )
+linear_damp = 0.1
+
+[node name="asteroid27" parent="enemies" instance=ExtResource( 3 )]
+
+transform/pos = Vector2( 8353.17, 289.516 )
+linear_damp = 0.1
+
+[node name="asteroid28" parent="enemies" instance=ExtResource( 3 )]
+
+transform/pos = Vector2( 8995.14, 95.6658 )
+linear_damp = 0.1
+
+[node name="asteroid29" parent="enemies" instance=ExtResource( 3 )]
+
+transform/pos = Vector2( 9294.73, 579.032 )
+linear_damp = 0.1
+
+[node name="asteroid30" parent="enemies" instance=ExtResource( 3 )]
+
+transform/pos = Vector2( 9392.91, 140.981 )
+linear_damp = 0.1
+
+[node name="asteroid31" parent="enemies" instance=ExtResource( 3 )]
+
+transform/pos = Vector2( 9644.67, 281.963 )
+linear_damp = 0.1
+
+[node name="enemy1" parent="enemies" instance=ExtResource( 4 )]
+
+transform/pos = Vector2( 2920.34, 365.042 )
+
+[node name="enemy2" parent="enemies" instance=ExtResource( 4 )]
+
+transform/pos = Vector2( 3894.62, 506.024 )
+
+[node name="enemy3" parent="enemies" instance=ExtResource( 4 )]
+
+transform/pos = Vector2( 4325.12, 302.104 )
+
+[node name="enemy4" parent="enemies" instance=ExtResource( 4 )]
+
+transform/pos = Vector2( 4753.1, 506.024 )
+
+[node name="enemy5" parent="enemies" instance=ExtResource( 4 )]
+
+transform/pos = Vector2( 5158.43, 211.473 )
+
+[node name="enemy6" parent="enemies" instance=ExtResource( 4 )]
+
+transform/pos = Vector2( 5490.74, 349.937 )
+
+[node name="enemy7" parent="enemies" instance=ExtResource( 4 )]
+
+transform/pos = Vector2( 5765.15, 546.305 )
+
+[node name="enemy8" parent="enemies" instance=ExtResource( 4 )]
+
+transform/pos = Vector2( 6142.78, 244.201 )
+
+[node name="enemy9" parent="enemies" instance=ExtResource( 4 )]
+
+transform/pos = Vector2( 6701.67, 221.543 )
+
+[node name="enemy10" parent="enemies" instance=ExtResource( 4 )]
+
+transform/pos = Vector2( 6701.67, 352.455 )
+
+[node name="enemy11" parent="enemies" instance=ExtResource( 4 )]
+
+transform/pos = Vector2( 6706.71, 500.989 )
+
+[node name="enemy12" parent="enemies" instance=ExtResource( 4 )]
+
+transform/pos = Vector2( 6711.74, 566.445 )
+
+[node name="enemy13" parent="enemies" instance=ExtResource( 4 )]
+
+transform/pos = Vector2( 7157.35, 332.314 )
+
+[node name="enemy14" parent="enemies" instance=ExtResource( 4 )]
+
+transform/pos = Vector2( 7421.69, 511.059 )
+
+[node name="enemy15" parent="enemies" instance=ExtResource( 4 )]
+
+transform/pos = Vector2( 7887.43, 239.166 )
+
+[node name="enemy16" parent="enemies" instance=ExtResource( 4 )]
+
+transform/pos = Vector2( 8463.95, 382.665 )
+
+[node name="enemy17" parent="enemies" instance=ExtResource( 4 )]
+
+transform/pos = Vector2( 9065.64, 244.201 )
+
+[node name="enemy18" parent="enemies" instance=ExtResource( 4 )]
+
+transform/pos = Vector2( 8967.46, 566.445 )
+
+[node name="enemy19" parent="enemies" instance=ExtResource( 4 )]
+
+transform/pos = Vector2( 9483.55, 422.946 )
+
+[node name="enemy20" parent="enemies" instance=ExtResource( 4 )]
+
+transform/pos = Vector2( 9687.47, 234.131 )
+
+[node name="enemy21" parent="enemies" instance=ExtResource( 4 )]
+
+transform/pos = Vector2( 9815.86, 579.033 )
+
+[node name="enemy22" parent="enemies" instance=ExtResource( 4 )]
+
+transform/pos = Vector2( 9815.86, 579.033 )
+
+[node name="enemy2 2" parent="enemies" instance=ExtResource( 5 )]
+
+transform/pos = Vector2( 4759.97, 278.527 )
+linear_damp = 0.1
+
+[node name="enemy23" parent="enemies" instance=ExtResource( 5 )]
+
+transform/pos = Vector2( 6277.15, 559.36 )
+linear_damp = 0.1
+
+[node name="enemy24" parent="enemies" instance=ExtResource( 5 )]
+
+transform/pos = Vector2( 7136.77, 100.438 )
+linear_damp = 0.1
+
+[node name="enemy25" parent="enemies" instance=ExtResource( 5 )]
+
+transform/pos = Vector2( 7766.93, 370.996 )
+linear_damp = 0.1
+
+[node name="enemy26" parent="enemies" instance=ExtResource( 5 )]
+
+transform/pos = Vector2( 7890.23, 309.35 )
+linear_damp = 0.1
+
+[node name="enemy27" parent="enemies" instance=ExtResource( 5 )]
+
+transform/pos = Vector2( 8006.67, 237.43 )
+linear_damp = 0.1
+
+[node name="enemy28" parent="enemies" instance=ExtResource( 5 )]
+
+transform/pos = Vector2( 8664.23, 257.978 )
+linear_damp = 0.1
+
+[node name="enemy29" parent="enemies" instance=ExtResource( 5 )]
+
+transform/pos = Vector2( 8660.8, 357.297 )
+linear_damp = 0.1
+
+[node name="enemy30" parent="enemies" instance=ExtResource( 5 )]
+
+transform/pos = Vector2( 8657.38, 453.191 )
+linear_damp = 0.1
+
+[node name="enemy31" parent="enemies" instance=ExtResource( 5 )]
+
+transform/pos = Vector2( 9475.9, 189.483 )
+linear_damp = 0.1
+
+[node name="enemy32" parent="enemies" instance=ExtResource( 5 )]
+
+transform/pos = Vector2( 9564.95, 234.005 )
+linear_damp = 0.1
+
+[node name="enemy33" parent="enemies" instance=ExtResource( 5 )]
+
+transform/pos = Vector2( 9674.54, 281.952 )
+linear_damp = 0.1
+
+[node name="enemy34" parent="enemies" instance=ExtResource( 5 )]
+
+transform/pos = Vector2( 9575.22, 391.545 )
+linear_damp = 0.1
+
+[node name="enemy35" parent="enemies" instance=ExtResource( 5 )]
+
+transform/pos = Vector2( 9458.78, 446.342 )
+linear_damp = 0.1
+
+[node name="parallax" parent="." instance=ExtResource( 6 )]
+
+
diff --git a/demos/2d/space_shooter/level_tiles.res b/demos/2d/space_shooter/level_tiles.res
deleted file mode 100644
index 8712b8c799..0000000000
--- a/demos/2d/space_shooter/level_tiles.res
+++ /dev/null
Binary files differ
diff --git a/demos/2d/space_shooter/level_tiles.scn b/demos/2d/space_shooter/level_tiles.scn
deleted file mode 100644
index 932be39a29..0000000000
--- a/demos/2d/space_shooter/level_tiles.scn
+++ /dev/null
Binary files differ
diff --git a/demos/2d/space_shooter/main_menu.gd b/demos/2d/space_shooter/main_menu.gd
index a7f242da7b..0c7e0de542 100644
--- a/demos/2d/space_shooter/main_menu.gd
+++ b/demos/2d/space_shooter/main_menu.gd
@@ -8,4 +8,4 @@ func _ready():
func _on_play_pressed():
get_node("/root/game_state").points = 0
- get_tree().change_scene("res://level.scn")
+ get_tree().change_scene("res://level.tscn")
diff --git a/demos/2d/space_shooter/main_menu.scn b/demos/2d/space_shooter/main_menu.scn
deleted file mode 100644
index 91b0b37b14..0000000000
--- a/demos/2d/space_shooter/main_menu.scn
+++ /dev/null
Binary files differ
diff --git a/demos/2d/space_shooter/main_menu.tscn b/demos/2d/space_shooter/main_menu.tscn
new file mode 100644
index 0000000000..e51791611d
--- /dev/null
+++ b/demos/2d/space_shooter/main_menu.tscn
@@ -0,0 +1,64 @@
+[gd_scene load_steps=2 format=1]
+
+[ext_resource path="res://main_menu.gd" type="Script" id=1]
+
+[node name="main_screen" type="Control"]
+
+anchor/right = 1
+anchor/bottom = 1
+focus/ignore_mouse = false
+focus/stop_mouse = true
+size_flags/horizontal = 2
+size_flags/vertical = 2
+margin/left = 0.0
+margin/top = 0.0
+margin/right = 0.0
+margin/bottom = 0.0
+script/script = ExtResource( 1 )
+
+[node name="title" type="Label" parent="."]
+
+focus/ignore_mouse = true
+focus/stop_mouse = true
+size_flags/horizontal = 2
+margin/left = 405.0
+margin/top = 86.0
+margin/right = 547.0
+margin/bottom = 99.0
+text = "S P A C E S H O O T E R"
+percent_visible = 1.0
+lines_skipped = 0
+max_lines_visible = -1
+
+[node name="score" type="Label" parent="."]
+
+focus/ignore_mouse = true
+focus/stop_mouse = true
+size_flags/horizontal = 2
+margin/left = 349.0
+margin/top = 204.0
+margin/right = 585.0
+margin/bottom = 218.0
+text = "HIGH SCORE:"
+align = 1
+percent_visible = 1.0
+lines_skipped = 0
+max_lines_visible = -1
+
+[node name="play" type="Button" parent="."]
+
+focus/ignore_mouse = false
+focus/stop_mouse = true
+size_flags/horizontal = 2
+size_flags/vertical = 2
+margin/left = 412.0
+margin/top = 390.0
+margin/right = 535.0
+margin/bottom = 442.0
+toggle_mode = false
+text = "PLAY"
+flat = false
+
+[connection signal="pressed" from="play" to="." method="_on_play_pressed"]
+
+
diff --git a/demos/2d/space_shooter/parallax.scn b/demos/2d/space_shooter/parallax.scn
deleted file mode 100644
index 2753d16e84..0000000000
--- a/demos/2d/space_shooter/parallax.scn
+++ /dev/null
Binary files differ
diff --git a/demos/2d/space_shooter/parallax.tscn b/demos/2d/space_shooter/parallax.tscn
new file mode 100644
index 0000000000..0cbd0f5b19
--- /dev/null
+++ b/demos/2d/space_shooter/parallax.tscn
@@ -0,0 +1,201 @@
+[gd_scene load_steps=4 format=1]
+
+[ext_resource path="res://bg_gradient.png" type="Texture" id=1]
+[ext_resource path="res://small_star.png" type="Texture" id=2]
+[ext_resource path="res://big_star.png" type="Texture" id=3]
+
+[node name="parallax" type="ParallaxBackground"]
+
+layer = -1
+offset = Vector2( 0, 0 )
+rotation = 0.0
+scale = Vector2( 1, 1 )
+scroll/offset = Vector2( 0, 0 )
+scroll/base_offset = Vector2( 0, 0 )
+scroll/base_scale = Vector2( 1, 1 )
+scroll/limit_begin = Vector2( 0, 0 )
+scroll/limit_end = Vector2( 0, 0 )
+scroll/ignore_camera_zoom = true
+
+[node name="bg_layer" type="ParallaxLayer" parent="."]
+
+motion/scale = Vector2( 0.2, 1 )
+motion/mirroring = Vector2( 1024, 0 )
+
+[node name="gradient" type="Sprite" parent="bg_layer"]
+
+transform/scale = Vector2( 128, 1 )
+texture = ExtResource( 1 )
+centered = false
+
+[node name="Sprite" type="Sprite" parent="bg_layer"]
+
+transform/pos = Vector2( 73.6643, 65.0701 )
+texture = ExtResource( 2 )
+
+[node name="Sprite1" type="Sprite" parent="bg_layer"]
+
+transform/pos = Vector2( 127.685, 206.26 )
+texture = ExtResource( 2 )
+
+[node name="Sprite2" type="Sprite" parent="bg_layer"]
+
+transform/pos = Vector2( 60.1591, 255.369 )
+texture = ExtResource( 2 )
+
+[node name="Sprite3" type="Sprite" parent="bg_layer"]
+
+transform/pos = Vector2( 252.914, 142.418 )
+texture = ExtResource( 2 )
+
+[node name="Sprite4" type="Sprite" parent="bg_layer"]
+
+transform/pos = Vector2( 241.864, 335.172 )
+texture = ExtResource( 2 )
+
+[node name="Sprite5" type="Sprite" parent="bg_layer"]
+
+transform/pos = Vector2( 127.685, 455.491 )
+texture = ExtResource( 2 )
+
+[node name="Sprite6" type="Sprite" parent="bg_layer"]
+
+transform/pos = Vector2( 289.746, 547.571 )
+texture = ExtResource( 2 )
+
+[node name="Sprite7" type="Sprite" parent="bg_layer"]
+
+transform/pos = Vector2( 56.4759, 559.848 )
+texture = ExtResource( 2 )
+
+[node name="Sprite8" type="Sprite" parent="bg_layer"]
+
+transform/pos = Vector2( 487.412, 166.972 )
+texture = ExtResource( 2 )
+
+[node name="Sprite9" type="Sprite" parent="bg_layer"]
+
+transform/pos = Vector2( 358.499, 77.3474 )
+texture = ExtResource( 2 )
+
+[node name="Sprite10" type="Sprite" parent="bg_layer"]
+
+transform/pos = Vector2( 647.018, 71.2088 )
+texture = ExtResource( 2 )
+
+[node name="Sprite11" type="Sprite" parent="bg_layer"]
+
+transform/pos = Vector2( 592.997, 270.102 )
+texture = ExtResource( 2 )
+
+[node name="Sprite12" type="Sprite" parent="bg_layer"]
+
+transform/pos = Vector2( 868.011, 252.914 )
+texture = ExtResource( 2 )
+
+[node name="Sprite13" type="Sprite" parent="bg_layer"]
+
+transform/pos = Vector2( 869.238, 93.308 )
+texture = ExtResource( 2 )
+
+[node name="Sprite14" type="Sprite" parent="bg_layer"]
+
+transform/pos = Vector2( 965.002, 95.7635 )
+texture = ExtResource( 2 )
+
+[node name="Sprite15" type="Sprite" parent="bg_layer"]
+
+transform/pos = Vector2( 968.685, 559.848 )
+texture = ExtResource( 2 )
+
+[node name="Sprite16" type="Sprite" parent="bg_layer"]
+
+transform/pos = Vector2( 815.218, 470.224 )
+texture = ExtResource( 2 )
+
+[node name="Sprite17" type="Sprite" parent="bg_layer"]
+
+transform/pos = Vector2( 475.134, 530.383 )
+texture = ExtResource( 2 )
+
+[node name="Sprite18" type="Sprite" parent="bg_layer"]
+
+transform/pos = Vector2( 550.026, 421.114 )
+texture = ExtResource( 2 )
+
+[node name="Sprite19" type="Sprite" parent="bg_layer"]
+
+transform/pos = Vector2( 696.127, 574.581 )
+texture = ExtResource( 2 )
+
+[node name="Sprite20" type="Sprite" parent="bg_layer"]
+
+transform/pos = Vector2( 990.784, 423.569 )
+texture = ExtResource( 2 )
+
+[node name="bg_layer2" type="ParallaxLayer" parent="."]
+
+motion/scale = Vector2( 0.5, 1 )
+motion/mirroring = Vector2( 1024, 0 )
+
+[node name="Sprite" type="Sprite" parent="bg_layer2"]
+
+transform/pos = Vector2( 88, 114 )
+texture = ExtResource( 3 )
+
+[node name="Sprite1" type="Sprite" parent="bg_layer2"]
+
+transform/pos = Vector2( 349, 254 )
+texture = ExtResource( 3 )
+
+[node name="Sprite2" type="Sprite" parent="bg_layer2"]
+
+transform/pos = Vector2( 472, 80 )
+texture = ExtResource( 3 )
+
+[node name="Sprite3" type="Sprite" parent="bg_layer2"]
+
+transform/pos = Vector2( 803, 107 )
+texture = ExtResource( 3 )
+
+[node name="Sprite4" type="Sprite" parent="bg_layer2"]
+
+transform/pos = Vector2( 93, 363 )
+texture = ExtResource( 3 )
+
+[node name="Sprite5" type="Sprite" parent="bg_layer2"]
+
+transform/pos = Vector2( 891, 519 )
+texture = ExtResource( 3 )
+
+[node name="Sprite6" type="Sprite" parent="bg_layer2"]
+
+transform/pos = Vector2( 934, 338 )
+texture = ExtResource( 3 )
+
+[node name="Sprite7" type="Sprite" parent="bg_layer2"]
+
+transform/pos = Vector2( 665, 332 )
+texture = ExtResource( 3 )
+
+[node name="Sprite8" type="Sprite" parent="bg_layer2"]
+
+transform/pos = Vector2( 218, 423 )
+texture = ExtResource( 3 )
+
+[node name="Sprite9" type="Sprite" parent="bg_layer2"]
+
+transform/pos = Vector2( 564, 568 )
+texture = ExtResource( 3 )
+
+[node name="Sprite10" type="Sprite" parent="bg_layer2"]
+
+transform/pos = Vector2( 753, 466 )
+texture = ExtResource( 3 )
+
+[node name="Sprite11" type="Sprite" parent="bg_layer2"]
+
+transform/pos = Vector2( 77.9999, 570 )
+texture = ExtResource( 3 )
+
+
diff --git a/demos/2d/space_shooter/ship.gd b/demos/2d/space_shooter/ship.gd
index b6c1200632..0bc9ca6b13 100644
--- a/demos/2d/space_shooter/ship.gd
+++ b/demos/2d/space_shooter/ship.gd
@@ -37,7 +37,7 @@ func _process(delta):
if (shooting and not prev_shooting):
# Just pressed
- var shot = preload("res://shot.scn").instance()
+ var shot = preload("res://shot.tscn").instance()
# Use the Position2D as reference
shot.set_pos(get_node("shootfrom").get_global_pos())
# Put it two parents above, so it is not moved by us
@@ -78,4 +78,4 @@ func _on_ship_area_enter(area):
func _on_back_to_menu_pressed():
- get_tree().change_scene("res://main_menu.scn")
+ get_tree().change_scene("res://main_menu.tscn")
diff --git a/demos/2d/space_shooter/ship.scn b/demos/2d/space_shooter/ship.scn
deleted file mode 100644
index c60e2e3e3b..0000000000
--- a/demos/2d/space_shooter/ship.scn
+++ /dev/null
Binary files differ
diff --git a/demos/2d/space_shooter/ship.tscn b/demos/2d/space_shooter/ship.tscn
new file mode 100644
index 0000000000..be6bf6b82e
--- /dev/null
+++ b/demos/2d/space_shooter/ship.tscn
@@ -0,0 +1,229 @@
+[gd_scene load_steps=12 format=1]
+
+[ext_resource path="res://rail.gd" type="Script" id=1]
+[ext_resource path="res://ship.gd" type="Script" id=2]
+[ext_resource path="res://ship.png" type="Texture" id=3]
+[ext_resource path="res://fire.png" type="Texture" id=4]
+[ext_resource path="res://explosion.tscn" type="PackedScene" id=5]
+[ext_resource path="res://sound_shoot.wav" type="Sample" id=6]
+[ext_resource path="res://sound_explode.wav" type="Sample" id=7]
+
+[sub_resource type="ConvexPolygonShape2D" id=1]
+
+custom_solver_bias = 0.0
+points = Vector2Array( 25.9104, 1.3603, -20.5637, 14.8656, -20.5637, -15.3227 )
+
+[sub_resource type="ColorRamp" id=2]
+
+offsets = FloatArray( 0, 0.474062, 0.653631, 1 )
+colors = ColorArray( 0.154794, 0.413313, 0.991004, 1, 0.555474, 0.971578, 0, 1, 0.82934, 0.989088, 0.616085, 0.383915, 1, 1, 1, 0 )
+
+[sub_resource type="Animation" id=3]
+
+length = 1.0
+loop = false
+step = 0.1
+tracks/0/type = "value"
+tracks/0/path = NodePath("sprite:visibility/visible")
+tracks/0/interp = 1
+tracks/0/keys = { "cont":false, "times":FloatArray( 0, 0.1 ), "transitions":FloatArray( 1, 1 ), "values":[ true, false ] }
+tracks/1/type = "value"
+tracks/1/path = NodePath("thruster:config/emitting")
+tracks/1/interp = 1
+tracks/1/keys = { "cont":false, "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "values":[ false ] }
+tracks/2/type = "value"
+tracks/2/path = NodePath("explosion:config/emitting")
+tracks/2/interp = 1
+tracks/2/keys = { "cont":false, "times":FloatArray( 0, 0.1 ), "transitions":FloatArray( 1, 1 ), "values":[ true, false ] }
+
+[sub_resource type="SampleLibrary" id=4]
+
+samples/shoot = { "db":0.0, "pitch":1.0, "sample":ExtResource( 6 ) }
+samples/sound_explode = { "db":0.0, "pitch":1.0, "sample":ExtResource( 7 ) }
+
+[node name="rail" type="Node2D"]
+
+script/script = ExtResource( 1 )
+
+[node name="ship" type="Area2D" parent="."]
+
+transform/pos = Vector2( 253.607, 282.275 )
+input/pickable = true
+shapes/0/shape = SubResource( 1 )
+shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
+shapes/0/trigger = false
+gravity_vec = Vector2( 0, 1 )
+gravity = 98.0
+linear_damp = 0.1
+angular_damp = 1.0
+script/script = ExtResource( 2 )
+
+[node name="sprite" type="Sprite" parent="ship"]
+
+texture = ExtResource( 3 )
+
+[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="ship"]
+
+build_mode = 0
+polygon = Vector2Array( -20.5637, -15.3227, 25.9104, 1.3603, -20.5637, 14.8656 )
+shape_range = Vector2( -1, -1 )
+trigger = false
+
+[node name="thruster" type="Particles2D" parent="ship"]
+
+visibility/blend_mode = 1
+transform/pos = Vector2( -26.528, -0.358481 )
+transform/rot = -91.1436
+config/amount = 32
+config/lifetime = 2.0
+config/time_scale = 5.0
+config/emitting = false
+config/local_space = false
+config/texture = ExtResource( 4 )
+params/direction = 0.0
+params/spread = 10.0
+params/linear_velocity = 20.0
+params/spin_velocity = 0.0
+params/orbit_velocity = 0.0
+params/gravity_direction = 0.0
+params/gravity_strength = 0.0
+params/radial_accel = 0.0
+params/tangential_accel = 0.0
+params/damping = 0.0
+params/initial_angle = 0.0
+params/initial_size = 1.0
+params/final_size = 1.0
+params/hue_variation = 0.0
+params/anim_speed_scale = 1.0
+params/anim_initial_pos = 0.0
+color/color_ramp = SubResource( 2 )
+
+[node name="anim" type="AnimationPlayer" parent="ship"]
+
+playback/process_mode = 1
+playback/default_blend_time = 0.0
+root/root = NodePath("..")
+anims/explode = SubResource( 3 )
+playback/active = true
+playback/speed = 1.0
+blend_times = [ ]
+autoplay = ""
+
+[node name="shootfrom" type="Position2D" parent="ship"]
+
+transform/pos = Vector2( 35.3307, 0.875969 )
+
+[node name="explosion" parent="ship" instance=ExtResource( 5 )]
+
+transform/rot = -91.1436
+config/explosiveness = 0.1
+params/gravity_strength = 9.8
+
+[node name="sfx" type="SamplePlayer" parent="ship"]
+
+config/polyphony = 1
+config/samples = SubResource( 4 )
+default/volume_db = 0.0
+default/pitch_scale = 1.0
+default/pan = 0.0
+default/depth = 0.0
+default/height = 0.0
+default/filter/type = 0
+default/filter/cutoff = 0.0
+default/filter/resonance = 0.0
+default/filter/gain = 0.0
+default/reverb_room = 2
+default/reverb_send = 0.0
+default/chorus_send = 0.0
+
+[node name="camera" type="Camera2D" parent="."]
+
+anchor_mode = 0
+rotating = false
+current = true
+zoom = Vector2( 1, 1 )
+limit/left = -10000000
+limit/top = -10000000
+limit/right = 10000000
+limit/bottom = 10000000
+drag_margin/h_enabled = true
+drag_margin/v_enabled = true
+smoothing/enable = false
+smoothing/speed = 5.0
+drag_margin/left = 0.2
+drag_margin/top = 0.2
+drag_margin/right = 0.2
+drag_margin/bottom = 0.2
+
+[node name="hud" type="CanvasLayer" parent="."]
+
+layer = 1
+offset = Vector2( 0, 0 )
+rotation = 0.0
+scale = Vector2( 1, 1 )
+
+[node name="score" type="Label" parent="hud"]
+
+focus/ignore_mouse = true
+focus/stop_mouse = true
+size_flags/horizontal = 2
+margin/left = 15.0
+margin/top = 13.0
+margin/right = 66.0
+margin/bottom = 26.0
+text = "SCORE:"
+percent_visible = 1.0
+lines_skipped = 0
+max_lines_visible = -1
+
+[node name="score_points" type="Label" parent="hud"]
+
+focus/ignore_mouse = true
+focus/stop_mouse = true
+size_flags/horizontal = 2
+margin/left = 70.0
+margin/top = 13.0
+margin/right = 121.0
+margin/bottom = 26.0
+text = "0"
+align = 1
+percent_visible = 1.0
+lines_skipped = 0
+max_lines_visible = -1
+
+[node name="back_to_menu" type="Button" parent="hud"]
+
+focus/ignore_mouse = false
+focus/stop_mouse = true
+size_flags/horizontal = 2
+size_flags/vertical = 2
+margin/left = 911.0
+margin/top = 10.0
+margin/right = 1006.0
+margin/bottom = 31.0
+toggle_mode = false
+text = "Back to Menu"
+flat = false
+
+[node name="game_over" type="Label" parent="hud"]
+
+visibility/visible = false
+focus/ignore_mouse = true
+focus/stop_mouse = true
+size_flags/horizontal = 2
+margin/left = 482.0
+margin/top = 286.0
+margin/right = 564.0
+margin/bottom = 299.0
+text = "GAME_OVER"
+percent_visible = 1.0
+lines_skipped = 0
+max_lines_visible = -1
+
+[connection signal="body_enter" from="ship" to="ship" method="_on_ship_body_enter"]
+
+[connection signal="area_enter" from="ship" to="ship" method="_on_ship_area_enter"]
+
+[connection signal="pressed" from="hud/back_to_menu" to="ship" method="_on_back_to_menu_pressed"]
+
+
diff --git a/demos/2d/space_shooter/shot.scn b/demos/2d/space_shooter/shot.scn
deleted file mode 100644
index 9daf4ebe82..0000000000
--- a/demos/2d/space_shooter/shot.scn
+++ /dev/null
Binary files differ
diff --git a/demos/2d/space_shooter/shot.tscn b/demos/2d/space_shooter/shot.tscn
new file mode 100644
index 0000000000..2913eaf5b7
--- /dev/null
+++ b/demos/2d/space_shooter/shot.tscn
@@ -0,0 +1,103 @@
+[gd_scene load_steps=6 format=1]
+
+[ext_resource path="res://shot.gd" type="Script" id=1]
+[ext_resource path="res://shoot.png" type="Texture" id=2]
+
+[sub_resource type="RectangleShape2D" id=1]
+
+custom_solver_bias = 0.0
+extents = Vector2( 10, 4 )
+
+[sub_resource type="ColorRamp" id=2]
+
+offsets = FloatArray( 0, 1 )
+colors = ColorArray( 0.238085, 0.881885, 0.983902, 1, 1, 1, 1, 0 )
+
+[sub_resource type="Animation" id=3]
+
+length = 1.0
+loop = false
+step = 0.1
+tracks/0/type = "value"
+tracks/0/path = NodePath("hit_splash:config/emitting")
+tracks/0/interp = 1
+tracks/0/keys = { "cont":false, "times":FloatArray( 0, 0.1 ), "transitions":FloatArray( 1, 1 ), "values":[ true, false ] }
+tracks/1/type = "method"
+tracks/1/path = NodePath(".")
+tracks/1/interp = 1
+tracks/1/keys = { "times":FloatArray( 1 ), "transitions":FloatArray( 1 ), "values":[ { "args":[ ], "method":"queue_free" } ] }
+tracks/2/type = "value"
+tracks/2/path = NodePath("sprite:visibility/visible")
+tracks/2/interp = 1
+tracks/2/keys = { "cont":false, "times":FloatArray( 0 ), "transitions":FloatArray( 1 ), "values":[ false ] }
+
+[node name="shot" type="Area2D"]
+
+input/pickable = true
+shapes/0/shape = SubResource( 1 )
+shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
+shapes/0/trigger = false
+gravity_vec = Vector2( 0, 1 )
+gravity = 98.0
+linear_damp = 0.1
+angular_damp = 1.0
+script/script = ExtResource( 1 )
+
+[node name="visibility" type="VisibilityNotifier2D" parent="."]
+
+transform/pos = Vector2( 1.8353, -0.0742126 )
+transform/scale = Vector2( 1.54149, 0.770745 )
+rect = Rect2( -10, -10, 20, 20 )
+
+[node name="sprite" type="Sprite" parent="."]
+
+texture = ExtResource( 2 )
+
+[node name="collision" type="CollisionShape2D" parent="."]
+
+shape = SubResource( 1 )
+trigger = false
+_update_shape_index = -1
+
+[node name="hit_splash" type="Particles2D" parent="."]
+
+config/amount = 32
+config/lifetime = 0.5
+config/emitting = false
+config/explosiveness = 0.1
+params/direction = 0.0
+params/spread = 180.0
+params/linear_velocity = 50.0
+params/spin_velocity = 0.0
+params/orbit_velocity = 0.0
+params/gravity_direction = 0.0
+params/gravity_strength = 0.0
+params/radial_accel = 0.0
+params/tangential_accel = 0.0
+params/damping = 0.0
+params/initial_angle = 0.0
+params/initial_size = 3.0
+params/final_size = 3.0
+params/hue_variation = 0.0
+params/anim_speed_scale = 1.0
+params/anim_initial_pos = 0.0
+color/color_ramp = SubResource( 2 )
+
+[node name="anim" type="AnimationPlayer" parent="."]
+
+playback/process_mode = 1
+playback/default_blend_time = 0.0
+root/root = NodePath("..")
+anims/splash = SubResource( 3 )
+playback/active = true
+playback/speed = 1.0
+blend_times = [ ]
+autoplay = ""
+
+[connection signal="body_enter" from="." to="." method="_on_shot_body_enter"]
+
+[connection signal="area_enter" from="." to="." method="_on_shot_area_enter"]
+
+[connection signal="exit_screen" from="visibility" to="." method="_on_visibility_exit_screen"]
+
+
diff --git a/demos/2d/space_shooter/tileset.tres b/demos/2d/space_shooter/tileset.tres
new file mode 100644
index 0000000000..0a62a0048e
--- /dev/null
+++ b/demos/2d/space_shooter/tileset.tres
@@ -0,0 +1,20 @@
+[gd_resource type="TileSet" load_steps=3 format=1]
+
+[ext_resource path="res://tile.png" type="Texture" id=1]
+
+[sub_resource type="RectangleShape2D" id=1]
+
+custom_solver_bias = 0.0
+extents = Vector2( 16, 16 )
+
+[resource]
+
+0/name = "block"
+0/texture = ExtResource( 1 )
+0/tex_offset = Vector2( 0, 0 )
+0/region = Rect2( 0, 0, 0, 0 )
+0/occluder_offset = Vector2( 16, 16 )
+0/navigation_offset = Vector2( 16, 16 )
+0/shape_offset = Vector2( 16, 16 )
+0/shapes = [ SubResource( 1 ) ]
+
diff --git a/demos/2d/space_shooter/tileset_edit.tscn b/demos/2d/space_shooter/tileset_edit.tscn
new file mode 100644
index 0000000000..87152a1818
--- /dev/null
+++ b/demos/2d/space_shooter/tileset_edit.tscn
@@ -0,0 +1,35 @@
+[gd_scene load_steps=3 format=1]
+
+[ext_resource path="res://tile.png" type="Texture" id=1]
+
+[sub_resource type="RectangleShape2D" id=1]
+
+custom_solver_bias = 0.0
+extents = Vector2( 16, 16 )
+
+[node name="Node2D" type="Node2D"]
+
+[node name="block" type="Sprite" parent="."]
+
+texture = ExtResource( 1 )
+
+[node name="StaticBody2D" type="StaticBody2D" parent="block"]
+
+input/pickable = false
+shapes/0/shape = SubResource( 1 )
+shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 )
+shapes/0/trigger = false
+collision/layers = 1
+collision/mask = 1
+constant_linear_velocity = Vector2( 0, 0 )
+constant_angular_velocity = 0.0
+friction = 1.0
+bounce = 0.0
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="block/StaticBody2D"]
+
+shape = SubResource( 1 )
+trigger = false
+_update_shape_index = -1
+
+