summaryrefslogtreecommitdiff
path: root/demos/2d
diff options
context:
space:
mode:
authorJuan Linietsky <reduzio@gmail.com>2014-02-09 22:10:30 -0300
committerJuan Linietsky <reduzio@gmail.com>2014-02-09 22:10:30 -0300
commit0b806ee0fc9097fa7bda7ac0109191c9c5e0a1ac (patch)
tree276c4d099e178eb67fbd14f61d77b05e3808e9e3 /demos/2d
parent0e49da1687bc8192ed210947da52c9e5c5f301bb (diff)
GODOT IS OPEN SOURCE
Diffstat (limited to 'demos/2d')
-rw-r--r--demos/2d/particles/engine.cfg5
-rw-r--r--demos/2d/particles/fire_particle.pngbin0 -> 6022 bytes
-rw-r--r--demos/2d/particles/icon.pngbin0 -> 4900 bytes
-rw-r--r--demos/2d/particles/mask.pngbin0 -> 4226 bytes
-rw-r--r--demos/2d/particles/particles.xml246
-rw-r--r--demos/2d/particles/smoke_particle.pngbin0 -> 7008 bytes
-rw-r--r--demos/2d/particles/spark_particle2.pngbin0 -> 428 bytes
-rw-r--r--demos/2d/platformer/bullet.gd20
-rw-r--r--demos/2d/platformer/bullet.pngbin0 -> 319 bytes
-rw-r--r--demos/2d/platformer/bullet.xml285
-rw-r--r--demos/2d/platformer/coin.gd20
-rw-r--r--demos/2d/platformer/coin.pngbin0 -> 3133 bytes
-rw-r--r--demos/2d/platformer/coin.xml437
-rw-r--r--demos/2d/platformer/enemy.gd97
-rw-r--r--demos/2d/platformer/enemy.pngbin0 -> 3552 bytes
-rw-r--r--demos/2d/platformer/enemy.xml481
-rw-r--r--demos/2d/platformer/engine.cfg28
-rw-r--r--demos/2d/platformer/icon.pngbin0 -> 1002 bytes
-rw-r--r--demos/2d/platformer/moving_platform.gd27
-rw-r--r--demos/2d/platformer/moving_platform.pngbin0 -> 2143 bytes
-rw-r--r--demos/2d/platformer/moving_platform.xml196
-rw-r--r--demos/2d/platformer/music.oggbin0 -> 1692019 bytes
-rw-r--r--demos/2d/platformer/osb_fire.pngbin0 -> 2233 bytes
-rw-r--r--demos/2d/platformer/osb_jump.pngbin0 -> 1374 bytes
-rw-r--r--demos/2d/platformer/osb_left.pngbin0 -> 1366 bytes
-rw-r--r--demos/2d/platformer/osb_right.pngbin0 -> 1368 bytes
-rw-r--r--demos/2d/platformer/parallax_bg.xml174
-rw-r--r--demos/2d/platformer/plank.pngbin0 -> 270 bytes
-rw-r--r--demos/2d/platformer/plankpin.pngbin0 -> 253 bytes
-rw-r--r--demos/2d/platformer/player.gd259
-rw-r--r--demos/2d/platformer/player.xml660
-rw-r--r--demos/2d/platformer/robot_demo.pngbin0 -> 12399 bytes
-rw-r--r--demos/2d/platformer/scroll_bg_cloud_1.pngbin0 -> 531 bytes
-rw-r--r--demos/2d/platformer/scroll_bg_cloud_2.pngbin0 -> 719 bytes
-rw-r--r--demos/2d/platformer/scroll_bg_cloud_3.pngbin0 -> 394 bytes
-rw-r--r--demos/2d/platformer/scroll_bg_fg_1.pngbin0 -> 12137 bytes
-rw-r--r--demos/2d/platformer/scroll_bg_fg_2.pngbin0 -> 13073 bytes
-rw-r--r--demos/2d/platformer/scroll_bg_sky.pngbin0 -> 3023 bytes
-rw-r--r--demos/2d/platformer/seesaw.xml197
-rw-r--r--demos/2d/platformer/sound_coin.wavbin0 -> 63952 bytes
-rw-r--r--demos/2d/platformer/sound_explode.wavbin0 -> 75832 bytes
-rw-r--r--demos/2d/platformer/sound_hit.wavbin0 -> 71932 bytes
-rw-r--r--demos/2d/platformer/sound_jump.wavbin0 -> 82076 bytes
-rw-r--r--demos/2d/platformer/sound_shoot.wavbin0 -> 78888 bytes
-rw-r--r--demos/2d/platformer/stage.xml324
-rw-r--r--demos/2d/platformer/tiles_demo.pngbin0 -> 11736 bytes
-rw-r--r--demos/2d/platformer/tileset.xml134
-rw-r--r--demos/2d/platformer/tileset_edit.xml285
-rw-r--r--demos/2d/platformer/types.cache64
-rw-r--r--demos/2d/pong/ball.pngbin0 -> 203 bytes
-rw-r--r--demos/2d/pong/engine.cfg22
-rw-r--r--demos/2d/pong/icon.pngbin0 -> 956 bytes
-rw-r--r--demos/2d/pong/left_pallete.pngbin0 -> 200 bytes
-rw-r--r--demos/2d/pong/pong.gd73
-rw-r--r--demos/2d/pong/pong.xml183
-rw-r--r--demos/2d/pong/right_pallete.pngbin0 -> 202 bytes
-rw-r--r--demos/2d/pong/separator.pngbin0 -> 203 bytes
-rw-r--r--demos/2d/rubegoldberg/art/bowling_ball.pngbin0 -> 4637 bytes
-rw-r--r--demos/2d/rubegoldberg/art/box.pngbin0 -> 3300 bytes
-rw-r--r--demos/2d/rubegoldberg/art/domino.pngbin0 -> 246 bytes
-rw-r--r--demos/2d/rubegoldberg/art/platform.pngbin0 -> 4137 bytes
-rw-r--r--demos/2d/rubegoldberg/art/seesaw_base.pngbin0 -> 2936 bytes
-rw-r--r--demos/2d/rubegoldberg/art/seesaw_top.pngbin0 -> 3636 bytes
-rw-r--r--demos/2d/rubegoldberg/ball.xml191
-rw-r--r--demos/2d/rubegoldberg/box.xml142
-rw-r--r--demos/2d/rubegoldberg/domino.xml143
-rw-r--r--demos/2d/rubegoldberg/engine.cfg10
-rw-r--r--demos/2d/rubegoldberg/icon.pngbin0 -> 3508 bytes
-rw-r--r--demos/2d/rubegoldberg/pendulum.xml233
-rw-r--r--demos/2d/rubegoldberg/platform.xml176
-rw-r--r--demos/2d/rubegoldberg/rubegoldberg.xml190
-rw-r--r--demos/2d/rubegoldberg/seesaw.xml169
-rw-r--r--demos/2d/splash/bg.pngbin0 -> 14419 bytes
-rw-r--r--demos/2d/splash/bg_layer_1.pngbin0 -> 13335 bytes
-rw-r--r--demos/2d/splash/bg_layer_2.pngbin0 -> 16026 bytes
-rw-r--r--demos/2d/splash/button.pngbin0 -> 3666 bytes
-rw-r--r--demos/2d/splash/button_pressed.pngbin0 -> 3573 bytes
-rw-r--r--demos/2d/splash/engine.cfg8
-rw-r--r--demos/2d/splash/freesans.fntbin0 -> 29950 bytes
-rw-r--r--demos/2d/splash/splash.xml438
-rw-r--r--demos/2d/splash/splash_01.pngbin0 -> 42593 bytes
-rw-r--r--demos/2d/splash/splash_02.pngbin0 -> 48376 bytes
-rw-r--r--demos/2d/splash/splash_03.pngbin0 -> 53073 bytes
-rw-r--r--demos/2d/splash/splash_04.pngbin0 -> 55571 bytes
-rw-r--r--demos/2d/splash/splash_05.pngbin0 -> 56686 bytes
-rw-r--r--demos/2d/splash/splash_06.pngbin0 -> 56576 bytes
-rw-r--r--demos/2d/splash/splash_07.pngbin0 -> 56694 bytes
-rw-r--r--demos/2d/splash/splash_08.pngbin0 -> 56810 bytes
-rw-r--r--demos/2d/splash/splash_09.pngbin0 -> 58112 bytes
-rw-r--r--demos/2d/tetris/block.pngbin0 -> 556 bytes
-rw-r--r--demos/2d/tetris/engine.cfg17
-rw-r--r--demos/2d/tetris/grid.gd216
-rw-r--r--demos/2d/tetris/grid.xml153
-rw-r--r--demos/2d/tetris/tetris.pngbin0 -> 789 bytes
-rw-r--r--demos/2d/tetris/tetris.xml171
95 files changed, 6474 insertions, 0 deletions
diff --git a/demos/2d/particles/engine.cfg b/demos/2d/particles/engine.cfg
new file mode 100644
index 0000000000..b3dd540561
--- /dev/null
+++ b/demos/2d/particles/engine.cfg
@@ -0,0 +1,5 @@
+[application]
+
+name="Particle Systems"
+main_scene="res://particles.xml"
+icon="res://icon.png"
diff --git a/demos/2d/particles/fire_particle.png b/demos/2d/particles/fire_particle.png
new file mode 100644
index 0000000000..3fa856690c
--- /dev/null
+++ b/demos/2d/particles/fire_particle.png
Binary files differ
diff --git a/demos/2d/particles/icon.png b/demos/2d/particles/icon.png
new file mode 100644
index 0000000000..714cee32f6
--- /dev/null
+++ b/demos/2d/particles/icon.png
Binary files differ
diff --git a/demos/2d/particles/mask.png b/demos/2d/particles/mask.png
new file mode 100644
index 0000000000..476f280ab2
--- /dev/null
+++ b/demos/2d/particles/mask.png
Binary files differ
diff --git a/demos/2d/particles/particles.xml b/demos/2d/particles/particles.xml
new file mode 100644
index 0000000000..56cd1aba06
--- /dev/null
+++ b/demos/2d/particles/particles.xml
@@ -0,0 +1,246 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<resource_file type="PackedScene" subresource_count="4" version="0.99" version_name="Godot Engine v0.99.3735-pre-beta">
+ <ext_resource path="res://fire_particle.*" type="ImageTexture"></ext_resource>
+ <ext_resource path="res://smoke_particle.*" type="ImageTexture"></ext_resource>
+ <ext_resource path="res://spark_particle2.*" type="ImageTexture"></ext_resource>
+ <main_resource>
+ <dictionary name="_bundled" shared="false">
+ <string> "names" </string>
+ <string_array len="64">
+ <string> "Node" </string>
+ <string> "__meta__" </string>
+ <string> "Fire" </string>
+ <string> "Particles2D" </string>
+ <string> "process/process" </string>
+ <string> "visibility/visible" </string>
+ <string> "visibility/opacity" </string>
+ <string> "visibility/self_opacity" </string>
+ <string> "visibility/on_top" </string>
+ <string> "visibility/blend_mode" </string>
+ <string> "transform/pos" </string>
+ <string> "transform/rot" </string>
+ <string> "transform/scale" </string>
+ <string> "config/amount" </string>
+ <string> "config/lifetime" </string>
+ <string> "config/time_scale" </string>
+ <string> "config/preprocess" </string>
+ <string> "config/emit_timeout" </string>
+ <string> "config/emitting" </string>
+ <string> "config/offset" </string>
+ <string> "config/half_extents" </string>
+ <string> "config/local_space" </string>
+ <string> "config/explosiveness" </string>
+ <string> "config/texture" </string>
+ <string> "params/direction" </string>
+ <string> "params/spread" </string>
+ <string> "params/linear_velocity" </string>
+ <string> "params/spin_velocity" </string>
+ <string> "params/orbit_velocity" </string>
+ <string> "params/gravity_direction" </string>
+ <string> "params/gravity_strength" </string>
+ <string> "params/radial_accel" </string>
+ <string> "params/tangential_accel" </string>
+ <string> "params/damping" </string>
+ <string> "params/initial_size" </string>
+ <string> "params/final_size" </string>
+ <string> "params/hue_variation" </string>
+ <string> "randomness/direction" </string>
+ <string> "randomness/spread" </string>
+ <string> "randomness/linear_velocity" </string>
+ <string> "randomness/spin_velocity" </string>
+ <string> "randomness/orbit_velocity" </string>
+ <string> "randomness/gravity_direction" </string>
+ <string> "randomness/gravity_strength" </string>
+ <string> "randomness/radial_accel" </string>
+ <string> "randomness/tangential_accel" </string>
+ <string> "randomness/damping" </string>
+ <string> "randomness/initial_size" </string>
+ <string> "randomness/final_size" </string>
+ <string> "randomness/hue_variation" </string>
+ <string> "color_phases/count" </string>
+ <string> "phase_0/pos" </string>
+ <string> "phase_0/color" </string>
+ <string> "phase_1/pos" </string>
+ <string> "phase_1/color" </string>
+ <string> "phase_2/pos" </string>
+ <string> "phase_2/color" </string>
+ <string> "phase_3/pos" </string>
+ <string> "phase_3/color" </string>
+ <string> "emission_points" </string>
+ <string> "Smoke" </string>
+ <string> "Magic" </string>
+ <string> "Explosion" </string>
+ <string> "Mask" </string>
+ </string_array>
+ <string> "version" </string>
+ <int> 1 </int>
+ <string> "conn_count" </string>
+ <int> 0 </int>
+ <string> "node_count" </string>
+ <int> 6 </int>
+ <string> "variants" </string>
+ <array len="57" shared="false">
+ <dictionary shared="false">
+ <string> "__editor_plugin_states__" </string>
+ <dictionary shared="false">
+ <string> "2D" </string>
+ <dictionary shared="false">
+ <string> "pixel_snap" </string>
+ <bool> False </bool>
+ <string> "zoom" </string>
+ <real> 0.598737 </real>
+ <string> "ofs" </string>
+ <vector2> 15.9452, 2.06145 </vector2>
+ </dictionary>
+ <string> "3D" </string>
+ <dictionary shared="false">
+ <string> "zfar" </string>
+ <real> 500 </real>
+ <string> "fov" </string>
+ <real> 45 </real>
+ <string> "viewports" </string>
+ <array len="4" shared="false">
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ </array>
+ <string> "viewport_mode" </string>
+ <int> 1 </int>
+ <string> "default_light" </string>
+ <bool> True </bool>
+ <string> "show_grid" </string>
+ <bool> True </bool>
+ <string> "show_origin" </string>
+ <bool> True </bool>
+ <string> "znear" </string>
+ <real> 0.1 </real>
+ </dictionary>
+ </dictionary>
+ <string> "__editor_run_settings__" </string>
+ <dictionary shared="false">
+ <string> "custom_args" </string>
+ <string> "-l $scene" </string>
+ <string> "run_mode" </string>
+ <int> 0 </int>
+ </dictionary>
+ <string> "__editor_plugin_screen__" </string>
+ <string> "2D" </string>
+ </dictionary>
+ <bool> True </bool>
+ <real> 1 </real>
+ <int> 1 </int>
+ <vector2> 165.787, 527.801 </vector2>
+ <real> -179.790649 </real>
+ <vector2> 1, 1 </vector2>
+ <int> 32 </int>
+ <real> 0 </real>
+ <vector2> 0, 0 </vector2>
+ <vector2> 15, 15 </vector2>
+ <bool> False </bool>
+ <resource resource_type="ImageTexture" path="res://fire_particle.*"> </resource>
+ <real> 20 </real>
+ <real> 180 </real>
+ <real> 80 </real>
+ <real> 0.7 </real>
+ <real> 0.3 </real>
+ <int> 3 </int>
+ <color> 1, 1, 1, 0 </color>
+ <real> 0.1 </real>
+ <color> 0.886275, 0.371681, 0, 1 </color>
+ <color> 1, 0.99115, 1, 0 </color>
+ <color> 0, 0, 0, 1 </color>
+ <vector2_array len="0"> </vector2_array>
+ <vector2> 377.396, 543.147 </vector2>
+ <real> 176.575912 </real>
+ <real> 4 </real>
+ <resource resource_type="ImageTexture" path="res://smoke_particle.*"> </resource>
+ <real> 20.907272 </real>
+ <real> 47.151516 </real>
+ <real> 3 </real>
+ <real> 0.2 </real>
+ <color> 1, 1, 1, 1 </color>
+ <color> 0, 0, 0, 0 </color>
+ <vector2> 593.848, 531.064 </vector2>
+ <real> 2 </real>
+ <vector2> 40, 40 </vector2>
+ <resource resource_type="ImageTexture" path="res://spark_particle2.*"> </resource>
+ <real> 9.8 </real>
+ <real> 15.515152 </real>
+ <color> 1, 0.477876, 0.60177, 1 </color>
+ <real> 0.5 </real>
+ <color> 0.533333, 0.752212, 1, 1 </color>
+ <color> 0, 1, 0.699115, 0 </color>
+ <vector2> 613.467, 182.62 </vector2>
+ <real> 0.05 </real>
+ <real> 184.546997 </real>
+ <real> 366.300415 </real>
+ <int> 4 </int>
+ <color> 0.886275, 0.401015, 0, 1 </color>
+ <color> 1, 0.679866, 0.432123, 0.12654 </color>
+ <vector2> 192.975, 141.598 </vector2>
+ <int> 170 </int>
+ <vector2> 128, 128 </vector2>
+ <int> 0 </int>
+ <vector2_array len="512"> -0.125, -0.03125, 0.65625, -0.148438, 0.609375, 0.0234375, -0.757812, 0.375, 0.265625, 0.078125, 0.632812, 0.382812, 0.671875, 0.414062, 0.367188, -0.226562, 0.75, -0.125, 0.4375, 0.421875, 0.335938, -0.148438, -0.125, 0.257812, -0.171875, 0.359375, -0.601562, -0.265625, 0.375, 0.382812, -0.296875, 0.09375, -0.664062, -0.21875, -0.554688, -0.226562, -0.320312, 0.367188, -0.320312, -0.257812, 0, -0.257812, 0.578125, -0.25, -0.164062, 0.109375, -0.578125, -0.015625, -0.445312, 0, 0.273438, 0.101562, 0.320312, 0.03125, -0.125, 0.0703125, -0.570312, 0.289062, 0.257812, -0.09375, -0.585938, 0.179688, -0.664062, 0.0234375, -0.25, -0.0859375, 0.6875, -0.109375, 0.234375, 0, -0.5, -0.265625, 0.710938, 0.335938, 0.609375, -0.046875, 0.664062, -0.210938, -0.242188, -0.21875, -0.484375, -0.257812, -0.453125, 0.414062, 0.609375, -0.203125, 0.289062, 0.132812, -0.03125, -0.257812, -0.492188, -0.1875, 0.5625, -0.140625, -0.5625, 0.148438, -0.257812, -0.234375, -0.140625, 0.15625, -0.5625, 0.109375, 0.132812, 0.398438, -0.640625, -0.25, -0.585938, 0.304688, -0.328125, -0.257812, 0.226562, 0.148438, -0.546875, 0.210938, 0.625, 0.179688, 0.648438, -0.0078125, 0.367188, 0.328125, 0.265625, 0.0546875, -0.59375, -0.273438, -0.203125, 0.21875, 0.570312, -0.21875, -0.695312, 0.078125, -0.375, 0.03125, -0.164062, 0.0390625, 0.265625, 0.226562, -0.625, -0.109375, 0.203125, -0.132812, -0.671875, 0.328125, 0.625, -0.179688, -0.640625, 0.0859375, 0.65625, 0, -0.242188, 0.414062, 0.242188, 0.25, -0.148438, -0.0625, 0.390625, -0.25, 0.664062, 0.351562, 0.320312, 0.203125, -0.546875, 0.335938, 0.328125, -0.148438, 0.609375, -0.0625, -0.171875, 0.046875, -0.578125, 0.0546875, -0.304688, -0.28125, 0.734375, -0.0546875, 0.679688, 0.390625, -0.460938, 0.0859375, -0.703125, 0.101562, -0.140625, 0.234375, -0.507812, 0.078125, -0.25, 0.304688, -0.046875, 0.359375, 0.1875, 0.0703125, -0.570312, 0.242188, 0.65625, 0.0859375, -0.203125, -0.265625, -0.164062, -0.179688, 0.367188, -0.1875, -0.601562, -0.101562, -0.117188, -0.210938, -0.546875, 0.109375, -0.585938, -0.28125, -0.59375, -0.03125, 0.3125, -0.179688, 0.414062, 0.429688, -0.476562, -0.195312, -0.0703125, -0.21875, -0.5625, 0.304688, -0.609375, 0.226562, 0.429688, 0.429688, 0.203125, 0.242188, 0.078125, 0.367188, 0.242188, 0.03125, 0.601562, -0.0390625, 0.328125, 0.03125, -0.53125, -0.195312, -0.53125, -0.210938, 0.3125, -0.257812, 0.445312, -0.273438, 0.273438, -0.273438, -0.695312, -0.179688, 0.234375, -0.15625, -0.546875, -0.242188, -0.234375, -0.125, 0.734375, -0.226562, 0.367188, -0.234375, -0.15625, 0.046875, -0.445312, -0.226562, 0.625, 0.03125, -0.0859375, 0.210938, -0.648438, 0.296875, 0.335938, -0.109375, 0.625, -0.078125, 0.601562, 0.351562, 0.242188, 0.140625, 0.0234375, -0.273438, -0.679688, -0.109375, 0.640625, 0.15625, 0.171875, 0.0859375, -0.273438, -0.273438, -0.242188, 0.34375, 0.179688, 0.15625, -0.179688, -0.117188, 0.671875, 0.03125, -0.640625, 0.304688, 0.109375, -0.242188, -0.210938, 0.382812, -0.0859375, 0.0078125, -0.695312, 0.078125, 0.296875, 0.320312, 0.304688, -0.226562, 0.257812, -0.0234375, -0.203125, -0.015625, -0.648438, 0.335938, -0.703125, -0.132812, -0.273438, -0.210938, -0.15625, -0.273438, -0.0390625, 0.335938, 0.617188, 0.179688, 0.34375, 0.390625, -0.210938, -0.132812, -0.226562, -0.117188, 0.617188, -0.289062, 0.125, -0.21875, 0.71875, -0.164062, -0.570312, 0.1875, -0.1875, 0.382812, 0.640625, -0.296875, -0.125, 0.109375, 0.671875, 0.289062, -0.515625, 0.382812, 0.359375, -0.179688, 0.726562, -0.226562, 0.25, 0.320312, -0.328125, 0, -0.117188, -0.234375, -0.210938, -0.148438, -0.546875, -0.117188, 0.359375, 0.429688, -0.15625, -0.226562, 0.632812, -0.257812, -0.28125, -0.273438, 0.265625, 0.015625, -0.765625, 0.351562, 0.703125, 0.421875, -0.585938, 0.0078125, 0.28125, 0.109375, 0.304688, 0.171875, 0.65625, 0.421875, 0.078125, 0.382812, 0.179688, 0.25, -0.382812, 0.0703125, 0.585938, -0.140625, -0.109375, 0.382812, -0.59375, -0.09375, 0.4375, 0.398438, -0.132812, 0.0234375, -0.625, 0.0078125, -0.210938, -0.21875, -0.25, 0.257812, 0.257812, 0.398438, 0.625, 0.195312, 0.148438, -0.234375, -0.476562, 0.398438, -0.210938, 0.046875, 0.695312, -0.101562, 0.695312, 0.140625, -0.492188, -0.1875, 0.25, -0.09375, -0.195312, -0.195312, -0.328125, 0.0703125, -0.242188, -0.0625, 0.296875, 0.34375, -0.632812, 0.0078125, -0.265625, 0.09375, 0.421875, -0.203125, 0.171875, 0.03125, -0.09375, -0.0703125, 0.289062, 0.0859375, -0.609375, 0.390625, -0.554688, 0.257812, -0.6875, 0.0078125, 0.304688, 0.414062, 0.226562, 0.390625, -0.21875, -0.28125, 0.265625, 0.320312, -0.671875, 0.234375, -0.210938, 0.03125, 0.679688, -0.0234375, 0.359375, -0.203125, 0.3125, 0.289062, 0.671875, 0.140625, -0.78125, 0.414062, -0.546875, 0.40625, 0.625, 0.367188, 0.0859375, 0.421875, 0.1875, -0.09375, 0.617188, 0.40625, -0.078125, -0.0390625, 0.695312, 0.0859375, -0.6875, -0.265625, 0.421875, -0.265625, 0.601562, -0.0234375, -0.3125, -0.265625, -0.078125, 0.046875, 0.617188, 0.164062, 0.273438, -0.03125, -0.695312, -0.015625, -0.5625, 0.164062, -0.578125, 0.265625, -0.726562, 0.421875, -0.078125, -0.25, -0.171875, 0.171875, -0.234375, -0.0390625, 0.257812, 0.429688, -0.179688, -0.117188, 0.351562, -0.03125, -0.78125, -0.234375, -0.546875, -0.171875, -0.460938, -0.234375, -0.164062, 0.09375, -0.65625, 0.398438, -0.445312, 0.0859375, -0.71875, -0.226562, 0.671875, 0.101562, -0.46875, -0.195312, -0.71875, -0.265625, 0.617188, 0.125, -0.78125, -0.21875, -0.226562, -0.15625, 0.21875, 0.0234375, 0.289062, 0.101562, 0.648438, -0.171875, 0.390625, -0.273438, -0.257812, 0.078125, -0.21875, 0, 0.65625, -0.203125, -0.679688, 0.171875, -0.1875, 0.328125, -0.46875, -0.28125, 0.273438, 0, 0.664062, 0.296875, -0.140625, 0.335938, -0.625, 0.382812, -0.34375, -0.21875, -0.171875, -0.25, -0.546875, -0.117188, -0.117188, -0.203125, -0.1875, 0.351562, -0.585938, -0.109375, -0.203125, -0.0625, -0.570312, 0.03125, -0.5625, -0.109375, 0.601562, -0.195312, 0.3125, 0.140625, -0.101562, 0.25, 0.25, 0.3125, 0.125, -0.203125, -0.09375, -0.140625, -0.242188, 0.414062, 0.664062, -0.0625, -0.21875, -0.078125, 0.6875, -0.210938, -0.140625, 0.015625, -0.632812, -0.25, -0.109375, 0.234375, -0.695312, 0.015625, -0.3125, -0.28125, 0.296875, -0.0234375, 0.296875, 0.203125, -0.125, 0.234375, 0.570312, 0.390625, -0.554688, 0.203125, -0.5625, 0.351562, -0.15625, 0.21875, -0.375, 0.0390625, -0.226562, -0.140625, 0.695312, 0.164062, 0.632812, 0.367188, -0.328125, -0.210938, -0.59375, 0.34375, 0.304688, -0.242188, -0.34375, 0.0703125, -0.679688, -0.179688, 0.664062, 0.101562, 0.34375, 0.171875, -0.695312, -0.078125, -0.242188, -0.0546875, 0.304688, -0.234375, -0.0078125, -0.21875, -0.632812, 0.203125, 0.625, 0.03125, -0.414062, 0.015625, 0.273438, -0.078125, 0.695312, 0.28125, 0.34375, 0.101562, -0.164062, 0.289062, -0.1875, 0.273438, -0.203125, 0.0703125, 0.734375, -0.171875, -0.59375, 0.34375, -0.15625, 0.210938, 0.429688, 0.375, -0.234375, 0.34375, 0.617188, 0.101562, 0.703125, 0, -0.578125, 0.148438, 0.21875, -0.171875, -0.304688, 0.375, -0.65625, -0.09375, -0.101562, 0.25, -0.4375, 0.03125, -0.242188, 0.421875, -0.546875, 0.0625, -0.632812, -0.148438, -0.125, 0.179688, 0.179688, 0.304688, -0.265625, 0.078125, -0.289062, 0.421875, -0.585938, 0.1875, -0.289062, 0.34375, 0.273438, 0.367188, -0.109375, 0.117188, 0.34375, 0.046875, -0.0625, 0.320312, 0.6875, -0.234375, -0.523438, 0.320312, -0.09375, -0.242188, -0.65625, 0.25, -0.609375, -0.117188, -0.140625, 0.140625, 0.28125, -0.09375, -0.625, -0.28125, 0.34375, 0.328125, 0.265625, 0.109375, -0.609375, 0.0078125, -0.078125, -0.234375, -0.289062, -0.203125, 0.289062, 0.289062, -0.0859375, 0.0078125, -0.101562, -0.28125, -0.625, -0.101562, -0.546875, 0.382812, -0.539062, -0.195312, -0.210938, 0.046875, -0.492188, 0.390625, -0.664062, -0.0703125, 0.71875, -0.101562, -0.140625, -0.046875, 0.695312, 0.289062, -0.710938, 0.429688, -0.703125, 0.3125, -0.203125, 0.109375, 0.421875, -0.273438, 0.304688, 0.21875, 0.328125, 0.257812, -0.632812, -0.0703125, 0.320312, -0.140625, 0.265625, -0.203125, -0.109375, -0.179688, 0.25, -0.210938, 0.65625, 0.109375, -0.648438, -0.0625, -0.0859375, 0.375, -0.429688, 0.398438, 0.320312, 0.3125, -0.0703125, 0.265625, 0.648438, 0.0078125, 0.320312, 0.335938, 0.398438, 0.421875, -0.101562, -0.0625, -0.296875, 0.40625, 0.695312, -0.0390625, 0.335938, 0.21875, -0.546875, 0.117188, -0.476562, 0.390625, -0.648438, 0.117188, -0.078125, -0.28125, 0.328125, 0.289062, -0.226562, 0.179688, 0.226562, 0.375, -0.429688, 0.382812, -0.0546875, 0.34375, 0.59375, -0.125, 0.632812, 0.265625, 0.226562, 0.3125, -0.523438, -0.140625, -0.546875, 0.046875, 0.242188, -0.148438, -0.648438, 0.0234375, -0.289062, 0, -0.546875, 0.101562, -0.125, -0.0625, -0.492188, 0.367188, 0.328125, 0.15625, -0.351562, 0.0546875, -0.609375, 0.414062, -0.296875, 0.09375, 0.671875, -0.203125, -0.257812, -0.273438, -0.335938, 0.414062, 0.65625, -0.195312, -0.601562, -0.101562, -0.203125, -0.078125, 0.210938, 0.242188, 0.296875, 0.335938, -0.578125, 0.40625, -0.664062, -0.078125, -0.0859375, 0.390625, 0.171875, 0.304688, -0.6875, 0.390625, -0.554688, 0.0078125, -0.570312, -0.179688, -0.210938, -0.09375, 0.726562, -0.03125, -0.546875, -0.0859375, -0.265625, -0.171875, -0.65625, 0.179688, -0.171875, 0.257812, -0.164062, -0.171875, 0.203125, 0.335938, -0.640625, 0.21875, 0.390625, 0.375, 0.6875, -0.234375, 0.742188, 0.34375, -0.0546875, 0.351562, -0.632812, 0.195312, 0.671875, -0.21875, 0.195312, 0.015625, 0.226562, 0.117188, -0.507812, 0.078125, -0.140625, -0.15625, 0.703125, -0.28125, 0.226562, -0.140625, 0.328125, 0.421875, 0.3125, 0.1875, 0.703125, 0.078125, 0.351562, 0.289062, 0.21875, -0.242188, -0.328125, 0, 0.171875, 0.101562, -0.304688, -0.242188, -0.210938, 0.078125, 0.625, -0.0078125, 0.25, 0.242188, -0.664062, 0.117188, 0.203125, -0.140625, 0.226562, 0.429688, 0.328125, -0.203125, -0.679688, 0.0703125, -0.195312, -0.148438, -0.523438, 0.328125, 0.382812, -0.257812, 0.578125, -0.171875, 0.65625, 0.320312, -0.632812, -0.148438, 0.703125, 0.0703125, -0.53125, 0.398438, -0.414062, 0.03125, -0.0859375, 0.0546875, -0.53125, 0.335938, 0.304688, 0.429688, -0.234375, -0.148438, -0.375, 0.046875, -0.148438, 0.289062, -0.0390625, 0.421875, 0.226562, -0.125, -0.570312, 0.398438, -0.0703125, -0.0234375, 0.257812, -0.132812 </vector2_array>
+ </array>
+ <string> "nodes" </string>
+ <int_array len="598"> -1, -1, 0, 0, -1, 1, 1, 0, 0, 0, 0, 3, 2, -1, 56, 4, 1, 5, 1, 6, 2, 7, 2, 8, 1, 9, 3, 10, 4, 11, 5, 12, 6, 13, 7, 14, 2, 15, 2, 16, 8, 17, 8, 18, 1, 19, 9, 20, 10, 21, 11, 22, 2, 23, 12, 24, 8, 25, 8, 26, 13, 27, 8, 28, 8, 29, 14, 30, 15, 31, 8, 32, 8, 33, 8, 34, 16, 35, 17, 36, 8, 37, 8, 38, 8, 39, 8, 40, 8, 41, 8, 42, 8, 43, 8, 44, 8, 45, 8, 46, 8, 47, 8, 48, 8, 49, 8, 50, 18, 51, 8, 52, 19, 53, 20, 54, 21, 55, 2, 56, 22, 57, 2, 58, 23, 59, 24, 0, 0, 0, 3, 60, -1, 55, 4, 1, 5, 1, 6, 2, 7, 2, 8, 1, 10, 25, 11, 26, 12, 6, 13, 7, 14, 27, 15, 2, 16, 8, 17, 8, 18, 1, 19, 9, 20, 9, 21, 11, 22, 2, 23, 28, 24, 8, 25, 29, 26, 30, 27, 2, 28, 8, 29, 8, 30, 8, 31, 8, 32, 8, 33, 8, 34, 2, 35, 31, 36, 8, 37, 8, 38, 8, 39, 8, 40, 2, 41, 8, 42, 8, 43, 8, 44, 8, 45, 8, 46, 8, 47, 8, 48, 8, 49, 8, 50, 18, 51, 8, 52, 19, 53, 32, 54, 33, 55, 2, 56, 34, 57, 2, 58, 23, 59, 24, 0, 0, 0, 3, 61, -1, 55, 4, 1, 5, 1, 6, 2, 7, 2, 8, 1, 10, 35, 11, 8, 12, 6, 13, 7, 14, 36, 15, 2, 16, 8, 17, 8, 18, 1, 19, 9, 20, 37, 21, 11, 22, 2, 23, 38, 24, 8, 25, 14, 26, 13, 27, 17, 28, 8, 29, 8, 30, 39, 31, 8, 32, 40, 33, 8, 34, 31, 35, 2, 36, 8, 37, 8, 38, 8, 39, 8, 40, 2, 41, 8, 42, 8, 43, 8, 44, 8, 45, 8, 46, 8, 47, 8, 48, 8, 49, 8, 50, 18, 51, 8, 52, 41, 53, 42, 54, 43, 55, 2, 56, 44, 57, 2, 58, 23, 59, 24, 0, 0, 0, 3, 62, -1, 56, 4, 1, 5, 1, 6, 2, 7, 2, 8, 11, 9, 3, 10, 45, 11, 5, 12, 6, 13, 7, 14, 36, 15, 36, 16, 8, 17, 8, 18, 1, 19, 9, 20, 10, 21, 11, 22, 46, 23, 28, 24, 8, 25, 14, 26, 47, 27, 8, 28, 8, 29, 14, 30, 15, 31, 8, 32, 8, 33, 48, 34, 16, 35, 31, 36, 8, 37, 8, 38, 8, 39, 8, 40, 8, 41, 8, 42, 8, 43, 8, 44, 8, 45, 8, 46, 8, 47, 8, 48, 8, 49, 8, 50, 49, 51, 8, 52, 19, 53, 20, 54, 50, 55, 16, 56, 51, 57, 2, 58, 34, 59, 24, 0, 0, 0, 3, 63, -1, 55, 4, 1, 5, 1, 6, 2, 7, 2, 8, 1, 10, 52, 11, 8, 12, 6, 13, 53, 14, 20, 15, 2, 16, 8, 17, 8, 18, 1, 19, 9, 20, 54, 21, 11, 22, 2, 23, 38, 24, 8, 25, 14, 26, 8, 27, 36, 28, 8, 29, 8, 30, 8, 31, 8, 32, 8, 33, 8, 34, 2, 35, 2, 36, 8, 37, 8, 38, 8, 39, 8, 40, 2, 41, 8, 42, 8, 43, 8, 44, 8, 45, 8, 46, 8, 47, 8, 48, 8, 49, 8, 50, 55, 51, 8, 52, 41, 53, 42, 54, 43, 55, 2, 56, 44, 57, 2, 58, 23, 59, 56, 0 </int_array>
+ <string> "conns" </string>
+ <int_array len="0"> </int_array>
+ </dictionary>
+
+ </main_resource>
+</resource_file> \ No newline at end of file
diff --git a/demos/2d/particles/smoke_particle.png b/demos/2d/particles/smoke_particle.png
new file mode 100644
index 0000000000..3a03d14c71
--- /dev/null
+++ b/demos/2d/particles/smoke_particle.png
Binary files differ
diff --git a/demos/2d/particles/spark_particle2.png b/demos/2d/particles/spark_particle2.png
new file mode 100644
index 0000000000..2dd071a25a
--- /dev/null
+++ b/demos/2d/particles/spark_particle2.png
Binary files differ
diff --git a/demos/2d/platformer/bullet.gd b/demos/2d/platformer/bullet.gd
new file mode 100644
index 0000000000..6836116aa4
--- /dev/null
+++ b/demos/2d/platformer/bullet.gd
@@ -0,0 +1,20 @@
+
+extends RigidBody2D
+
+# member variables here, example:
+# var a=2
+# var b="textvar"
+
+var disabled=false
+
+func disable():
+ if (disabled):
+ return
+ get_node("anim").play("shutdown")
+ disabled=true
+
+func _ready():
+ # Initalization here
+ pass
+
+
diff --git a/demos/2d/platformer/bullet.png b/demos/2d/platformer/bullet.png
new file mode 100644
index 0000000000..5c722219ec
--- /dev/null
+++ b/demos/2d/platformer/bullet.png
Binary files differ
diff --git a/demos/2d/platformer/bullet.xml b/demos/2d/platformer/bullet.xml
new file mode 100644
index 0000000000..9de518c703
--- /dev/null
+++ b/demos/2d/platformer/bullet.xml
@@ -0,0 +1,285 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<resource_file type="PackedScene" subresource_count="5" version="0.99" version_name="Godot Engine v0.99.3037-pre-beta">
+ <ext_resource path="res://bullet.png" type="Texture"></ext_resource>
+ <ext_resource path="res://bullet.gd" type="GDScript"></ext_resource>
+ <resource type="CircleShape2D" path="local://0">
+ <string name="resource/name"> "" </string>
+ <real name="custom_solver_bias"> 0 </real>
+ <real name="radius"> 10 </real>
+ <resource name="script/script"></resource>
+ </resource>
+ <resource type="Animation" path="local://1">
+ <string name="resource/name"> "shutdown" </string>
+ <real name="length"> 1.5 </real>
+ <bool name="loop"> False </bool>
+ <real name="step"> 0 </real>
+ <string name="tracks/0/type"> "value" </string>
+ <node_path name="tracks/0/path"> "particles:config/emitting" </node_path>
+ <int name="tracks/0/interp"> 1 </int>
+ <dictionary name="tracks/0/keys">
+ <string> "cont" </string>
+ <bool> False </bool>
+ <string> "transitions" </string>
+ <real_array len="1"> 1 </real_array>
+ <string> "values" </string>
+ <array len="1">
+ <bool> False </bool>
+ </array>
+ <string> "times" </string>
+ <real_array len="1"> 0 </real_array>
+ </dictionary>
+ <string name="tracks/1/type"> "value" </string>
+ <node_path name="tracks/1/path"> "sprite:visibility/self_opacity" </node_path>
+ <int name="tracks/1/interp"> 1 </int>
+ <dictionary name="tracks/1/keys">
+ <string> "cont" </string>
+ <bool> True </bool>
+ <string> "transitions" </string>
+ <real_array len="2"> 1, 1 </real_array>
+ <string> "values" </string>
+ <array len="2">
+ <real> 1 </real>
+ <real> 0 </real>
+ </array>
+ <string> "times" </string>
+ <real_array len="2"> 0, 1.00394 </real_array>
+ </dictionary>
+ <string name="tracks/2/type"> "method" </string>
+ <node_path name="tracks/2/path"> "." </node_path>
+ <int name="tracks/2/interp"> 1 </int>
+ <dictionary name="tracks/2/keys">
+ <string> "transitions" </string>
+ <real_array len="1"> 1 </real_array>
+ <string> "values" </string>
+ <array len="1">
+ <dictionary>
+ <string> "args" </string>
+ <array len="0">
+ </array>
+ <string> "method" </string>
+ <string> "queue_free" </string>
+ </dictionary>
+ </array>
+ <string> "times" </string>
+ <real_array len="1"> 1.31 </real_array>
+ </dictionary>
+ <resource name="script/script"></resource>
+ </resource>
+ <main_resource>
+ <string name="resource/name"> "" </string>
+ <dictionary name="_bundled">
+ <string> "names" </string>
+ <string_array len="109">
+ <string> "bullet" </string>
+ <string> "RigidBody2D" </string>
+ <string> "process/process" </string>
+ <string> "process/fixed_process" </string>
+ <string> "process/input" </string>
+ <string> "process/unhandled_input" </string>
+ <string> "process/mode" </string>
+ <string> "visibility/visible" </string>
+ <string> "visibility/toplevel" </string>
+ <string> "visibility/opacity" </string>
+ <string> "visibility/self_opacity" </string>
+ <string> "visibility/on_top" </string>
+ <string> "visibility/blend_mode" </string>
+ <string> "transform/notify" </string>
+ <string> "transform/pos" </string>
+ <string> "transform/rot" </string>
+ <string> "transform/scale" </string>
+ <string> "shape_count" </string>
+ <string> "shapes/0/shape" </string>
+ <string> "shapes/0/transform" </string>
+ <string> "mode" </string>
+ <string> "mass" </string>
+ <string> "friction" </string>
+ <string> "bounce" </string>
+ <string> "custom_integrator" </string>
+ <string> "continuous_cd" </string>
+ <string> "contacts_reported" </string>
+ <string> "contact_monitor" </string>
+ <string> "active" </string>
+ <string> "can_sleep" </string>
+ <string> "velocity/linear" </string>
+ <string> "velocity/angular" </string>
+ <string> "script/script" </string>
+ <string> "__meta__" </string>
+ <string> "particles" </string>
+ <string> "Particles2D" </string>
+ <string> "config/amount" </string>
+ <string> "config/lifetime" </string>
+ <string> "config/preprocess" </string>
+ <string> "config/emit_timeout" </string>
+ <string> "config/emitting" </string>
+ <string> "config/offset" </string>
+ <string> "config/half_extents" </string>
+ <string> "config/local_space" </string>
+ <string> "config/explosiveness" </string>
+ <string> "config/texture" </string>
+ <string> "params/direction" </string>
+ <string> "params/spread" </string>
+ <string> "params/linear_velocity" </string>
+ <string> "params/spin_velocity" </string>
+ <string> "params/gravity_direction" </string>
+ <string> "params/gravity_strength" </string>
+ <string> "params/radial_accel" </string>
+ <string> "params/tangential_accel" </string>
+ <string> "params/damping" </string>
+ <string> "params/initial_size" </string>
+ <string> "params/final_size" </string>
+ <string> "params/hue_variation" </string>
+ <string> "randomness/direction" </string>
+ <string> "randomness/spread" </string>
+ <string> "randomness/linear_velocity" </string>
+ <string> "randomness/spin_velocity" </string>
+ <string> "randomness/gravity_direction" </string>
+ <string> "randomness/gravity_strength" </string>
+ <string> "randomness/radial_accel" </string>
+ <string> "randomness/tangential_accel" </string>
+ <string> "randomness/damping" </string>
+ <string> "randomness/initial_size" </string>
+ <string> "randomness/final_size" </string>
+ <string> "randomness/hue_variation" </string>
+ <string> "color_phases/count" </string>
+ <string> "phase_0/pos" </string>
+ <string> "phase_0/color" </string>
+ <string> "phase_1/pos" </string>
+ <string> "phase_1/color" </string>
+ <string> "phase_2/pos" </string>
+ <string> "phase_2/color" </string>
+ <string> "phase_3/pos" </string>
+ <string> "phase_3/color" </string>
+ <string> "sprite" </string>
+ <string> "Sprite" </string>
+ <string> "texture" </string>
+ <string> "centered" </string>
+ <string> "offset" </string>
+ <string> "flip_h" </string>
+ <string> "flip_v" </string>
+ <string> "vframes" </string>
+ <string> "hframes" </string>
+ <string> "frame" </string>
+ <string> "modulate" </string>
+ <string> "region" </string>
+ <string> "region_rect" </string>
+ <string> "CollisionShape2D" </string>
+ <string> "shape" </string>
+ <string> "Timer" </string>
+ <string> "wait_time" </string>
+ <string> "one_shot" </string>
+ <string> "autostart" </string>
+ <string> "anim" </string>
+ <string> "AnimationPlayer" </string>
+ <string> "playback/process_mode" </string>
+ <string> "playback/default_blend_time" </string>
+ <string> "root/root" </string>
+ <string> "speed" </string>
+ <string> "anims/shutdown" </string>
+ <string> "blend_times" </string>
+ <string> "autoplay" </string>
+ <string> "disable" </string>
+ <string> "timeout" </string>
+ </string_array>
+ <string> "version" </string>
+ <int> 1 </int>
+ <string> "conn_count" </string>
+ <int> 1 </int>
+ <string> "node_count" </string>
+ <int> 6 </int>
+ <string> "variants" </string>
+ <array len="27">
+ <bool> False </bool>
+ <int> 0 </int>
+ <bool> True </bool>
+ <real> 1 </real>
+ <vector2> 0, 0 </vector2>
+ <real> 0 </real>
+ <vector2> 1, 1 </vector2>
+ <int> 1 </int>
+ <resource resource_type="CircleShape2D" path="local://0"> </resource>
+ <matrix32> 1, 0, 0, 1, 0, 0 </matrix32>
+ <resource resource_type="GDScript" path="res://bullet.gd"> </resource>
+ <dictionary>
+ <string> "__editor_plugin_states__" </string>
+ <dictionary>
+ <string> "Script" </string>
+ <dictionary>
+ <string> "current" </string>
+ <int> 0 </int>
+ <string> "sources" </string>
+ <array len="3">
+ <string> "res://enemy.gd" </string>
+ <string> "res://player.gd" </string>
+ <string> "res://bullet.gd" </string>
+ </array>
+ </dictionary>
+ <string> "2D" </string>
+ <dictionary>
+ <string> "zoom" </string>
+ <real> 3.424785 </real>
+ <string> "ofs" </string>
+ <vector2> -74.7573, -35.9676 </vector2>
+ </dictionary>
+ <string> "3D" </string>
+ <dictionary>
+ <string> "zfar" </string>
+ <real> 500 </real>
+ <string> "fov" </string>
+ <real> 45 </real>
+ <string> "window_mode" </string>
+ <int> 0 </int>
+ <string> "window_0" </string>
+ <dictionary>
+ <string> "distance" </string>
+ <real> 10.07268 </real>
+ <string> "default_light" </string>
+ <bool> True </bool>
+ <string> "x_rot" </string>
+ <real> 0.337 </real>
+ <string> "y_rot" </string>
+ <real> -0.575 </real>
+ <string> "show_grid" </string>
+ <bool> True </bool>
+ <string> "show_origin" </string>
+ <bool> True </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ <string> "znear" </string>
+ <real> 0.1 </real>
+ </dictionary>
+ </dictionary>
+ <string> "__editor_run_settings__" </string>
+ <dictionary>
+ <string> "custom_args" </string>
+ <string> "-l $scene" </string>
+ <string> "run_mode" </string>
+ <int> 0 </int>
+ </dictionary>
+ <string> "__editor_plugin_screen__" </string>
+ <string> "Script" </string>
+ </dictionary>
+ <real> 0.559322 </real>
+ <int> 24 </int>
+ <real> 0.1 </real>
+ <resource resource_type="Texture" path="res://bullet.png"> </resource>
+ <real> 10 </real>
+ <int> 2 </int>
+ <color> 1, 1, 1, 1 </color>
+ <color> 1, 0, 0, 0 </color>
+ <color> 0, 0, 0, 1 </color>
+ <resource name=""></resource> <rect2> 0, 0, 0, 0 </rect2>
+ <node_path> ".." </node_path>
+ <resource resource_type="Animation" path="local://1"> </resource>
+ <array len="0">
+ </array>
+ <string> "" </string>
+ </array>
+ <string> "nodes" </string>
+ <int_array len="356"> -1, -1, 1, 0, -1, 32, 2, 0, 3, 0, 4, 0, 5, 0, 6, 1, 7, 2, 8, 0, 9, 3, 10, 3, 11, 2, 12, 1, 13, 2, 14, 4, 15, 5, 16, 6, 17, 7, 18, 8, 19, 9, 20, 1, 21, 3, 22, 3, 23, 5, 24, 0, 25, 0, 26, 1, 27, 0, 28, 2, 29, 2, 30, 4, 31, 5, 32, 10, 33, 11, 0, 0, 0, 35, 34, -1, 59, 2, 2, 3, 0, 4, 0, 5, 0, 6, 1, 7, 2, 8, 0, 9, 12, 10, 3, 11, 2, 12, 7, 13, 0, 14, 4, 15, 5, 16, 6, 36, 13, 37, 14, 38, 5, 39, 5, 40, 2, 41, 4, 42, 4, 43, 0, 44, 3, 45, 15, 46, 5, 47, 16, 48, 5, 49, 5, 50, 5, 51, 5, 52, 5, 53, 5, 54, 5, 55, 3, 56, 5, 57, 5, 58, 5, 59, 5, 60, 5, 61, 5, 62, 5, 63, 5, 64, 5, 65, 5, 66, 5, 67, 5, 68, 5, 69, 5, 70, 17, 71, 5, 72, 18, 73, 3, 74, 19, 75, 3, 76, 20, 77, 3, 78, 20, 32, 21, 0, 0, 0, 80, 79, -1, 27, 2, 0, 3, 0, 4, 0, 5, 0, 6, 1, 7, 2, 8, 0, 9, 3, 10, 3, 11, 2, 12, 1, 13, 0, 14, 4, 15, 5, 16, 6, 81, 15, 82, 2, 83, 4, 84, 0, 85, 0, 86, 7, 87, 7, 88, 1, 89, 18, 90, 0, 91, 22, 32, 21, 0, 0, 0, 92, 92, -1, 17, 2, 0, 3, 0, 4, 0, 5, 0, 6, 1, 7, 2, 8, 0, 9, 3, 10, 3, 11, 2, 12, 1, 13, 2, 14, 4, 15, 5, 16, 6, 93, 8, 32, 21, 0, 0, 0, 94, 94, -1, 9, 2, 0, 3, 0, 4, 0, 5, 0, 6, 1, 95, 3, 96, 2, 97, 2, 32, 21, 0, 0, 0, 99, 98, -1, 13, 2, 0, 3, 0, 4, 0, 5, 0, 6, 1, 100, 7, 101, 5, 102, 23, 103, 3, 104, 24, 105, 25, 106, 26, 32, 21, 0 </int_array>
+ <string> "conns" </string>
+ <int_array len="6"> 4, 0, 108, 107, 2, 0 </int_array>
+ </dictionary>
+ <resource name="script/script"></resource>
+ </main_resource>
+</resource_file> \ No newline at end of file
diff --git a/demos/2d/platformer/coin.gd b/demos/2d/platformer/coin.gd
new file mode 100644
index 0000000000..3e31a395ae
--- /dev/null
+++ b/demos/2d/platformer/coin.gd
@@ -0,0 +1,20 @@
+
+extends Area2D
+
+# member variables here, example:
+# var a=2
+# var b="textvar"
+
+var taken=false
+
+
+func _on_body_enter( body ):
+ if (not taken and body extends preload("res://player.gd")):
+ get_node("anim").play("taken")
+ taken=true
+
+
+func _ready():
+ # Initalization here
+ pass
+
diff --git a/demos/2d/platformer/coin.png b/demos/2d/platformer/coin.png
new file mode 100644
index 0000000000..c35c5ebf28
--- /dev/null
+++ b/demos/2d/platformer/coin.png
Binary files differ
diff --git a/demos/2d/platformer/coin.xml b/demos/2d/platformer/coin.xml
new file mode 100644
index 0000000000..194ea711b0
--- /dev/null
+++ b/demos/2d/platformer/coin.xml
@@ -0,0 +1,437 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<resource_file type="PackedScene" subresource_count="9" version="1.0" version_name="Godot Engine v1.0.3917-beta1">
+ <ext_resource path="res://bullet.*" type="Texture"></ext_resource>
+ <ext_resource path="res://coin.*" type="Texture"></ext_resource>
+ <ext_resource path="res://sound_coin.*" type="Sample"></ext_resource>
+ <ext_resource path="res://coin.*" type="Script"></ext_resource>
+ <resource type="CircleShape2D" path="local://1">
+ <real name="custom_solver_bias"> 0 </real>
+ <real name="radius"> 10 </real>
+
+ </resource>
+ <resource type="Animation" path="local://2">
+ <string name="resource/name"> "taken" </string>
+ <real name="length"> 8 </real>
+ <bool name="loop"> False </bool>
+ <real name="step"> 0 </real>
+ <string name="tracks/0/type"> "value" </string>
+ <node_path name="tracks/0/path"> "sprite:frame" </node_path>
+ <int name="tracks/0/interp"> 1 </int>
+ <dictionary name="tracks/0/keys" shared="false">
+ <string> "cont" </string>
+ <bool> True </bool>
+ <string> "transitions" </string>
+ <real_array len="1"> 1 </real_array>
+ <string> "values" </string>
+ <array len="1" shared="false">
+ <int> 0 </int>
+ </array>
+ <string> "times" </string>
+ <real_array len="1"> 0 </real_array>
+ </dictionary>
+ <string name="tracks/1/type"> "value" </string>
+ <node_path name="tracks/1/path"> "sound:play/play" </node_path>
+ <int name="tracks/1/interp"> 1 </int>
+ <dictionary name="tracks/1/keys" shared="false">
+ <string> "cont" </string>
+ <bool> False </bool>
+ <string> "transitions" </string>
+ <real_array len="1"> 1 </real_array>
+ <string> "values" </string>
+ <array len="1" shared="false">
+ <string> "coin" </string>
+ </array>
+ <string> "times" </string>
+ <real_array len="1"> 0 </real_array>
+ </dictionary>
+ <string name="tracks/2/type"> "value" </string>
+ <node_path name="tracks/2/path"> "particles:visibility/self_opacity" </node_path>
+ <int name="tracks/2/interp"> 1 </int>
+ <dictionary name="tracks/2/keys" shared="false">
+ <string> "cont" </string>
+ <bool> True </bool>
+ <string> "transitions" </string>
+ <real_array len="2"> 1, 1 </real_array>
+ <string> "values" </string>
+ <array len="2" shared="false">
+ <real> 1 </real>
+ <real> 0 </real>
+ </array>
+ <string> "times" </string>
+ <real_array len="2"> 0, 1.66 </real_array>
+ </dictionary>
+ <string name="tracks/3/type"> "value" </string>
+ <node_path name="tracks/3/path"> "sprite:visibility/self_opacity" </node_path>
+ <int name="tracks/3/interp"> 1 </int>
+ <dictionary name="tracks/3/keys" shared="false">
+ <string> "cont" </string>
+ <bool> True </bool>
+ <string> "transitions" </string>
+ <real_array len="2"> 1, 1 </real_array>
+ <string> "values" </string>
+ <array len="2" shared="false">
+ <real> 1 </real>
+ <real> 0 </real>
+ </array>
+ <string> "times" </string>
+ <real_array len="2"> 0, 0.4 </real_array>
+ </dictionary>
+ <string name="tracks/4/type"> "value" </string>
+ <node_path name="tracks/4/path"> "particles:config/emitting" </node_path>
+ <int name="tracks/4/interp"> 1 </int>
+ <dictionary name="tracks/4/keys" shared="false">
+ <string> "cont" </string>
+ <bool> False </bool>
+ <string> "transitions" </string>
+ <real_array len="1"> 1 </real_array>
+ <string> "values" </string>
+ <array len="1" shared="false">
+ <bool> True </bool>
+ </array>
+ <string> "times" </string>
+ <real_array len="1"> 0 </real_array>
+ </dictionary>
+ <string name="tracks/5/type"> "method" </string>
+ <node_path name="tracks/5/path"> "." </node_path>
+ <int name="tracks/5/interp"> 1 </int>
+ <dictionary name="tracks/5/keys" shared="false">
+ <string> "transitions" </string>
+ <real_array len="1"> 1 </real_array>
+ <string> "values" </string>
+ <array len="1" shared="false">
+ <dictionary shared="false">
+ <string> "args" </string>
+ <array len="0" shared="false">
+ </array>
+ <string> "method" </string>
+ <string> "queue_free" </string>
+ </dictionary>
+ </array>
+ <string> "times" </string>
+ <real_array len="1"> 2.7 </real_array>
+ </dictionary>
+
+ </resource>
+ <resource type="Animation" path="local://3">
+ <string name="resource/name"> "spin" </string>
+ <real name="length"> 1.5 </real>
+ <bool name="loop"> True </bool>
+ <real name="step"> 0.25 </real>
+ <string name="tracks/0/type"> "value" </string>
+ <node_path name="tracks/0/path"> "sprite:frame" </node_path>
+ <int name="tracks/0/interp"> 1 </int>
+ <dictionary name="tracks/0/keys" shared="false">
+ <string> "cont" </string>
+ <bool> False </bool>
+ <string> "transitions" </string>
+ <real_array len="7"> 1, 1, 1, 1, 1, 1, 1 </real_array>
+ <string> "values" </string>
+ <array len="7" shared="false">
+ <int> 0 </int>
+ <int> 1 </int>
+ <int> 2 </int>
+ <int> 3 </int>
+ <int> 2 </int>
+ <int> 1 </int>
+ <int> 0 </int>
+ </array>
+ <string> "times" </string>
+ <real_array len="7"> 0, 0.25, 0.5, 0.75, 1, 1.25, 1.5 </real_array>
+ </dictionary>
+
+ </resource>
+ <resource type="SampleLibrary" path="local://4">
+ <dictionary name="samples/coin" shared="false">
+ <string> "db" </string>
+ <real> 0 </real>
+ <string> "pitch" </string>
+ <real> 1 </real>
+ <string> "sample" </string>
+ <resource resource_type="Sample" path="res://sound_coin.*"> </resource>
+ </dictionary>
+
+ </resource>
+ <main_resource>
+ <dictionary name="_bundled" shared="false">
+ <string> "names" </string>
+ <string_array len="115">
+ <string> "coin" </string>
+ <string> "Area2D" </string>
+ <string> "visibility/visible" </string>
+ <string> "visibility/opacity" </string>
+ <string> "visibility/self_opacity" </string>
+ <string> "visibility/on_top" </string>
+ <string> "transform/pos" </string>
+ <string> "transform/rot" </string>
+ <string> "transform/scale" </string>
+ <string> "shape_count" </string>
+ <string> "shapes/0/shape" </string>
+ <string> "shapes/0/transform" </string>
+ <string> "shapes/0/trigger" </string>
+ <string> "gravity_point" </string>
+ <string> "gravity_vec" </string>
+ <string> "gravity" </string>
+ <string> "density" </string>
+ <string> "monitoring" </string>
+ <string> "script/script" </string>
+ <string> "__meta__" </string>
+ <string> "sprite" </string>
+ <string> "Sprite" </string>
+ <string> "texture" </string>
+ <string> "centered" </string>
+ <string> "offset" </string>
+ <string> "flip_h" </string>
+ <string> "flip_v" </string>
+ <string> "vframes" </string>
+ <string> "hframes" </string>
+ <string> "frame" </string>
+ <string> "modulate" </string>
+ <string> "region" </string>
+ <string> "region_rect" </string>
+ <string> "anim" </string>
+ <string> "AnimationPlayer" </string>
+ <string> "playback/process_mode" </string>
+ <string> "playback/default_blend_time" </string>
+ <string> "root/root" </string>
+ <string> "anims/taken" </string>
+ <string> "anims/spin" </string>
+ <string> "playback/active" </string>
+ <string> "playback/speed" </string>
+ <string> "blend_times" </string>
+ <string> "autoplay" </string>
+ <string> "collision" </string>
+ <string> "CollisionShape2D" </string>
+ <string> "shape" </string>
+ <string> "trigger" </string>
+ <string> "sound" </string>
+ <string> "SamplePlayer2D" </string>
+ <string> "params/volume_db" </string>
+ <string> "params/pitch_scale" </string>
+ <string> "params/attenuation/min_distance" </string>
+ <string> "params/attenuation/max_distance" </string>
+ <string> "params/attenuation/distance_exp" </string>
+ <string> "config/polyphony" </string>
+ <string> "config/samples" </string>
+ <string> "config/pitch_random" </string>
+ <string> "particles" </string>
+ <string> "Particles2D" </string>
+ <string> "visibility/blend_mode" </string>
+ <string> "config/amount" </string>
+ <string> "config/lifetime" </string>
+ <string> "config/time_scale" </string>
+ <string> "config/preprocess" </string>
+ <string> "config/emit_timeout" </string>
+ <string> "config/emitting" </string>
+ <string> "config/offset" </string>
+ <string> "config/half_extents" </string>
+ <string> "config/local_space" </string>
+ <string> "config/explosiveness" </string>
+ <string> "config/texture" </string>
+ <string> "params/direction" </string>
+ <string> "params/spread" </string>
+ <string> "params/linear_velocity" </string>
+ <string> "params/spin_velocity" </string>
+ <string> "params/orbit_velocity" </string>
+ <string> "params/gravity_direction" </string>
+ <string> "params/gravity_strength" </string>
+ <string> "params/radial_accel" </string>
+ <string> "params/tangential_accel" </string>
+ <string> "params/damping" </string>
+ <string> "params/initial_size" </string>
+ <string> "params/final_size" </string>
+ <string> "params/hue_variation" </string>
+ <string> "randomness/direction" </string>
+ <string> "randomness/spread" </string>
+ <string> "randomness/linear_velocity" </string>
+ <string> "randomness/spin_velocity" </string>
+ <string> "randomness/orbit_velocity" </string>
+ <string> "randomness/gravity_direction" </string>
+ <string> "randomness/gravity_strength" </string>
+ <string> "randomness/radial_accel" </string>
+ <string> "randomness/tangential_accel" </string>
+ <string> "randomness/damping" </string>
+ <string> "randomness/initial_size" </string>
+ <string> "randomness/final_size" </string>
+ <string> "randomness/hue_variation" </string>
+ <string> "color_phases/count" </string>
+ <string> "phase_0/pos" </string>
+ <string> "phase_0/color" </string>
+ <string> "phase_1/pos" </string>
+ <string> "phase_1/color" </string>
+ <string> "phase_2/pos" </string>
+ <string> "phase_2/color" </string>
+ <string> "phase_3/pos" </string>
+ <string> "phase_3/color" </string>
+ <string> "emission_points" </string>
+ <string> "enabler" </string>
+ <string> "VisibilityEnabler2D" </string>
+ <string> "rect" </string>
+ <string> "enabler/pause_animations" </string>
+ <string> "enabler/freeze_bodies" </string>
+ <string> "_on_body_enter" </string>
+ <string> "body_enter" </string>
+ </string_array>
+ <string> "version" </string>
+ <int> 1 </int>
+ <string> "conn_count" </string>
+ <int> 1 </int>
+ <string> "node_count" </string>
+ <int> 7 </int>
+ <string> "variants" </string>
+ <array len="37" shared="false">
+ <bool> True </bool>
+ <real> 1 </real>
+ <vector2> 0, 0 </vector2>
+ <real> 0 </real>
+ <vector2> 1, 1 </vector2>
+ <int> 1 </int>
+ <resource resource_type="Shape2D" path="local://1"> </resource>
+ <matrix32> 1, 0, 0, 1, 0, 0 </matrix32>
+ <bool> False </bool>
+ <vector2> 0, 1 </vector2>
+ <real> 98 </real>
+ <real> 0.1 </real>
+ <resource resource_type="Script" path="res://coin.*"> </resource>
+ <dictionary shared="false">
+ <string> "__editor_plugin_states__" </string>
+ <dictionary shared="false">
+ <string> "Script" </string>
+ <dictionary shared="false">
+ <string> "current" </string>
+ <int> 2 </int>
+ <string> "sources" </string>
+ <array len="3" shared="false">
+ <string> "res://enemy.gd" </string>
+ <string> "res://player.gd" </string>
+ <string> "res://coin.gd" </string>
+ </array>
+ </dictionary>
+ <string> "2D" </string>
+ <dictionary shared="false">
+ <string> "pixel_snap" </string>
+ <bool> False </bool>
+ <string> "zoom" </string>
+ <real> 3.794776 </real>
+ <string> "ofs" </string>
+ <vector2> -34.3697, -21.6562 </vector2>
+ </dictionary>
+ <string> "3D" </string>
+ <dictionary shared="false">
+ <string> "zfar" </string>
+ <real> 500 </real>
+ <string> "fov" </string>
+ <real> 45 </real>
+ <string> "viewports" </string>
+ <array len="4" shared="false">
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ </array>
+ <string> "viewport_mode" </string>
+ <int> 1 </int>
+ <string> "default_light" </string>
+ <bool> True </bool>
+ <string> "show_grid" </string>
+ <bool> True </bool>
+ <string> "show_origin" </string>
+ <bool> True </bool>
+ <string> "znear" </string>
+ <real> 0.1 </real>
+ </dictionary>
+ </dictionary>
+ <string> "__editor_run_settings__" </string>
+ <dictionary shared="false">
+ <string> "custom_args" </string>
+ <string> "-l $scene" </string>
+ <string> "run_mode" </string>
+ <int> 0 </int>
+ </dictionary>
+ <string> "__editor_plugin_screen__" </string>
+ <string> "2D" </string>
+ </dictionary>
+ <resource resource_type="Texture" path="res://coin.*"> </resource>
+ <int> 4 </int>
+ <int> 0 </int>
+ <color> 1, 1, 1, 1 </color>
+ <rect2> 0, 0, 0, 0 </rect2>
+ <node_path> ".." </node_path>
+ <resource resource_type="Animation" path="local://2"> </resource>
+ <resource resource_type="Animation" path="local://3"> </resource>
+ <real> 3 </real>
+ <array len="0" shared="false">
+ </array>
+ <string> "spin" </string>
+ <real> 2048 </real>
+ <resource resource_type="SampleLibrary" path="local://4"> </resource>
+ <int> 8 </int>
+ <real> 0.4 </real>
+ <vector2> 5, 5 </vector2>
+ <resource resource_type="Texture" path="res://bullet.*"> </resource>
+ <real> 10 </real>
+ <real> 0.2 </real>
+ <int> 2 </int>
+ <color> 0, 0, 0, 1 </color>
+ <vector2_array len="0"> </vector2_array>
+ <rect2> -10, -10, 20, 20 </rect2>
+ </array>
+ <string> "nodes" </string>
+ <int_array len="317"> -1, -1, 1, 0, -1, 18, 2, 0, 3, 1, 4, 1, 5, 0, 6, 2, 7, 3, 8, 4, 9, 5, 10, 6, 11, 7, 12, 8, 13, 8, 14, 9, 15, 10, 16, 11, 17, 0, 18, 12, 19, 13, 0, 0, 0, 21, 20, -1, 18, 2, 0, 3, 1, 4, 1, 5, 0, 6, 2, 7, 3, 8, 4, 22, 14, 23, 0, 24, 2, 25, 8, 26, 8, 27, 5, 28, 15, 29, 16, 30, 17, 31, 8, 32, 18, 0, 0, 0, 34, 33, -1, 9, 35, 5, 36, 3, 37, 19, 38, 20, 39, 21, 40, 0, 41, 22, 42, 23, 43, 24, 0, 0, 0, 45, 44, -1, 9, 2, 0, 3, 1, 4, 1, 5, 0, 6, 2, 7, 3, 8, 4, 46, 6, 47, 8, 0, 0, 0, 49, 48, -1, 15, 2, 0, 3, 1, 4, 1, 5, 0, 6, 2, 7, 3, 8, 4, 50, 3, 51, 1, 52, 1, 53, 25, 54, 1, 55, 5, 56, 26, 57, 3, 0, 0, 0, 59, 58, -1, 55, 2, 0, 3, 1, 4, 1, 5, 0, 60, 5, 6, 2, 7, 3, 8, 4, 61, 27, 62, 28, 63, 1, 64, 3, 65, 3, 66, 8, 67, 2, 68, 29, 69, 0, 70, 1, 71, 30, 72, 3, 73, 31, 74, 3, 75, 3, 76, 3, 77, 3, 78, 3, 79, 3, 80, 3, 81, 3, 82, 32, 83, 32, 84, 3, 85, 3, 86, 3, 87, 3, 88, 3, 89, 3, 90, 3, 91, 3, 92, 3, 93, 3, 94, 3, 95, 3, 96, 3, 97, 3, 98, 33, 99, 3, 100, 17, 101, 1, 102, 34, 103, 1, 104, 34, 105, 1, 106, 34, 107, 35, 0, 0, 0, 109, 108, -1, 10, 2, 0, 3, 1, 4, 1, 5, 0, 6, 2, 7, 3, 8, 4, 110, 36, 111, 0, 112, 0, 0 </int_array>
+ <string> "conns" </string>
+ <int_array len="6"> 0, 0, 114, 113, 2, 0 </int_array>
+ </dictionary>
+
+ </main_resource>
+</resource_file> \ No newline at end of file
diff --git a/demos/2d/platformer/enemy.gd b/demos/2d/platformer/enemy.gd
new file mode 100644
index 0000000000..5ec7cb28a7
--- /dev/null
+++ b/demos/2d/platformer/enemy.gd
@@ -0,0 +1,97 @@
+
+extends RigidBody2D
+
+# member variables here, example:
+# var a=2
+# var b="textvar"
+
+const STATE_WALKING = 0
+const STATE_DYING = 1
+
+
+var state = STATE_WALKING
+
+
+var direction = -1
+var anim=""
+
+var rc_left=null
+var rc_right=null
+var WALK_SPEED = 50
+
+var bullet_class = preload("res://bullet.gd")
+
+func _die():
+ queue_free()
+
+func _pre_explode():
+ #stay there
+ clear_shapes()
+ set_mode(MODE_STATIC)
+ get_node("sound").play("explode")
+
+
+func _integrate_forces(s):
+
+ var lv = s.get_linear_velocity()
+ var new_anim=anim
+
+ if (state==STATE_DYING):
+ new_anim="explode"
+ elif (state==STATE_WALKING):
+
+ new_anim="walk"
+
+ var wall_side=0.0
+
+ for i in range(s.get_contact_count()):
+ var cc = s.get_contact_collider_object(i)
+ var dp = s.get_contact_local_normal(i)
+
+ if (cc):
+
+
+ if (cc extends bullet_class and not cc.disabled):
+ set_mode(MODE_RIGID)
+ state=STATE_DYING
+ #lv=s.get_contact_local_normal(i)*400
+ s.set_angular_velocity(sign(dp.x)*33.0)
+ set_friction(true)
+ cc.disable()
+ get_node("sound").play("hit")
+
+ break
+
+
+ if (dp.x>0.9):
+ wall_side=1.0
+ elif (dp.x<-0.9):
+ wall_side=-1.0
+
+ if (wall_side!=0 and wall_side!=direction):
+
+ direction=-direction
+ get_node("sprite").set_scale( Vector2(-direction,1) )
+ if (direction<0 and not rc_left.is_colliding() and rc_right.is_colliding()):
+ direction=-direction
+ get_node("sprite").set_scale( Vector2(-direction,1) )
+ elif (direction>0 and not rc_right.is_colliding() and rc_left.is_colliding()):
+ direction=-direction
+ get_node("sprite").set_scale( Vector2(-direction,1) )
+
+
+ lv.x = direction * WALK_SPEED
+
+ if( anim!=new_anim ):
+ anim=new_anim
+ get_node("anim").play(anim)
+
+ s.set_linear_velocity(lv)
+
+
+func _ready():
+ # Initalization here
+ rc_left=get_node("raycast_left")
+ rc_right=get_node("raycast_right")
+
+
diff --git a/demos/2d/platformer/enemy.png b/demos/2d/platformer/enemy.png
new file mode 100644
index 0000000000..37fe468b0f
--- /dev/null
+++ b/demos/2d/platformer/enemy.png
Binary files differ
diff --git a/demos/2d/platformer/enemy.xml b/demos/2d/platformer/enemy.xml
new file mode 100644
index 0000000000..470797db46
--- /dev/null
+++ b/demos/2d/platformer/enemy.xml
@@ -0,0 +1,481 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<resource_file type="PackedScene" subresource_count="11" version="1.0" version_name="Godot Engine v1.0.3917-beta1">
+ <ext_resource path="res://sound_explode.*" type="Sample"></ext_resource>
+ <ext_resource path="res://enemy.*" type="Texture"></ext_resource>
+ <ext_resource path="res://enemy.*" type="Script"></ext_resource>
+ <ext_resource path="res://sound_hit.*" type="Sample"></ext_resource>
+ <ext_resource path="res://bullet.*" type="Texture"></ext_resource>
+ <resource type="CircleShape2D" path="local://1">
+ <real name="custom_solver_bias"> 0 </real>
+ <real name="radius"> 14 </real>
+
+ </resource>
+ <resource type="Animation" path="local://2">
+ <string name="resource/name"> "idle" </string>
+ <real name="length"> 6.75 </real>
+ <bool name="loop"> True </bool>
+ <real name="step"> 0.25 </real>
+ <string name="tracks/0/type"> "value" </string>
+ <node_path name="tracks/0/path"> "sprite:frame" </node_path>
+ <int name="tracks/0/interp"> 1 </int>
+ <dictionary name="tracks/0/keys" shared="false">
+ <string> "cont" </string>
+ <bool> False </bool>
+ <string> "transitions" </string>
+ <real_array len="10"> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 </real_array>
+ <string> "values" </string>
+ <array len="10" shared="false">
+ <int> 5 </int>
+ <int> 6 </int>
+ <int> 5 </int>
+ <int> 6 </int>
+ <int> 5 </int>
+ <int> 6 </int>
+ <int> 7 </int>
+ <int> 6 </int>
+ <int> 7 </int>
+ <int> 5 </int>
+ </array>
+ <string> "times" </string>
+ <real_array len="10"> 0, 0.75, 1.5, 2.25, 3, 3.75, 4.5, 5.25, 6, 6.75 </real_array>
+ </dictionary>
+
+ </resource>
+ <resource type="Animation" path="local://3">
+ <string name="resource/name"> "explode" </string>
+ <real name="length"> 6 </real>
+ <bool name="loop"> False </bool>
+ <real name="step"> 0 </real>
+ <string name="tracks/0/type"> "value" </string>
+ <node_path name="tracks/0/path"> "sprite:visibility/self_opacity" </node_path>
+ <int name="tracks/0/interp"> 1 </int>
+ <dictionary name="tracks/0/keys" shared="false">
+ <string> "cont" </string>
+ <bool> True </bool>
+ <string> "transitions" </string>
+ <real_array len="2"> 1, 1 </real_array>
+ <string> "values" </string>
+ <array len="2" shared="false">
+ <real> 1 </real>
+ <real> 0 </real>
+ </array>
+ <string> "times" </string>
+ <real_array len="2"> 3.58422, 4.33851 </real_array>
+ </dictionary>
+ <string name="tracks/1/type"> "value" </string>
+ <node_path name="tracks/1/path"> "sprite:frame" </node_path>
+ <int name="tracks/1/interp"> 1 </int>
+ <dictionary name="tracks/1/keys" shared="false">
+ <string> "cont" </string>
+ <bool> True </bool>
+ <string> "transitions" </string>
+ <real_array len="1"> 1 </real_array>
+ <string> "values" </string>
+ <array len="1" shared="false">
+ <int> 4 </int>
+ </array>
+ <string> "times" </string>
+ <real_array len="1"> 0 </real_array>
+ </dictionary>
+ <string name="tracks/2/type"> "value" </string>
+ <node_path name="tracks/2/path"> "Particles2D:config/emitting" </node_path>
+ <int name="tracks/2/interp"> 1 </int>
+ <dictionary name="tracks/2/keys" shared="false">
+ <string> "cont" </string>
+ <bool> False </bool>
+ <string> "transitions" </string>
+ <real_array len="1"> 1 </real_array>
+ <string> "values" </string>
+ <array len="1" shared="false">
+ <bool> True </bool>
+ </array>
+ <string> "times" </string>
+ <real_array len="1"> 3.47394 </real_array>
+ </dictionary>
+ <string name="tracks/3/type"> "method" </string>
+ <node_path name="tracks/3/path"> "." </node_path>
+ <int name="tracks/3/interp"> 1 </int>
+ <dictionary name="tracks/3/keys" shared="false">
+ <string> "transitions" </string>
+ <real_array len="2"> 1, 1 </real_array>
+ <string> "values" </string>
+ <array len="2" shared="false">
+ <dictionary shared="false">
+ <string> "args" </string>
+ <array len="0" shared="false">
+ </array>
+ <string> "method" </string>
+ <string> "_pre_explode" </string>
+ </dictionary>
+ <dictionary shared="false">
+ <string> "args" </string>
+ <array len="0" shared="false">
+ </array>
+ <string> "method" </string>
+ <string> "_die" </string>
+ </dictionary>
+ </array>
+ <string> "times" </string>
+ <real_array len="2"> 3.20357, 5.07305 </real_array>
+ </dictionary>
+
+ </resource>
+ <resource type="Animation" path="local://4">
+ <string name="resource/name"> "walk" </string>
+ <real name="length"> 1.25 </real>
+ <bool name="loop"> True </bool>
+ <real name="step"> 0.25 </real>
+ <string name="tracks/0/type"> "value" </string>
+ <node_path name="tracks/0/path"> "sprite:frame" </node_path>
+ <int name="tracks/0/interp"> 1 </int>
+ <dictionary name="tracks/0/keys" shared="false">
+ <string> "cont" </string>
+ <bool> False </bool>
+ <string> "transitions" </string>
+ <real_array len="6"> 1, 1, 1, 1, 1, 1 </real_array>
+ <string> "values" </string>
+ <array len="6" shared="false">
+ <int> 0 </int>
+ <int> 1 </int>
+ <int> 2 </int>
+ <int> 3 </int>
+ <int> 4 </int>
+ <int> 0 </int>
+ </array>
+ <string> "times" </string>
+ <real_array len="6"> 0, 0.25, 0.5, 0.75, 1, 1.25 </real_array>
+ </dictionary>
+
+ </resource>
+ <resource type="SampleLibrary" path="local://5">
+ <dictionary name="samples/explode" shared="false">
+ <string> "db" </string>
+ <real> 0 </real>
+ <string> "pitch" </string>
+ <real> 1 </real>
+ <string> "sample" </string>
+ <resource resource_type="Sample" path="res://sound_explode.*"> </resource>
+ </dictionary>
+ <dictionary name="samples/hit" shared="false">
+ <string> "db" </string>
+ <real> 0 </real>
+ <string> "pitch" </string>
+ <real> 1 </real>
+ <string> "sample" </string>
+ <resource resource_type="Sample" path="res://sound_hit.*"> </resource>
+ </dictionary>
+
+ </resource>
+ <main_resource>
+ <dictionary name="_bundled" shared="false">
+ <string> "names" </string>
+ <string_array len="132">
+ <string> "enemy" </string>
+ <string> "RigidBody2D" </string>
+ <string> "visibility/visible" </string>
+ <string> "visibility/opacity" </string>
+ <string> "visibility/self_opacity" </string>
+ <string> "visibility/on_top" </string>
+ <string> "transform/pos" </string>
+ <string> "transform/rot" </string>
+ <string> "transform/scale" </string>
+ <string> "shape_count" </string>
+ <string> "shapes/0/shape" </string>
+ <string> "shapes/0/transform" </string>
+ <string> "shapes/0/trigger" </string>
+ <string> "shapes/1/shape" </string>
+ <string> "shapes/1/transform" </string>
+ <string> "shapes/1/trigger" </string>
+ <string> "shapes/2/shape" </string>
+ <string> "shapes/2/transform" </string>
+ <string> "shapes/2/trigger" </string>
+ <string> "mode" </string>
+ <string> "mass" </string>
+ <string> "friction" </string>
+ <string> "bounce" </string>
+ <string> "custom_integrator" </string>
+ <string> "continuous_cd" </string>
+ <string> "contacts_reported" </string>
+ <string> "contact_monitor" </string>
+ <string> "active" </string>
+ <string> "can_sleep" </string>
+ <string> "velocity/linear" </string>
+ <string> "velocity/angular" </string>
+ <string> "script/script" </string>
+ <string> "__meta__" </string>
+ <string> "enabler" </string>
+ <string> "VisibilityEnabler2D" </string>
+ <string> "rect" </string>
+ <string> "enabler/pause_animations" </string>
+ <string> "enabler/freeze_bodies" </string>
+ <string> "anim" </string>
+ <string> "AnimationPlayer" </string>
+ <string> "playback/process_mode" </string>
+ <string> "playback/default_blend_time" </string>
+ <string> "root/root" </string>
+ <string> "anims/idle" </string>
+ <string> "anims/explode" </string>
+ <string> "anims/walk" </string>
+ <string> "playback/active" </string>
+ <string> "playback/speed" </string>
+ <string> "blend_times" </string>
+ <string> "autoplay" </string>
+ <string> "CollisionShape2D" </string>
+ <string> "shape" </string>
+ <string> "trigger" </string>
+ <string> "CollisionShape2D 2" </string>
+ <string> "CollisionShape2D 3" </string>
+ <string> "sprite" </string>
+ <string> "Sprite" </string>
+ <string> "texture" </string>
+ <string> "centered" </string>
+ <string> "offset" </string>
+ <string> "flip_h" </string>
+ <string> "flip_v" </string>
+ <string> "vframes" </string>
+ <string> "hframes" </string>
+ <string> "frame" </string>
+ <string> "modulate" </string>
+ <string> "region" </string>
+ <string> "region_rect" </string>
+ <string> "raycast_left" </string>
+ <string> "RayCast2D" </string>
+ <string> "enabled" </string>
+ <string> "cast_to" </string>
+ <string> "raycast_right" </string>
+ <string> "Particles2D" </string>
+ <string> "visibility/blend_mode" </string>
+ <string> "config/amount" </string>
+ <string> "config/lifetime" </string>
+ <string> "config/time_scale" </string>
+ <string> "config/preprocess" </string>
+ <string> "config/emit_timeout" </string>
+ <string> "config/emitting" </string>
+ <string> "config/offset" </string>
+ <string> "config/half_extents" </string>
+ <string> "config/local_space" </string>
+ <string> "config/explosiveness" </string>
+ <string> "config/texture" </string>
+ <string> "params/direction" </string>
+ <string> "params/spread" </string>
+ <string> "params/linear_velocity" </string>
+ <string> "params/spin_velocity" </string>
+ <string> "params/orbit_velocity" </string>
+ <string> "params/gravity_direction" </string>
+ <string> "params/gravity_strength" </string>
+ <string> "params/radial_accel" </string>
+ <string> "params/tangential_accel" </string>
+ <string> "params/damping" </string>
+ <string> "params/initial_size" </string>
+ <string> "params/final_size" </string>
+ <string> "params/hue_variation" </string>
+ <string> "randomness/direction" </string>
+ <string> "randomness/spread" </string>
+ <string> "randomness/linear_velocity" </string>
+ <string> "randomness/spin_velocity" </string>
+ <string> "randomness/orbit_velocity" </string>
+ <string> "randomness/gravity_direction" </string>
+ <string> "randomness/gravity_strength" </string>
+ <string> "randomness/radial_accel" </string>
+ <string> "randomness/tangential_accel" </string>
+ <string> "randomness/damping" </string>
+ <string> "randomness/initial_size" </string>
+ <string> "randomness/final_size" </string>
+ <string> "randomness/hue_variation" </string>
+ <string> "color_phases/count" </string>
+ <string> "phase_0/pos" </string>
+ <string> "phase_0/color" </string>
+ <string> "phase_1/pos" </string>
+ <string> "phase_1/color" </string>
+ <string> "phase_2/pos" </string>
+ <string> "phase_2/color" </string>
+ <string> "phase_3/pos" </string>
+ <string> "phase_3/color" </string>
+ <string> "emission_points" </string>
+ <string> "sound" </string>
+ <string> "SamplePlayer2D" </string>
+ <string> "params/volume_db" </string>
+ <string> "params/pitch_scale" </string>
+ <string> "params/attenuation/min_distance" </string>
+ <string> "params/attenuation/max_distance" </string>
+ <string> "params/attenuation/distance_exp" </string>
+ <string> "config/polyphony" </string>
+ <string> "config/samples" </string>
+ <string> "config/pitch_random" </string>
+ </string_array>
+ <string> "version" </string>
+ <int> 1 </int>
+ <string> "conn_count" </string>
+ <int> 0 </int>
+ <string> "node_count" </string>
+ <int> 11 </int>
+ <string> "variants" </string>
+ <array len="51" shared="false">
+ <bool> True </bool>
+ <real> 1 </real>
+ <vector2> 0, 0 </vector2>
+ <real> 0 </real>
+ <vector2> 1, 1 </vector2>
+ <int> 3 </int>
+ <resource resource_type="Shape2D" path="local://1"> </resource>
+ <matrix32> 1, -0, 0, 1, -1.08072, -2.16144 </matrix32>
+ <bool> False </bool>
+ <matrix32> 1, -0, 0, 1, 6.48431, 3.24216 </matrix32>
+ <matrix32> 1, -0, 0, 1, -12.495, 3.53415 </matrix32>
+ <int> 2 </int>
+ <int> 4 </int>
+ <resource resource_type="Script" path="res://enemy.*"> </resource>
+ <dictionary shared="false">
+ <string> "__editor_plugin_states__" </string>
+ <dictionary shared="false">
+ <string> "Script" </string>
+ <dictionary shared="false">
+ <string> "current" </string>
+ <int> 0 </int>
+ <string> "sources" </string>
+ <array len="1" shared="false">
+ <string> "res://enemy.gd" </string>
+ </array>
+ </dictionary>
+ <string> "2D" </string>
+ <dictionary shared="false">
+ <string> "pixel_snap" </string>
+ <bool> False </bool>
+ <string> "zoom" </string>
+ <real> 1.108033 </real>
+ <string> "ofs" </string>
+ <vector2> -227.625, -197.9 </vector2>
+ </dictionary>
+ <string> "3D" </string>
+ <dictionary shared="false">
+ <string> "zfar" </string>
+ <real> 500 </real>
+ <string> "fov" </string>
+ <real> 45 </real>
+ <string> "viewports" </string>
+ <array len="4" shared="false">
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ </array>
+ <string> "viewport_mode" </string>
+ <int> 1 </int>
+ <string> "default_light" </string>
+ <bool> True </bool>
+ <string> "show_grid" </string>
+ <bool> True </bool>
+ <string> "show_origin" </string>
+ <bool> True </bool>
+ <string> "znear" </string>
+ <real> 0.1 </real>
+ </dictionary>
+ </dictionary>
+ <string> "__editor_run_settings__" </string>
+ <dictionary shared="false">
+ <string> "custom_args" </string>
+ <string> "-l $scene" </string>
+ <string> "run_mode" </string>
+ <int> 0 </int>
+ </dictionary>
+ <string> "__editor_plugin_screen__" </string>
+ <string> "2D" </string>
+ </dictionary>
+ <vector2> 16.2569, 11.0034 </vector2>
+ <vector2> 23.5056, 10.8629 </vector2>
+ <rect2> -10, -10, 20, 20 </rect2>
+ <int> 1 </int>
+ <node_path> ".." </node_path>
+ <resource resource_type="Animation" path="local://2"> </resource>
+ <resource resource_type="Animation" path="local://3"> </resource>
+ <resource resource_type="Animation" path="local://4"> </resource>
+ <real> 3 </real>
+ <array len="0" shared="false">
+ </array>
+ <string> "" </string>
+ <vector2> -1.08072, -2.16144 </vector2>
+ <vector2> 6.48431, 3.24216 </vector2>
+ <vector2> -12.495, 3.53415 </vector2>
+ <resource resource_type="Texture" path="res://enemy.*"> </resource>
+ <int> 8 </int>
+ <color> 1, 1, 1, 1 </color>
+ <rect2> 0, 0, 0, 0 </rect2>
+ <vector2> -33.2868, -9.34363 </vector2>
+ <vector2> 0, 45 </vector2>
+ <vector2> 29.1987, -9.34363 </vector2>
+ <real> 0.121212 </real>
+ <int> 32 </int>
+ <real> 0.5 </real>
+ <real> 0.1 </real>
+ <resource resource_type="Texture" path="res://bullet.*"> </resource>
+ <real> 180 </real>
+ <real> 90 </real>
+ <real> 2 </real>
+ <real> 9.8 </real>
+ <color> 1, 0.884956, 0.823009, 1 </color>
+ <color> 0.768627, 0.389381, 0, 0 </color>
+ <color> 0, 0, 0, 1 </color>
+ <vector2_array len="0"> </vector2_array>
+ <real> 2048 </real>
+ <resource resource_type="SampleLibrary" path="local://5"> </resource>
+ </array>
+ <string> "nodes" </string>
+ <int_array len="445"> -1, -1, 1, 0, -1, 31, 2, 0, 3, 1, 4, 1, 5, 0, 6, 2, 7, 3, 8, 4, 9, 5, 10, 6, 11, 7, 12, 8, 13, 6, 14, 9, 15, 8, 16, 6, 17, 10, 18, 8, 19, 11, 20, 1, 21, 3, 22, 3, 23, 8, 24, 8, 25, 12, 26, 8, 27, 0, 28, 0, 29, 2, 30, 3, 31, 13, 32, 14, 0, 0, 0, 34, 33, -1, 10, 2, 0, 3, 1, 4, 1, 5, 0, 6, 15, 7, 3, 8, 16, 35, 17, 36, 0, 37, 0, 0, 0, 0, 39, 38, -1, 10, 40, 18, 41, 3, 42, 19, 43, 20, 44, 21, 45, 22, 46, 0, 47, 23, 48, 24, 49, 25, 0, 0, 0, 50, 50, -1, 9, 2, 0, 3, 1, 4, 1, 5, 0, 6, 26, 7, 3, 8, 4, 51, 6, 52, 8, 0, 0, 0, 50, 53, -1, 9, 2, 0, 3, 1, 4, 1, 5, 0, 6, 27, 7, 3, 8, 4, 51, 6, 52, 8, 0, 0, 0, 50, 54, -1, 9, 2, 0, 3, 1, 4, 1, 5, 0, 6, 28, 7, 3, 8, 4, 51, 6, 52, 8, 0, 0, 0, 56, 55, -1, 18, 2, 0, 3, 1, 4, 1, 5, 0, 6, 2, 7, 3, 8, 4, 57, 29, 58, 0, 59, 2, 60, 8, 61, 8, 62, 18, 63, 30, 64, 12, 65, 31, 66, 8, 67, 32, 0, 0, 0, 69, 68, -1, 9, 2, 0, 3, 1, 4, 1, 5, 0, 6, 33, 7, 3, 8, 4, 70, 0, 71, 34, 0, 0, 0, 69, 72, -1, 9, 2, 0, 3, 1, 4, 1, 5, 0, 6, 35, 7, 3, 8, 4, 70, 0, 71, 34, 0, 0, 0, 73, 73, -1, 55, 2, 0, 3, 1, 4, 36, 5, 0, 74, 18, 6, 2, 7, 3, 8, 4, 75, 37, 76, 38, 77, 1, 78, 3, 79, 38, 80, 8, 81, 2, 82, 2, 83, 0, 84, 39, 85, 40, 86, 3, 87, 41, 88, 42, 89, 43, 90, 3, 91, 3, 92, 44, 93, 3, 94, 3, 95, 3, 96, 43, 97, 23, 98, 3, 99, 3, 100, 3, 101, 3, 102, 1, 103, 3, 104, 3, 105, 3, 106, 3, 107, 3, 108, 3, 109, 3, 110, 3, 111, 3, 112, 11, 113, 3, 114, 45, 115, 1, 116, 46, 117, 1, 118, 47, 119, 1, 120, 47, 121, 48, 0, 0, 0, 123, 122, -1, 15, 2, 0, 3, 1, 4, 1, 5, 0, 6, 2, 7, 3, 8, 4, 124, 3, 125, 1, 126, 1, 127, 49, 128, 1, 129, 5, 130, 50, 131, 3, 0 </int_array>
+ <string> "conns" </string>
+ <int_array len="0"> </int_array>
+ </dictionary>
+
+ </main_resource>
+</resource_file> \ No newline at end of file
diff --git a/demos/2d/platformer/engine.cfg b/demos/2d/platformer/engine.cfg
new file mode 100644
index 0000000000..0ca951ed00
--- /dev/null
+++ b/demos/2d/platformer/engine.cfg
@@ -0,0 +1,28 @@
+[application]
+
+name="Platformer"
+main_scene="res://stage.xml"
+icon="res://icon.png"
+name_es="Plataformero"
+
+[display]
+
+width=800
+height=480
+stretch_2d=true
+
+[input]
+
+move_left=[key(Left), jbutton(0, 14)]
+move_right=[key(Right), jbutton(0, 15)]
+jump=[key(Up), jbutton(0, 0)]
+shoot=[key(Space), jbutton(0, 2)]
+spawn=[key(F1), jbutton(0, 11)]
+
+[physics_2d]
+
+default_gravity=700
+
+[render]
+
+mipmap_policy=1
diff --git a/demos/2d/platformer/icon.png b/demos/2d/platformer/icon.png
new file mode 100644
index 0000000000..da2c08eb53
--- /dev/null
+++ b/demos/2d/platformer/icon.png
Binary files differ
diff --git a/demos/2d/platformer/moving_platform.gd b/demos/2d/platformer/moving_platform.gd
new file mode 100644
index 0000000000..719d9e460e
--- /dev/null
+++ b/demos/2d/platformer/moving_platform.gd
@@ -0,0 +1,27 @@
+
+extends Node2D
+
+# member variables here, example:
+# var a=2
+# var b="textvar"
+
+export var motion = Vector2()
+export var cycle = 1.0
+var accum=0.0
+
+func _fixed_process(delta):
+
+ accum += delta * (1.0/cycle) * PI * 2.0
+ accum = fmod(accum,PI*2.0)
+ var d = sin(accum)
+ var xf = Matrix32()
+ xf[2]= motion * d
+ get_node("platform").set_transform(xf)
+
+
+func _ready():
+ # Initalization here
+ set_fixed_process(true)
+ pass
+
+
diff --git a/demos/2d/platformer/moving_platform.png b/demos/2d/platformer/moving_platform.png
new file mode 100644
index 0000000000..f01c6ea37f
--- /dev/null
+++ b/demos/2d/platformer/moving_platform.png
Binary files differ
diff --git a/demos/2d/platformer/moving_platform.xml b/demos/2d/platformer/moving_platform.xml
new file mode 100644
index 0000000000..8f4e4c7741
--- /dev/null
+++ b/demos/2d/platformer/moving_platform.xml
@@ -0,0 +1,196 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<resource_file type="PackedScene" subresource_count="4" version="1.0" version_name="Godot Engine v1.0.3917-beta1">
+ <ext_resource path="res://moving_platform.*" type="Texture"></ext_resource>
+ <ext_resource path="res://moving_platform.*" type="Script"></ext_resource>
+ <resource type="ConvexPolygonShape2D" path="local://1">
+ <real name="custom_solver_bias"> 0 </real>
+ <vector2_array name="points" len="4"> -88, 24, -88, -24, 88, -24, 88, 24 </vector2_array>
+
+ </resource>
+ <main_resource>
+ <dictionary name="_bundled" shared="false">
+ <string> "names" </string>
+ <string_array len="39">
+ <string> "moving_platform" </string>
+ <string> "Node2D" </string>
+ <string> "visibility/visible" </string>
+ <string> "visibility/opacity" </string>
+ <string> "visibility/self_opacity" </string>
+ <string> "visibility/on_top" </string>
+ <string> "transform/pos" </string>
+ <string> "transform/rot" </string>
+ <string> "transform/scale" </string>
+ <string> "script/script" </string>
+ <string> "__meta__" </string>
+ <string> "motion" </string>
+ <string> "cycle" </string>
+ <string> "platform" </string>
+ <string> "StaticBody2D" </string>
+ <string> "shape_count" </string>
+ <string> "shapes/0/shape" </string>
+ <string> "shapes/0/transform" </string>
+ <string> "shapes/0/trigger" </string>
+ <string> "simulate_motion" </string>
+ <string> "constant_linear_velocity" </string>
+ <string> "constant_angular_velocity" </string>
+ <string> "friction" </string>
+ <string> "bounce" </string>
+ <string> "Sprite" </string>
+ <string> "texture" </string>
+ <string> "centered" </string>
+ <string> "offset" </string>
+ <string> "flip_h" </string>
+ <string> "flip_v" </string>
+ <string> "vframes" </string>
+ <string> "hframes" </string>
+ <string> "frame" </string>
+ <string> "modulate" </string>
+ <string> "region" </string>
+ <string> "region_rect" </string>
+ <string> "CollisionPolygon2D" </string>
+ <string> "build_mode" </string>
+ <string> "polygon" </string>
+ </string_array>
+ <string> "version" </string>
+ <int> 1 </int>
+ <string> "conn_count" </string>
+ <int> 0 </int>
+ <string> "node_count" </string>
+ <int> 4 </int>
+ <string> "variants" </string>
+ <array len="16" shared="false">
+ <bool> True </bool>
+ <real> 1 </real>
+ <vector2> 0, 0 </vector2>
+ <real> 0 </real>
+ <vector2> 1, 1 </vector2>
+ <resource resource_type="Script" path="res://moving_platform.*"> </resource>
+ <dictionary shared="false">
+ <string> "__editor_plugin_states__" </string>
+ <dictionary shared="false">
+ <string> "Script" </string>
+ <dictionary shared="false">
+ <string> "current" </string>
+ <int> 0 </int>
+ <string> "sources" </string>
+ <array len="4" shared="false">
+ <string> "res://moving_platform.gd" </string>
+ <string> "res://enemy.gd" </string>
+ <string> "res://player.gd" </string>
+ <string> "res://coin.gd" </string>
+ </array>
+ </dictionary>
+ <string> "2D" </string>
+ <dictionary shared="false">
+ <string> "pixel_snap" </string>
+ <bool> False </bool>
+ <string> "zoom" </string>
+ <real> 1.360373 </real>
+ <string> "ofs" </string>
+ <vector2> -210.652, -172.81 </vector2>
+ </dictionary>
+ <string> "3D" </string>
+ <dictionary shared="false">
+ <string> "zfar" </string>
+ <real> 500 </real>
+ <string> "fov" </string>
+ <real> 400 </real>
+ <string> "viewports" </string>
+ <array len="4" shared="false">
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ </array>
+ <string> "viewport_mode" </string>
+ <int> 1 </int>
+ <string> "default_light" </string>
+ <bool> True </bool>
+ <string> "show_grid" </string>
+ <bool> True </bool>
+ <string> "show_origin" </string>
+ <bool> True </bool>
+ <string> "znear" </string>
+ <real> 0.1 </real>
+ </dictionary>
+ </dictionary>
+ <string> "__editor_run_settings__" </string>
+ <dictionary shared="false">
+ <string> "custom_args" </string>
+ <string> "-l $scene" </string>
+ <string> "run_mode" </string>
+ <int> 0 </int>
+ </dictionary>
+ <string> "__editor_plugin_screen__" </string>
+ <string> "2D" </string>
+ </dictionary>
+ <int> 1 </int>
+ <resource resource_type="Shape2D" path="local://1"> </resource>
+ <matrix32> 1, -0, 0, 1, 0, 0 </matrix32>
+ <bool> False </bool>
+ <resource resource_type="Texture" path="res://moving_platform.*"> </resource>
+ <int> 0 </int>
+ <color> 1, 1, 1, 1 </color>
+ <rect2> 0, 0, 0, 0 </rect2>
+ <vector2_array len="4"> -88, -24, 88, -24, 88, 24, -88, 24 </vector2_array>
+ </array>
+ <string> "nodes" </string>
+ <int_array len="136"> -1, -1, 1, 0, -1, 11, 2, 0, 3, 1, 4, 1, 5, 0, 6, 2, 7, 3, 8, 4, 9, 5, 10, 6, 11, 2, 12, 1, 0, 0, 0, 14, 13, -1, 16, 2, 0, 3, 1, 4, 1, 5, 0, 6, 2, 7, 3, 8, 4, 15, 7, 16, 8, 17, 9, 18, 10, 19, 0, 20, 2, 21, 3, 22, 1, 23, 3, 0, 1, 0, 24, 24, -1, 18, 2, 0, 3, 1, 4, 1, 5, 0, 6, 2, 7, 3, 8, 4, 25, 11, 26, 0, 27, 2, 28, 10, 29, 10, 30, 7, 31, 7, 32, 12, 33, 13, 34, 10, 35, 14, 0, 1, 0, 36, 36, -1, 9, 2, 0, 3, 1, 4, 1, 5, 0, 6, 2, 7, 3, 8, 4, 37, 12, 38, 15, 0 </int_array>
+ <string> "conns" </string>
+ <int_array len="0"> </int_array>
+ </dictionary>
+
+ </main_resource>
+</resource_file> \ No newline at end of file
diff --git a/demos/2d/platformer/music.ogg b/demos/2d/platformer/music.ogg
new file mode 100644
index 0000000000..ed3e9f0a01
--- /dev/null
+++ b/demos/2d/platformer/music.ogg
Binary files differ
diff --git a/demos/2d/platformer/osb_fire.png b/demos/2d/platformer/osb_fire.png
new file mode 100644
index 0000000000..6f914cfe49
--- /dev/null
+++ b/demos/2d/platformer/osb_fire.png
Binary files differ
diff --git a/demos/2d/platformer/osb_jump.png b/demos/2d/platformer/osb_jump.png
new file mode 100644
index 0000000000..72ba032daa
--- /dev/null
+++ b/demos/2d/platformer/osb_jump.png
Binary files differ
diff --git a/demos/2d/platformer/osb_left.png b/demos/2d/platformer/osb_left.png
new file mode 100644
index 0000000000..b8e08c2ce7
--- /dev/null
+++ b/demos/2d/platformer/osb_left.png
Binary files differ
diff --git a/demos/2d/platformer/osb_right.png b/demos/2d/platformer/osb_right.png
new file mode 100644
index 0000000000..0e5cbb0d54
--- /dev/null
+++ b/demos/2d/platformer/osb_right.png
Binary files differ
diff --git a/demos/2d/platformer/parallax_bg.xml b/demos/2d/platformer/parallax_bg.xml
new file mode 100644
index 0000000000..cc8cfe5de0
--- /dev/null
+++ b/demos/2d/platformer/parallax_bg.xml
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<resource_file type="PackedScene" subresource_count="7" version="0.99" version_name="Godot Engine v0.99.3046-pre-beta">
+ <ext_resource path="res://scroll_bg_sky.png" type="Texture"></ext_resource>
+ <ext_resource path="res://scroll_bg_cloud_1.png" type="Texture"></ext_resource>
+ <ext_resource path="res://scroll_bg_cloud_3.png" type="Texture"></ext_resource>
+ <ext_resource path="res://scroll_bg_cloud_2.png" type="Texture"></ext_resource>
+ <ext_resource path="res://scroll_bg_fg_1.png" type="Texture"></ext_resource>
+ <ext_resource path="res://scroll_bg_fg_2.png" type="Texture"></ext_resource>
+ <main_resource>
+ <string name="resource/name"> "" </string>
+ <dictionary name="_bundled">
+ <string> "names" </string>
+ <string_array len="51">
+ <string> "parallax_bg" </string>
+ <string> "ParallaxBackground" </string>
+ <string> "process/process" </string>
+ <string> "process/fixed_process" </string>
+ <string> "process/input" </string>
+ <string> "process/unhandled_input" </string>
+ <string> "process/mode" </string>
+ <string> "layer" </string>
+ <string> "offset" </string>
+ <string> "rotation" </string>
+ <string> "scale" </string>
+ <string> "scroll/offset" </string>
+ <string> "scroll/base_offset" </string>
+ <string> "scroll/base_scale" </string>
+ <string> "scroll/limit_begin" </string>
+ <string> "scroll/limit_end" </string>
+ <string> "script/script" </string>
+ <string> "__meta__" </string>
+ <string> "sky" </string>
+ <string> "ParallaxLayer" </string>
+ <string> "visibility/visible" </string>
+ <string> "visibility/toplevel" </string>
+ <string> "visibility/opacity" </string>
+ <string> "visibility/self_opacity" </string>
+ <string> "visibility/on_top" </string>
+ <string> "visibility/blend_mode" </string>
+ <string> "transform/notify" </string>
+ <string> "transform/pos" </string>
+ <string> "transform/rot" </string>
+ <string> "transform/scale" </string>
+ <string> "motion/scale" </string>
+ <string> "motion/mirroring" </string>
+ <string> "Sprite" </string>
+ <string> "texture" </string>
+ <string> "centered" </string>
+ <string> "flip_h" </string>
+ <string> "flip_v" </string>
+ <string> "vframes" </string>
+ <string> "hframes" </string>
+ <string> "frame" </string>
+ <string> "modulate" </string>
+ <string> "region" </string>
+ <string> "region_rect" </string>
+ <string> "clouds" </string>
+ <string> "Sprite 2" </string>
+ <string> "Sprite 3" </string>
+ <string> "Sprite 4" </string>
+ <string> "Sprite 5" </string>
+ <string> "Sprite 6" </string>
+ <string> "mount_ 2" </string>
+ <string> "mount_1" </string>
+ </string_array>
+ <string> "version" </string>
+ <int> 1 </int>
+ <string> "conn_count" </string>
+ <int> 0 </int>
+ <string> "node_count" </string>
+ <int> 14 </int>
+ <string> "variants" </string>
+ <array len="33">
+ <bool> False </bool>
+ <int> 0 </int>
+ <int> -1 </int>
+ <vector2> 0, 0 </vector2>
+ <real> 0 </real>
+ <vector2> 1, 1 </vector2>
+ <vector2> 0.7, 0 </vector2>
+ <resource name=""></resource> <dictionary>
+ <string> "__editor_plugin_states__" </string>
+ <dictionary>
+ <string> "Script" </string>
+ <dictionary>
+ <string> "current" </string>
+ <int> 0 </int>
+ <string> "sources" </string>
+ <array len="4">
+ <string> "res://moving_platform.gd" </string>
+ <string> "res://enemy.gd" </string>
+ <string> "res://player.gd" </string>
+ <string> "res://coin.gd" </string>
+ </array>
+ </dictionary>
+ <string> "2D" </string>
+ <dictionary>
+ <string> "zoom" </string>
+ <real> 1 </real>
+ <string> "ofs" </string>
+ <vector2> -5, -25 </vector2>
+ </dictionary>
+ <string> "3D" </string>
+ <dictionary>
+ <string> "zfar" </string>
+ <real> 500 </real>
+ <string> "fov" </string>
+ <real> 45 </real>
+ <string> "window_mode" </string>
+ <int> 0 </int>
+ <string> "window_0" </string>
+ <dictionary>
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "default_light" </string>
+ <bool> True </bool>
+ <string> "x_rot" </string>
+ <real> 0.337 </real>
+ <string> "y_rot" </string>
+ <real> -0.575 </real>
+ <string> "show_grid" </string>
+ <bool> True </bool>
+ <string> "show_origin" </string>
+ <bool> True </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ <string> "znear" </string>
+ <real> 0.1 </real>
+ </dictionary>
+ </dictionary>
+ <string> "__editor_run_settings__" </string>
+ <dictionary>
+ <string> "custom_args" </string>
+ <string> "-l $scene" </string>
+ <string> "run_mode" </string>
+ <int> 0 </int>
+ </dictionary>
+ <string> "__editor_plugin_screen__" </string>
+ <string> "2D" </string>
+ </dictionary>
+ <bool> True </bool>
+ <real> 1 </real>
+ <vector2> 800, 0 </vector2>
+ <vector2> 32, 0.94 </vector2>
+ <resource resource_type="Texture" path="res://scroll_bg_sky.png"> </resource>
+ <int> 1 </int>
+ <color> 1, 1, 1, 1 </color>
+ <rect2> 0, 0, 0, 0 </rect2>
+ <vector2> 0.1, 1 </vector2>
+ <vector2> 28, 127 </vector2>
+ <resource resource_type="Texture" path="res://scroll_bg_cloud_1.png"> </resource>
+ <vector2> 404, 24 </vector2>
+ <vector2> 154, 46 </vector2>
+ <resource resource_type="Texture" path="res://scroll_bg_cloud_2.png"> </resource>
+ <vector2> 525, 130 </vector2>
+ <vector2> 255, 158 </vector2>
+ <resource resource_type="Texture" path="res://scroll_bg_cloud_3.png"> </resource>
+ <vector2> 674, 70 </vector2>
+ <vector2> 0.2, 1 </vector2>
+ <vector2> 0, 225 </vector2>
+ <resource resource_type="Texture" path="res://scroll_bg_fg_2.png"> </resource>
+ <rect2> 0, 0, 800, 256 </rect2>
+ <vector2> 0.4, 1 </vector2>
+ <resource resource_type="Texture" path="res://scroll_bg_fg_1.png"> </resource>
+ </array>
+ <string> "nodes" </string>
+ <int_array len="760"> -1, -1, 1, 0, -1, 16, 2, 0, 3, 0, 4, 0, 5, 0, 6, 1, 7, 2, 8, 3, 9, 4, 10, 5, 11, 3, 12, 3, 13, 6, 14, 3, 15, 3, 16, 7, 17, 8, 0, 0, 0, 19, 18, -1, 18, 2, 0, 3, 0, 4, 0, 5, 0, 6, 1, 20, 9, 21, 0, 22, 10, 23, 10, 24, 9, 25, 1, 26, 0, 27, 3, 28, 4, 29, 5, 30, 5, 31, 11, 16, 7, 0, 1, 0, 32, 32, -1, 27, 2, 0, 3, 0, 4, 0, 5, 0, 6, 1, 20, 9, 21, 0, 22, 10, 23, 10, 24, 9, 25, 1, 26, 0, 27, 3, 28, 4, 29, 12, 33, 13, 34, 0, 8, 3, 35, 0, 36, 0, 37, 14, 38, 14, 39, 1, 40, 15, 41, 0, 42, 16, 16, 7, 0, 0, 0, 19, 43, -1, 18, 2, 0, 3, 0, 4, 0, 5, 0, 6, 1, 20, 9, 21, 0, 22, 10, 23, 10, 24, 9, 25, 1, 26, 0, 27, 3, 28, 4, 29, 5, 30, 17, 31, 11, 16, 7, 0, 3, 0, 32, 32, -1, 27, 2, 0, 3, 0, 4, 0, 5, 0, 6, 1, 20, 9, 21, 0, 22, 10, 23, 10, 24, 9, 25, 1, 26, 0, 27, 18, 28, 4, 29, 5, 33, 19, 34, 0, 8, 3, 35, 0, 36, 0, 37, 14, 38, 14, 39, 1, 40, 15, 41, 0, 42, 16, 16, 7, 0, 3, 0, 32, 44, -1, 27, 2, 0, 3, 0, 4, 0, 5, 0, 6, 1, 20, 9, 21, 0, 22, 10, 23, 10, 24, 9, 25, 1, 26, 0, 27, 20, 28, 4, 29, 5, 33, 19, 34, 0, 8, 3, 35, 0, 36, 0, 37, 14, 38, 14, 39, 1, 40, 15, 41, 0, 42, 16, 16, 7, 0, 3, 0, 32, 45, -1, 27, 2, 0, 3, 0, 4, 0, 5, 0, 6, 1, 20, 9, 21, 0, 22, 10, 23, 10, 24, 9, 25, 1, 26, 0, 27, 21, 28, 4, 29, 5, 33, 22, 34, 0, 8, 3, 35, 0, 36, 0, 37, 14, 38, 14, 39, 1, 40, 15, 41, 0, 42, 16, 16, 7, 0, 3, 0, 32, 46, -1, 27, 2, 0, 3, 0, 4, 0, 5, 0, 6, 1, 20, 9, 21, 0, 22, 10, 23, 10, 24, 9, 25, 1, 26, 0, 27, 23, 28, 4, 29, 5, 33, 22, 34, 0, 8, 3, 35, 0, 36, 0, 37, 14, 38, 14, 39, 1, 40, 15, 41, 0, 42, 16, 16, 7, 0, 3, 0, 32, 47, -1, 27, 2, 0, 3, 0, 4, 0, 5, 0, 6, 1, 20, 9, 21, 0, 22, 10, 23, 10, 24, 9, 25, 1, 26, 0, 27, 24, 28, 4, 29, 5, 33, 25, 34, 0, 8, 3, 35, 0, 36, 0, 37, 14, 38, 14, 39, 1, 40, 15, 41, 0, 42, 16, 16, 7, 0, 3, 0, 32, 48, -1, 27, 2, 0, 3, 0, 4, 0, 5, 0, 6, 1, 20, 9, 21, 0, 22, 10, 23, 10, 24, 9, 25, 1, 26, 0, 27, 26, 28, 4, 29, 5, 33, 25, 34, 0, 8, 3, 35, 0, 36, 0, 37, 14, 38, 14, 39, 1, 40, 15, 41, 0, 42, 16, 16, 7, 0, 0, 0, 19, 49, -1, 18, 2, 0, 3, 0, 4, 0, 5, 0, 6, 1, 20, 9, 21, 0, 22, 10, 23, 10, 24, 9, 25, 1, 26, 0, 27, 3, 28, 4, 29, 5, 30, 27, 31, 11, 16, 7, 0, 10, 0, 32, 32, -1, 27, 2, 0, 3, 0, 4, 0, 5, 0, 6, 1, 20, 9, 21, 0, 22, 10, 23, 10, 24, 9, 25, 1, 26, 0, 27, 28, 28, 4, 29, 5, 33, 29, 34, 0, 8, 3, 35, 0, 36, 0, 37, 14, 38, 14, 39, 1, 40, 15, 41, 9, 42, 30, 16, 7, 0, 0, 0, 19, 50, -1, 18, 2, 0, 3, 0, 4, 0, 5, 0, 6, 1, 20, 9, 21, 0, 22, 10, 23, 10, 24, 9, 25, 1, 26, 0, 27, 3, 28, 4, 29, 5, 30, 31, 31, 11, 16, 7, 0, 12, 0, 32, 32, -1, 27, 2, 0, 3, 0, 4, 0, 5, 0, 6, 1, 20, 9, 21, 0, 22, 10, 23, 10, 24, 9, 25, 1, 26, 0, 27, 28, 28, 4, 29, 5, 33, 32, 34, 0, 8, 3, 35, 0, 36, 0, 37, 14, 38, 14, 39, 1, 40, 15, 41, 9, 42, 30, 16, 7, 0 </int_array>
+ <string> "conns" </string>
+ <int_array len="0"> </int_array>
+ </dictionary>
+ <resource name="script/script"></resource>
+ </main_resource>
+</resource_file> \ No newline at end of file
diff --git a/demos/2d/platformer/plank.png b/demos/2d/platformer/plank.png
new file mode 100644
index 0000000000..b4f6addee5
--- /dev/null
+++ b/demos/2d/platformer/plank.png
Binary files differ
diff --git a/demos/2d/platformer/plankpin.png b/demos/2d/platformer/plankpin.png
new file mode 100644
index 0000000000..46e104a3fe
--- /dev/null
+++ b/demos/2d/platformer/plankpin.png
Binary files differ
diff --git a/demos/2d/platformer/player.gd b/demos/2d/platformer/player.gd
new file mode 100644
index 0000000000..481f340ab8
--- /dev/null
+++ b/demos/2d/platformer/player.gd
@@ -0,0 +1,259 @@
+extends RigidBody2D
+
+# Character Demo, written by Juan Linietsky.
+#
+# Implementation of a 2D Character controller.
+# This implementation uses the physics engine for
+# controlling a character, in a very similar way
+# than a 3D character controller would be implemented.
+#
+# Using the physics engine for this has the main
+# advantages:
+# -Easy to write.
+# -Interaction with other physics-based objects is free
+# -Only have to deal with the object linear velocity, not position
+# -All collision/area framework available
+#
+# But also has the following disadvantages:
+#
+# -Objects may bounce a little bit sometimes
+# -Going up ramps sends the chracter flying up, small hack is needed.
+# -A ray collider is needed to avoid sliding down on ramps and
+# undesiderd bumps, small steps and rare numerical precision errors.
+# (another alternative may be to turn on friction when the character is not moving).
+# -Friction cant be used, so floor velocity must be considered
+# for moving platforms.
+
+var anim=""
+var siding_left=false
+var jumping=false
+var stopping_jump=false
+var shooting=false
+
+var WALK_ACCEL = 800.0
+var WALK_DEACCEL= 800.0
+var WALK_MAX_VELOCITY= 200.0
+var GRAVITY = 700.0
+var AIR_ACCEL = 200.0
+var AIR_DEACCEL= 200.0
+var JUMP_VELOCITY=460
+var STOP_JUMP_FORCE=900.0
+
+var MAX_FLOOR_AIRBORNE_TIME = 0.15
+
+var airborne_time=1e20
+var shoot_time=1e20
+
+var MAX_SHOOT_POSE_TIME = 0.3
+
+var bullet = preload("res://bullet.xml")
+
+var floor_h_velocity=0.0
+var enemy
+
+func _integrate_forces(s):
+
+ var lv = s.get_linear_velocity()
+ var step = s.get_step()
+
+ var new_anim=anim
+ var new_siding_left=siding_left
+
+ # Get the controls
+ var move_left = Input.is_action_pressed("move_left")
+ var move_right = Input.is_action_pressed("move_right")
+ var jump = Input.is_action_pressed("jump")
+ var shoot = Input.is_action_pressed("shoot")
+ var spawn = Input.is_action_pressed("spawn")
+
+ if spawn:
+ var e = enemy.instance()
+ var p = get_pos()
+ p.y = p.y - 100
+ e.set_pos(p)
+ get_parent().add_child(e)
+
+
+ #deapply prev floor velocity
+ lv.x-=floor_h_velocity
+ floor_h_velocity=0.0
+
+
+ # Find the floor (a contact with upwards facing collision normal)
+ var found_floor=false
+ var floor_index=-1
+
+ for x in range(s.get_contact_count()):
+
+ var ci = s.get_contact_local_normal(x)
+ if (ci.dot(Vector2(0,-1))>0.6):
+ found_floor=true
+ floor_index=x
+
+ # A good idea when impementing characters of all kinds,
+ # Compensates for physics imprecission, as well as human
+ # reaction delay.
+
+ if (shoot and not shooting):
+ shoot_time=0
+ var bi = bullet.instance()
+ var ss
+ if (siding_left):
+ ss=-1.0
+ else:
+ ss=1.0
+ var pos = get_pos() + get_node("bullet_shoot").get_pos()*Vector2(ss,1.0)
+
+ bi.set_pos(pos)
+ get_parent().add_child(bi)
+
+ bi.set_linear_velocity( Vector2(800.0*ss,-80) )
+ get_node("sprite/smoke").set_emitting(true)
+ get_node("sound").play("shoot")
+ PS2D.body_add_collision_exception(bi.get_rid(),get_rid()) # make bullet and this not collide
+
+
+ else:
+ shoot_time+=step
+
+
+ if (found_floor):
+ airborne_time=0.0
+ else:
+ airborne_time+=step #time it spent in the air
+
+ var on_floor = airborne_time < MAX_FLOOR_AIRBORNE_TIME
+
+ # Process jump
+ if (jumping):
+ if (lv.y>0):
+ #set off the jumping flag if going down
+ jumping=false
+ elif (not jump):
+ stopping_jump=true
+
+ if (stopping_jump):
+ lv.y+=STOP_JUMP_FORCE*step
+
+ if (on_floor):
+
+ # Process logic when character is on floor
+
+ if (move_left and not move_right):
+ if (lv.x > -WALK_MAX_VELOCITY):
+ lv.x-=WALK_ACCEL*step
+ elif (move_right and not move_left):
+ if (lv.x < WALK_MAX_VELOCITY):
+ lv.x+=WALK_ACCEL*step
+ else:
+ var xv = abs(lv.x)
+ xv-=WALK_DEACCEL*step
+ if (xv<0):
+ xv=0
+ lv.x=sign(lv.x)*xv
+
+ #Check jump
+ if (not jumping and jump):
+ lv.y=-JUMP_VELOCITY
+ jumping=true
+ stopping_jump=false
+ get_node("sound").play("jump")
+
+ #check siding
+
+ if (lv.x < 0 and move_left):
+ new_siding_left=true
+ elif (lv.x > 0 and move_right):
+ new_siding_left=false
+ if (jumping):
+ new_anim="jumping"
+ elif (abs(lv.x)<0.1):
+ if (shoot_time<MAX_SHOOT_POSE_TIME):
+ new_anim="idle_weapon"
+ else:
+ new_anim="idle"
+ else:
+ if (shoot_time<MAX_SHOOT_POSE_TIME):
+ new_anim="run_weapon"
+ else:
+ new_anim="run"
+ else:
+
+ # Process logic when the character is in the air
+
+ if (move_left and not move_right):
+ if (lv.x > -WALK_MAX_VELOCITY):
+ lv.x-=AIR_ACCEL*step
+ elif (move_right and not move_left):
+ if (lv.x < WALK_MAX_VELOCITY):
+ lv.x+=AIR_ACCEL*step
+ else:
+ var xv = abs(lv.x)
+ xv-=AIR_DEACCEL*step
+ if (xv<0):
+ xv=0
+ lv.x=sign(lv.x)*xv
+
+ if (lv.y<0):
+ if (shoot_time<MAX_SHOOT_POSE_TIME):
+ new_anim="jumping_weapon"
+ else:
+ new_anim="jumping"
+ else:
+ if (shoot_time<MAX_SHOOT_POSE_TIME):
+ new_anim="falling_weapon"
+ else:
+ new_anim="falling"
+
+
+ #Update siding
+
+ if (new_siding_left!=siding_left):
+ if (new_siding_left):
+ get_node("sprite").set_scale( Vector2(-1,1) )
+ else:
+ get_node("sprite").set_scale( Vector2(1,1) )
+
+ siding_left=new_siding_left
+
+ #Change animation
+ if (new_anim!=anim):
+ anim=new_anim
+ get_node("anim").play(anim)
+
+ shooting=shoot
+
+ # Apply floor velocity
+ if (found_floor):
+ floor_h_velocity=s.get_contact_collider_velocity_at_pos(floor_index).x
+ lv.x+=floor_h_velocity
+
+
+
+
+ #Finally, apply gravity and set back the linear velocity
+ lv+=s.get_total_gravity()*step
+ s.set_linear_velocity(lv)
+
+
+
+
+
+
+
+func _ready():
+ # Initalization here
+
+# if !Globals.has_singleton("Facebook"):
+# return
+# var Facebook = Globals.get_singleton("Facebook")
+# var link = Globals.get("facebook/link")
+# var icon = Globals.get("facebook/icon")
+# var msg = "I just sneezed on your wall! Beat my score and Stop the Running nose!"
+# var title = "I just sneezed on your wall!"
+# Facebook.post("feed", msg, title, link, icon)
+ enemy = ResourceLoader.load("res://enemy.xml")
+ pass
+
+
+
diff --git a/demos/2d/platformer/player.xml b/demos/2d/platformer/player.xml
new file mode 100644
index 0000000000..94086a8b19
--- /dev/null
+++ b/demos/2d/platformer/player.xml
@@ -0,0 +1,660 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<resource_file type="PackedScene" subresource_count="24" version="1.0" version_name="Godot Engine v1.0.3917-beta1">
+ <ext_resource path="res://robot_demo.*" type="Texture"></ext_resource>
+ <ext_resource path="res://player.*" type="Script"></ext_resource>
+ <ext_resource path="res://sound_shoot.*" type="Sample"></ext_resource>
+ <ext_resource path="res://sound_coin.*" type="Sample"></ext_resource>
+ <ext_resource path="res://osb_right.*" type="Texture"></ext_resource>
+ <ext_resource path="res://sound_jump.*" type="Sample"></ext_resource>
+ <ext_resource path="res://osb_left.*" type="Texture"></ext_resource>
+ <ext_resource path="res://bullet.*" type="Texture"></ext_resource>
+ <ext_resource path="res://osb_jump.*" type="Texture"></ext_resource>
+ <ext_resource path="res://osb_fire.*" type="Texture"></ext_resource>
+ <resource type="RayShape2D" path="local://1">
+ <real name="custom_solver_bias"> 0.5 </real>
+ <real name="length"> 20 </real>
+
+ </resource>
+ <resource type="ConvexPolygonShape2D" path="local://2">
+ <real name="custom_solver_bias"> 0 </real>
+ <vector2_array name="points" len="3"> -19.902, -24.8691, 19.3625, -24.6056, -0.138023, 16.5036 </vector2_array>
+
+ </resource>
+ <resource type="Animation" path="local://3">
+ <string name="resource/name"> "idle" </string>
+ <real name="length"> 7 </real>
+ <bool name="loop"> True </bool>
+ <real name="step"> 0.25 </real>
+ <string name="tracks/0/type"> "value" </string>
+ <node_path name="tracks/0/path"> "sprite:frame" </node_path>
+ <int name="tracks/0/interp"> 1 </int>
+ <dictionary name="tracks/0/keys" shared="false">
+ <string> "cont" </string>
+ <bool> False </bool>
+ <string> "transitions" </string>
+ <real_array len="8"> 1, 1, 1, 1, 1, 1, 1, 1 </real_array>
+ <string> "values" </string>
+ <array len="8" shared="false">
+ <int> 16 </int>
+ <int> 17 </int>
+ <int> 18 </int>
+ <int> 16 </int>
+ <int> 19 </int>
+ <int> 20 </int>
+ <int> 19 </int>
+ <int> 16 </int>
+ </array>
+ <string> "times" </string>
+ <real_array len="8"> 0, 1.25, 1.5, 2, 4.5, 4.75, 5, 5.25 </real_array>
+ </dictionary>
+
+ </resource>
+ <resource type="Animation" path="local://4">
+ <string name="resource/name"> "jumping" </string>
+ <real name="length"> 0.5 </real>
+ <bool name="loop"> True </bool>
+ <real name="step"> 0.25 </real>
+ <string name="tracks/0/type"> "value" </string>
+ <node_path name="tracks/0/path"> "sprite:frame" </node_path>
+ <int name="tracks/0/interp"> 1 </int>
+ <dictionary name="tracks/0/keys" shared="false">
+ <string> "cont" </string>
+ <bool> False </bool>
+ <string> "transitions" </string>
+ <real_array len="3"> 1, 1, 1 </real_array>
+ <string> "values" </string>
+ <array len="3" shared="false">
+ <int> 23 </int>
+ <int> 24 </int>
+ <int> 23 </int>
+ </array>
+ <string> "times" </string>
+ <real_array len="3"> 0, 0.25, 0.5 </real_array>
+ </dictionary>
+
+ </resource>
+ <resource type="Animation" path="local://5">
+ <string name="resource/name"> "run" </string>
+ <real name="length"> 1.25 </real>
+ <bool name="loop"> True </bool>
+ <real name="step"> 0.25 </real>
+ <string name="tracks/0/type"> "value" </string>
+ <node_path name="tracks/0/path"> "sprite:frame" </node_path>
+ <int name="tracks/0/interp"> 1 </int>
+ <dictionary name="tracks/0/keys" shared="false">
+ <string> "cont" </string>
+ <bool> False </bool>
+ <string> "transitions" </string>
+ <real_array len="6"> 1, 1, 1, 1, 1, 1 </real_array>
+ <string> "values" </string>
+ <array len="6" shared="false">
+ <int> 0 </int>
+ <int> 1 </int>
+ <int> 2 </int>
+ <int> 3 </int>
+ <int> 4 </int>
+ <int> 0 </int>
+ </array>
+ <string> "times" </string>
+ <real_array len="6"> 0, 0.25, 0.5, 0.75, 1, 1.25 </real_array>
+ </dictionary>
+
+ </resource>
+ <resource type="Animation" path="local://6">
+ <string name="resource/name"> "falling_weapon" </string>
+ <real name="length"> 0.5 </real>
+ <bool name="loop"> True </bool>
+ <real name="step"> 0.25 </real>
+ <string name="tracks/0/type"> "value" </string>
+ <node_path name="tracks/0/path"> "sprite:frame" </node_path>
+ <int name="tracks/0/interp"> 1 </int>
+ <dictionary name="tracks/0/keys" shared="false">
+ <string> "cont" </string>
+ <bool> False </bool>
+ <string> "transitions" </string>
+ <real_array len="1"> 1 </real_array>
+ <string> "values" </string>
+ <array len="1" shared="false">
+ <int> 26 </int>
+ </array>
+ <string> "times" </string>
+ <real_array len="1"> 0 </real_array>
+ </dictionary>
+
+ </resource>
+ <resource type="Animation" path="local://7">
+ <string name="resource/name"> "falling" </string>
+ <real name="length"> 0.01 </real>
+ <bool name="loop"> True </bool>
+ <real name="step"> 0.25 </real>
+ <string name="tracks/0/type"> "value" </string>
+ <node_path name="tracks/0/path"> "sprite:frame" </node_path>
+ <int name="tracks/0/interp"> 1 </int>
+ <dictionary name="tracks/0/keys" shared="false">
+ <string> "cont" </string>
+ <bool> False </bool>
+ <string> "transitions" </string>
+ <real_array len="1"> 1 </real_array>
+ <string> "values" </string>
+ <array len="1" shared="false">
+ <int> 21 </int>
+ </array>
+ <string> "times" </string>
+ <real_array len="1"> 0 </real_array>
+ </dictionary>
+
+ </resource>
+ <resource type="Animation" path="local://8">
+ <string name="resource/name"> "run_weapon" </string>
+ <real name="length"> 1.25 </real>
+ <bool name="loop"> True </bool>
+ <real name="step"> 0.25 </real>
+ <string name="tracks/0/type"> "value" </string>
+ <node_path name="tracks/0/path"> "sprite:frame" </node_path>
+ <int name="tracks/0/interp"> 1 </int>
+ <dictionary name="tracks/0/keys" shared="false">
+ <string> "cont" </string>
+ <bool> False </bool>
+ <string> "transitions" </string>
+ <real_array len="6"> 1, 1, 1, 1, 1, 1 </real_array>
+ <string> "values" </string>
+ <array len="6" shared="false">
+ <int> 5 </int>
+ <int> 6 </int>
+ <int> 7 </int>
+ <int> 8 </int>
+ <int> 9 </int>
+ <int> 5 </int>
+ </array>
+ <string> "times" </string>
+ <real_array len="6"> 0, 0.25, 0.5, 0.75, 1, 1.25 </real_array>
+ </dictionary>
+
+ </resource>
+ <resource type="Animation" path="local://9">
+ <string name="resource/name"> "run_gun_fire" </string>
+ <real name="length"> 1.25 </real>
+ <bool name="loop"> True </bool>
+ <real name="step"> 0.25 </real>
+ <string name="tracks/0/type"> "value" </string>
+ <node_path name="tracks/0/path"> "sprite:frame" </node_path>
+ <int name="tracks/0/interp"> 1 </int>
+ <dictionary name="tracks/0/keys" shared="false">
+ <string> "cont" </string>
+ <bool> False </bool>
+ <string> "transitions" </string>
+ <real_array len="6"> 1, 1, 1, 1, 1, 1 </real_array>
+ <string> "values" </string>
+ <array len="6" shared="false">
+ <int> 10 </int>
+ <int> 11 </int>
+ <int> 12 </int>
+ <int> 13 </int>
+ <int> 14 </int>
+ <int> 5 </int>
+ </array>
+ <string> "times" </string>
+ <real_array len="6"> 0, 0.25, 0.5, 0.75, 1, 1.25 </real_array>
+ </dictionary>
+
+ </resource>
+ <resource type="Animation" path="local://10">
+ <string name="resource/name"> "jumping_weapon" </string>
+ <real name="length"> 0.5 </real>
+ <bool name="loop"> True </bool>
+ <real name="step"> 0.25 </real>
+ <string name="tracks/0/type"> "value" </string>
+ <node_path name="tracks/0/path"> "sprite:frame" </node_path>
+ <int name="tracks/0/interp"> 1 </int>
+ <dictionary name="tracks/0/keys" shared="false">
+ <string> "cont" </string>
+ <bool> False </bool>
+ <string> "transitions" </string>
+ <real_array len="1"> 1 </real_array>
+ <string> "values" </string>
+ <array len="1" shared="false">
+ <int> 26 </int>
+ </array>
+ <string> "times" </string>
+ <real_array len="1"> 0 </real_array>
+ </dictionary>
+
+ </resource>
+ <resource type="Animation" path="local://11">
+ <string name="resource/name"> "crouch" </string>
+ <real name="length"> 0.01 </real>
+ <bool name="loop"> True </bool>
+ <real name="step"> 0.25 </real>
+ <string name="tracks/0/type"> "value" </string>
+ <node_path name="tracks/0/path"> "sprite:frame" </node_path>
+ <int name="tracks/0/interp"> 1 </int>
+ <dictionary name="tracks/0/keys" shared="false">
+ <string> "cont" </string>
+ <bool> False </bool>
+ <string> "transitions" </string>
+ <real_array len="1"> 1 </real_array>
+ <string> "values" </string>
+ <array len="1" shared="false">
+ <int> 22 </int>
+ </array>
+ <string> "times" </string>
+ <real_array len="1"> 0 </real_array>
+ </dictionary>
+
+ </resource>
+ <resource type="Animation" path="local://12">
+ <string name="resource/name"> "idle_weapon" </string>
+ <real name="length"> 0.5 </real>
+ <bool name="loop"> True </bool>
+ <real name="step"> 0.25 </real>
+ <string name="tracks/0/type"> "value" </string>
+ <node_path name="tracks/0/path"> "sprite:frame" </node_path>
+ <int name="tracks/0/interp"> 1 </int>
+ <dictionary name="tracks/0/keys" shared="false">
+ <string> "cont" </string>
+ <bool> False </bool>
+ <string> "transitions" </string>
+ <real_array len="1"> 1 </real_array>
+ <string> "values" </string>
+ <array len="1" shared="false">
+ <int> 25 </int>
+ </array>
+ <string> "times" </string>
+ <real_array len="1"> 0 </real_array>
+ </dictionary>
+
+ </resource>
+ <resource type="SampleLibrary" path="local://13">
+ <dictionary name="samples/jump" shared="false">
+ <string> "db" </string>
+ <real> 0 </real>
+ <string> "pitch" </string>
+ <real> 1 </real>
+ <string> "sample" </string>
+ <resource resource_type="Sample" path="res://sound_jump.*"> </resource>
+ </dictionary>
+ <dictionary name="samples/shoot" shared="false">
+ <string> "db" </string>
+ <real> 0 </real>
+ <string> "pitch" </string>
+ <real> 1 </real>
+ <string> "sample" </string>
+ <resource resource_type="Sample" path="res://sound_shoot.*"> </resource>
+ </dictionary>
+ <dictionary name="samples/coin" shared="false">
+ <string> "db" </string>
+ <real> 0 </real>
+ <string> "pitch" </string>
+ <real> 1 </real>
+ <string> "sample" </string>
+ <resource resource_type="Sample" path="res://sound_coin.*"> </resource>
+ </dictionary>
+
+ </resource>
+ <main_resource>
+ <dictionary name="_bundled" shared="false">
+ <string> "names" </string>
+ <string_array len="167">
+ <string> "player" </string>
+ <string> "RigidBody2D" </string>
+ <string> "visibility/visible" </string>
+ <string> "visibility/opacity" </string>
+ <string> "visibility/self_opacity" </string>
+ <string> "visibility/on_top" </string>
+ <string> "transform/pos" </string>
+ <string> "transform/rot" </string>
+ <string> "transform/scale" </string>
+ <string> "shape_count" </string>
+ <string> "shapes/0/shape" </string>
+ <string> "shapes/0/transform" </string>
+ <string> "shapes/0/trigger" </string>
+ <string> "shapes/1/shape" </string>
+ <string> "shapes/1/transform" </string>
+ <string> "shapes/1/trigger" </string>
+ <string> "mode" </string>
+ <string> "mass" </string>
+ <string> "friction" </string>
+ <string> "bounce" </string>
+ <string> "custom_integrator" </string>
+ <string> "continuous_cd" </string>
+ <string> "contacts_reported" </string>
+ <string> "contact_monitor" </string>
+ <string> "active" </string>
+ <string> "can_sleep" </string>
+ <string> "velocity/linear" </string>
+ <string> "velocity/angular" </string>
+ <string> "script/script" </string>
+ <string> "__meta__" </string>
+ <string> "sprite" </string>
+ <string> "Sprite" </string>
+ <string> "texture" </string>
+ <string> "centered" </string>
+ <string> "offset" </string>
+ <string> "flip_h" </string>
+ <string> "flip_v" </string>
+ <string> "vframes" </string>
+ <string> "hframes" </string>
+ <string> "frame" </string>
+ <string> "modulate" </string>
+ <string> "region" </string>
+ <string> "region_rect" </string>
+ <string> "smoke" </string>
+ <string> "Particles2D" </string>
+ <string> "visibility/blend_mode" </string>
+ <string> "config/amount" </string>
+ <string> "config/lifetime" </string>
+ <string> "config/time_scale" </string>
+ <string> "config/preprocess" </string>
+ <string> "config/emit_timeout" </string>
+ <string> "config/emitting" </string>
+ <string> "config/offset" </string>
+ <string> "config/half_extents" </string>
+ <string> "config/local_space" </string>
+ <string> "config/explosiveness" </string>
+ <string> "config/texture" </string>
+ <string> "params/direction" </string>
+ <string> "params/spread" </string>
+ <string> "params/linear_velocity" </string>
+ <string> "params/spin_velocity" </string>
+ <string> "params/orbit_velocity" </string>
+ <string> "params/gravity_direction" </string>
+ <string> "params/gravity_strength" </string>
+ <string> "params/radial_accel" </string>
+ <string> "params/tangential_accel" </string>
+ <string> "params/damping" </string>
+ <string> "params/initial_size" </string>
+ <string> "params/final_size" </string>
+ <string> "params/hue_variation" </string>
+ <string> "randomness/direction" </string>
+ <string> "randomness/spread" </string>
+ <string> "randomness/linear_velocity" </string>
+ <string> "randomness/spin_velocity" </string>
+ <string> "randomness/orbit_velocity" </string>
+ <string> "randomness/gravity_direction" </string>
+ <string> "randomness/gravity_strength" </string>
+ <string> "randomness/radial_accel" </string>
+ <string> "randomness/tangential_accel" </string>
+ <string> "randomness/damping" </string>
+ <string> "randomness/initial_size" </string>
+ <string> "randomness/final_size" </string>
+ <string> "randomness/hue_variation" </string>
+ <string> "color_phases/count" </string>
+ <string> "phase_0/pos" </string>
+ <string> "phase_0/color" </string>
+ <string> "phase_1/pos" </string>
+ <string> "phase_1/color" </string>
+ <string> "phase_2/pos" </string>
+ <string> "phase_2/color" </string>
+ <string> "phase_3/pos" </string>
+ <string> "phase_3/color" </string>
+ <string> "emission_points" </string>
+ <string> "anim" </string>
+ <string> "AnimationPlayer" </string>
+ <string> "playback/process_mode" </string>
+ <string> "playback/default_blend_time" </string>
+ <string> "root/root" </string>
+ <string> "anims/idle" </string>
+ <string> "anims/jumping" </string>
+ <string> "anims/run" </string>
+ <string> "anims/falling_weapon" </string>
+ <string> "anims/falling" </string>
+ <string> "anims/run_weapon" </string>
+ <string> "anims/standing_weapon_ready" </string>
+ <string> "anims/jumping_weapon" </string>
+ <string> "anims/crouch" </string>
+ <string> "anims/idle_weapon" </string>
+ <string> "playback/active" </string>
+ <string> "playback/speed" </string>
+ <string> "blend_times" </string>
+ <string> "autoplay" </string>
+ <string> "camera" </string>
+ <string> "Camera2D" </string>
+ <string> "current" </string>
+ <string> "smoothing" </string>
+ <string> "zoom" </string>
+ <string> "limit/left" </string>
+ <string> "limit/top" </string>
+ <string> "limit/right" </string>
+ <string> "limit/bottom" </string>
+ <string> "drag_margin/h_enabled" </string>
+ <string> "drag_margin/v_enabled" </string>
+ <string> "drag_margin/left" </string>
+ <string> "drag_margin/top" </string>
+ <string> "drag_margin/right" </string>
+ <string> "drag_margin/bottom" </string>
+ <string> "bullet_shoot" </string>
+ <string> "Position2D" </string>
+ <string> "CollisionShape2D" </string>
+ <string> "shape" </string>
+ <string> "trigger" </string>
+ <string> "sound" </string>
+ <string> "SamplePlayer" </string>
+ <string> "config/voices" </string>
+ <string> "config/samples" </string>
+ <string> "default/volume_db" </string>
+ <string> "default/pitch_scale" </string>
+ <string> "default/pan" </string>
+ <string> "default/depth" </string>
+ <string> "default/height" </string>
+ <string> "default/filter/type" </string>
+ <string> "default/filter/cutoff" </string>
+ <string> "default/filter/resonance" </string>
+ <string> "default/filter/gain" </string>
+ <string> "default/reverb_room" </string>
+ <string> "default/reverb_send" </string>
+ <string> "default/chorus_send" </string>
+ <string> "CollisionPolygon2D" </string>
+ <string> "build_mode" </string>
+ <string> "polygon" </string>
+ <string> "ui" </string>
+ <string> "CanvasLayer" </string>
+ <string> "layer" </string>
+ <string> "rotation" </string>
+ <string> "scale" </string>
+ <string> "left" </string>
+ <string> "TouchScreenButton" </string>
+ <string> "normal" </string>
+ <string> "pressed" </string>
+ <string> "bitmask" </string>
+ <string> "passby_press" </string>
+ <string> "action" </string>
+ <string> "visibility_mode" </string>
+ <string> "right" </string>
+ <string> "jump" </string>
+ <string> "fire" </string>
+ </string_array>
+ <string> "version" </string>
+ <int> 1 </int>
+ <string> "conn_count" </string>
+ <int> 0 </int>
+ <string> "node_count" </string>
+ <int> 14 </int>
+ <string> "variants" </string>
+ <array len="71" shared="false">
+ <bool> True </bool>
+ <real> 1 </real>
+ <vector2> 0, 0 </vector2>
+ <real> 0 </real>
+ <vector2> 1, 1 </vector2>
+ <int> 2 </int>
+ <resource resource_type="Shape2D" path="local://1"> </resource>
+ <matrix32> 1, -0, 0, 1.76469, 0.291992, -12.1587 </matrix32>
+ <bool> False </bool>
+ <resource resource_type="Shape2D" path="local://2"> </resource>
+ <matrix32> 1, -0, 0, 1, 0, 0 </matrix32>
+ <real> 3 </real>
+ <int> 3 </int>
+ <resource resource_type="Script" path="res://player.*"> </resource>
+ <dictionary shared="false">
+ <string> "__editor_plugin_states__" </string>
+ <dictionary shared="false">
+ <string> "Script" </string>
+ <dictionary shared="false">
+ <string> "current" </string>
+ <int> 0 </int>
+ <string> "sources" </string>
+ <array len="1" shared="false">
+ <string> "res://player.gd" </string>
+ </array>
+ </dictionary>
+ <string> "2D" </string>
+ <dictionary shared="false">
+ <string> "pixel_snap" </string>
+ <bool> False </bool>
+ <string> "zoom" </string>
+ <real> 2.272073 </real>
+ <string> "ofs" </string>
+ <vector2> -125.17, -137.776 </vector2>
+ </dictionary>
+ <string> "3D" </string>
+ <dictionary shared="false">
+ <string> "zfar" </string>
+ <real> 500 </real>
+ <string> "fov" </string>
+ <real> 45 </real>
+ <string> "viewports" </string>
+ <array len="4" shared="false">
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ </array>
+ <string> "viewport_mode" </string>
+ <int> 1 </int>
+ <string> "default_light" </string>
+ <bool> True </bool>
+ <string> "show_grid" </string>
+ <bool> True </bool>
+ <string> "show_origin" </string>
+ <bool> True </bool>
+ <string> "znear" </string>
+ <real> 0.1 </real>
+ </dictionary>
+ </dictionary>
+ <string> "__editor_run_settings__" </string>
+ <dictionary shared="false">
+ <string> "custom_args" </string>
+ <string> "-l $scene" </string>
+ <string> "run_mode" </string>
+ <int> 0 </int>
+ </dictionary>
+ <string> "__editor_plugin_screen__" </string>
+ <string> "2D" </string>
+ </dictionary>
+ <resource resource_type="Texture" path="res://robot_demo.*"> </resource>
+ <int> 16 </int>
+ <int> 1 </int>
+ <color> 1, 1, 1, 1 </color>
+ <rect2> 0, 0, 0, 0 </rect2>
+ <real> 0.363636 </real>
+ <vector2> 20.7312, 3.21187 </vector2>
+ <real> 83.450417 </real>
+ <int> 4 </int>
+ <real> 0.3 </real>
+ <real> 0.1 </real>
+ <resource resource_type="Texture" path="res://bullet.*"> </resource>
+ <real> 180 </real>
+ <real> 20 </real>
+ <real> 9.8 </real>
+ <real> 2 </real>
+ <color> 0, 0, 0, 0.0442478 </color>
+ <color> 1, 0, 0, 1 </color>
+ <color> 0, 0, 0, 1 </color>
+ <vector2_array len="0"> </vector2_array>
+ <node_path> ".." </node_path>
+ <resource resource_type="Animation" path="local://3"> </resource>
+ <resource resource_type="Animation" path="local://4"> </resource>
+ <resource resource_type="Animation" path="local://5"> </resource>
+ <resource resource_type="Animation" path="local://6"> </resource>
+ <resource resource_type="Animation" path="local://7"> </resource>
+ <resource resource_type="Animation" path="local://8"> </resource>
+ <resource resource_type="Animation" path="local://9"> </resource>
+ <resource resource_type="Animation" path="local://10"> </resource>
+ <resource resource_type="Animation" path="local://11"> </resource>
+ <resource resource_type="Animation" path="local://12"> </resource>
+ <array len="0" shared="false">
+ </array>
+ <string> "" </string>
+ <int> 0 </int>
+ <int> 10000000 </int>
+ <real> 0.2 </real>
+ <vector2> 31.2428, 4.08784 </vector2>
+ <vector2> 0.291992, -12.1587 </vector2>
+ <vector2> 1, 1.76469 </vector2>
+ <resource resource_type="SampleLibrary" path="local://13"> </resource>
+ <nil> </nil>
+ <vector2_array len="3"> -0.138023, 16.5036, -19.902, -24.8691, 19.3625, -24.6056 </vector2_array>
+ <vector2> 27.7593, 360.87 </vector2>
+ <vector2> 1.49157, 1.46265 </vector2>
+ <resource resource_type="Texture" path="res://osb_left.*"> </resource>
+ <resource name=""></resource> <string> "move_left" </string>
+ <vector2> 121.542, 361.415 </vector2>
+ <resource resource_type="Texture" path="res://osb_right.*"> </resource>
+ <string> "move_right" </string>
+ <vector2> 666.224, 359.02 </vector2>
+ <resource resource_type="Texture" path="res://osb_jump.*"> </resource>
+ <string> "jump" </string>
+ <vector2> 668.073, 262.788 </vector2>
+ <resource resource_type="Texture" path="res://osb_fire.*"> </resource>
+ <string> "shoot" </string>
+ </array>
+ <string> "nodes" </string>
+ <int_array len="566"> -1, -1, 1, 0, -1, 28, 2, 0, 3, 1, 4, 1, 5, 0, 6, 2, 7, 3, 8, 4, 9, 5, 10, 6, 11, 7, 12, 8, 13, 9, 14, 10, 15, 8, 16, 5, 17, 11, 18, 3, 19, 3, 20, 0, 21, 8, 22, 12, 23, 8, 24, 0, 25, 0, 26, 2, 27, 3, 28, 13, 29, 14, 0, 0, 0, 31, 30, -1, 18, 2, 0, 3, 1, 4, 1, 5, 0, 6, 2, 7, 3, 8, 4, 32, 15, 33, 0, 34, 2, 35, 8, 36, 8, 37, 5, 38, 16, 39, 17, 40, 18, 41, 8, 42, 19, 0, 1, 0, 44, 43, -1, 55, 2, 0, 3, 1, 4, 20, 5, 0, 45, 17, 6, 21, 7, 22, 8, 4, 46, 23, 47, 24, 48, 1, 49, 3, 50, 24, 51, 8, 52, 2, 53, 2, 54, 8, 55, 25, 56, 26, 57, 3, 58, 27, 59, 28, 60, 1, 61, 3, 62, 3, 63, 29, 64, 3, 65, 3, 66, 3, 67, 30, 68, 30, 69, 3, 70, 3, 71, 3, 72, 3, 73, 30, 74, 3, 75, 3, 76, 3, 77, 3, 78, 3, 79, 3, 80, 3, 81, 3, 82, 3, 83, 5, 84, 3, 85, 18, 86, 1, 87, 31, 88, 1, 89, 32, 90, 1, 91, 33, 92, 34, 0, 0, 0, 94, 93, -1, 17, 95, 17, 96, 3, 97, 35, 98, 36, 99, 37, 100, 38, 101, 39, 102, 40, 103, 41, 104, 42, 105, 43, 106, 44, 107, 45, 108, 0, 109, 30, 110, 46, 111, 47, 0, 0, 0, 113, 112, -1, 21, 2, 0, 3, 1, 4, 1, 5, 0, 6, 2, 7, 3, 8, 4, 33, 0, 114, 0, 115, 3, 116, 4, 117, 48, 118, 48, 119, 49, 120, 49, 121, 0, 122, 0, 123, 50, 124, 50, 125, 50, 126, 50, 0, 0, 0, 128, 127, -1, 7, 2, 0, 3, 1, 4, 1, 5, 0, 6, 51, 7, 3, 8, 4, 0, 0, 0, 129, 129, -1, 9, 2, 0, 3, 1, 4, 1, 5, 0, 6, 52, 7, 3, 8, 53, 130, 6, 131, 8, 0, 0, 0, 133, 132, -1, 14, 134, 12, 135, 54, 136, 3, 137, 1, 138, 3, 139, 3, 140, 3, 141, 55, 142, 55, 143, 55, 144, 55, 145, 5, 146, 3, 147, 3, 0, 0, 0, 148, 148, -1, 9, 2, 0, 3, 1, 4, 1, 5, 0, 6, 2, 7, 3, 8, 4, 149, 48, 150, 56, 0, 0, 0, 152, 151, -1, 4, 153, 48, 34, 2, 154, 3, 155, 4, 0, 9, 0, 157, 156, -1, 13, 2, 0, 3, 1, 4, 1, 5, 0, 6, 57, 7, 3, 8, 58, 158, 59, 159, 60, 160, 60, 161, 0, 162, 61, 163, 17, 0, 9, 0, 157, 164, -1, 13, 2, 0, 3, 1, 4, 1, 5, 0, 6, 62, 7, 3, 8, 58, 158, 63, 159, 60, 160, 60, 161, 0, 162, 64, 163, 17, 0, 9, 0, 157, 165, -1, 13, 2, 0, 3, 1, 4, 1, 5, 0, 6, 65, 7, 3, 8, 58, 158, 66, 159, 60, 160, 60, 161, 8, 162, 67, 163, 17, 0, 9, 0, 157, 166, -1, 13, 2, 0, 3, 1, 4, 1, 5, 0, 6, 68, 7, 3, 8, 58, 158, 69, 159, 60, 160, 60, 161, 8, 162, 70, 163, 17, 0 </int_array>
+ <string> "conns" </string>
+ <int_array len="0"> </int_array>
+ </dictionary>
+
+ </main_resource>
+</resource_file> \ No newline at end of file
diff --git a/demos/2d/platformer/robot_demo.png b/demos/2d/platformer/robot_demo.png
new file mode 100644
index 0000000000..bba8c63874
--- /dev/null
+++ b/demos/2d/platformer/robot_demo.png
Binary files differ
diff --git a/demos/2d/platformer/scroll_bg_cloud_1.png b/demos/2d/platformer/scroll_bg_cloud_1.png
new file mode 100644
index 0000000000..728d454b5c
--- /dev/null
+++ b/demos/2d/platformer/scroll_bg_cloud_1.png
Binary files differ
diff --git a/demos/2d/platformer/scroll_bg_cloud_2.png b/demos/2d/platformer/scroll_bg_cloud_2.png
new file mode 100644
index 0000000000..66e0cf2fb5
--- /dev/null
+++ b/demos/2d/platformer/scroll_bg_cloud_2.png
Binary files differ
diff --git a/demos/2d/platformer/scroll_bg_cloud_3.png b/demos/2d/platformer/scroll_bg_cloud_3.png
new file mode 100644
index 0000000000..3586bb4072
--- /dev/null
+++ b/demos/2d/platformer/scroll_bg_cloud_3.png
Binary files differ
diff --git a/demos/2d/platformer/scroll_bg_fg_1.png b/demos/2d/platformer/scroll_bg_fg_1.png
new file mode 100644
index 0000000000..e64c446f65
--- /dev/null
+++ b/demos/2d/platformer/scroll_bg_fg_1.png
Binary files differ
diff --git a/demos/2d/platformer/scroll_bg_fg_2.png b/demos/2d/platformer/scroll_bg_fg_2.png
new file mode 100644
index 0000000000..ef9601183b
--- /dev/null
+++ b/demos/2d/platformer/scroll_bg_fg_2.png
Binary files differ
diff --git a/demos/2d/platformer/scroll_bg_sky.png b/demos/2d/platformer/scroll_bg_sky.png
new file mode 100644
index 0000000000..04c196510f
--- /dev/null
+++ b/demos/2d/platformer/scroll_bg_sky.png
Binary files differ
diff --git a/demos/2d/platformer/seesaw.xml b/demos/2d/platformer/seesaw.xml
new file mode 100644
index 0000000000..ed879a9319
--- /dev/null
+++ b/demos/2d/platformer/seesaw.xml
@@ -0,0 +1,197 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<resource_file type="PackedScene" subresource_count="4" version="1.0" version_name="Godot Engine v1.0.3917-beta1">
+ <ext_resource path="res://plank.*" type="Texture"></ext_resource>
+ <ext_resource path="res://plankpin.*" type="Texture"></ext_resource>
+ <resource type="RectangleShape2D" path="local://1">
+ <real name="custom_solver_bias"> 0 </real>
+ <vector2 name="extents"> 128, 8 </vector2>
+
+ </resource>
+ <main_resource>
+ <dictionary name="_bundled" shared="false">
+ <string> "names" </string>
+ <string_array len="49">
+ <string> "seesaw" </string>
+ <string> "Node2D" </string>
+ <string> "visibility/visible" </string>
+ <string> "visibility/opacity" </string>
+ <string> "visibility/self_opacity" </string>
+ <string> "visibility/on_top" </string>
+ <string> "transform/pos" </string>
+ <string> "transform/rot" </string>
+ <string> "transform/scale" </string>
+ <string> "__meta__" </string>
+ <string> "plank" </string>
+ <string> "RigidBody2D" </string>
+ <string> "shape_count" </string>
+ <string> "shapes/0/shape" </string>
+ <string> "shapes/0/transform" </string>
+ <string> "shapes/0/trigger" </string>
+ <string> "mode" </string>
+ <string> "mass" </string>
+ <string> "friction" </string>
+ <string> "bounce" </string>
+ <string> "custom_integrator" </string>
+ <string> "continuous_cd" </string>
+ <string> "contacts_reported" </string>
+ <string> "contact_monitor" </string>
+ <string> "active" </string>
+ <string> "can_sleep" </string>
+ <string> "velocity/linear" </string>
+ <string> "velocity/angular" </string>
+ <string> "sprite" </string>
+ <string> "Sprite" </string>
+ <string> "texture" </string>
+ <string> "centered" </string>
+ <string> "offset" </string>
+ <string> "flip_h" </string>
+ <string> "flip_v" </string>
+ <string> "vframes" </string>
+ <string> "hframes" </string>
+ <string> "frame" </string>
+ <string> "modulate" </string>
+ <string> "region" </string>
+ <string> "region_rect" </string>
+ <string> "CollisionShape2D" </string>
+ <string> "shape" </string>
+ <string> "trigger" </string>
+ <string> "pin" </string>
+ <string> "PinJoint2D" </string>
+ <string> "node_a" </string>
+ <string> "node_b" </string>
+ <string> "bias/bias" </string>
+ </string_array>
+ <string> "version" </string>
+ <int> 1 </int>
+ <string> "conn_count" </string>
+ <int> 0 </int>
+ <string> "node_count" </string>
+ <int> 6 </int>
+ <string> "variants" </string>
+ <array len="19" shared="false">
+ <bool> True </bool>
+ <real> 1 </real>
+ <vector2> 0, 0 </vector2>
+ <real> 0 </real>
+ <vector2> 1, 1 </vector2>
+ <dictionary shared="false">
+ <string> "__editor_plugin_states__" </string>
+ <dictionary shared="false">
+ <string> "2D" </string>
+ <dictionary shared="false">
+ <string> "pixel_snap" </string>
+ <bool> False </bool>
+ <string> "zoom" </string>
+ <real> 2.050547 </real>
+ <string> "ofs" </string>
+ <vector2> -116.979, -109.897 </vector2>
+ </dictionary>
+ <string> "3D" </string>
+ <dictionary shared="false">
+ <string> "zfar" </string>
+ <real> 500 </real>
+ <string> "fov" </string>
+ <real> 400 </real>
+ <string> "viewports" </string>
+ <array len="4" shared="false">
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ </array>
+ <string> "viewport_mode" </string>
+ <int> 1 </int>
+ <string> "default_light" </string>
+ <bool> True </bool>
+ <string> "show_grid" </string>
+ <bool> True </bool>
+ <string> "show_origin" </string>
+ <bool> True </bool>
+ <string> "znear" </string>
+ <real> 0.1 </real>
+ </dictionary>
+ </dictionary>
+ <string> "__editor_run_settings__" </string>
+ <dictionary shared="false">
+ <string> "custom_args" </string>
+ <string> "-l $scene" </string>
+ <string> "run_mode" </string>
+ <int> 0 </int>
+ </dictionary>
+ <string> "__editor_plugin_screen__" </string>
+ <string> "2D" </string>
+ </dictionary>
+ <int> 1 </int>
+ <resource resource_type="Shape2D" path="local://1"> </resource>
+ <matrix32> 1, 0, 0, 1, 0, 0 </matrix32>
+ <bool> False </bool>
+ <int> 0 </int>
+ <real> 5.102041 </real>
+ <resource resource_type="Texture" path="res://plank.*"> </resource>
+ <color> 1, 1, 1, 1 </color>
+ <rect2> 0, 0, 0, 0 </rect2>
+ <node_path> "../plank" </node_path>
+ <node_path> "" </node_path>
+ <vector2> -0.290825, 20.2425 </vector2>
+ <resource resource_type="Texture" path="res://plankpin.*"> </resource>
+ </array>
+ <string> "nodes" </string>
+ <int_array len="214"> -1, -1, 1, 0, -1, 8, 2, 0, 3, 1, 4, 1, 5, 0, 6, 2, 7, 3, 8, 4, 9, 5, 0, 0, 0, 11, 10, -1, 23, 2, 0, 3, 1, 4, 1, 5, 0, 6, 2, 7, 3, 8, 4, 12, 6, 13, 7, 14, 8, 15, 9, 16, 10, 17, 11, 18, 1, 19, 3, 20, 9, 21, 9, 22, 10, 23, 9, 24, 0, 25, 0, 26, 2, 27, 3, 0, 1, 0, 29, 28, -1, 18, 2, 0, 3, 1, 4, 1, 5, 0, 6, 2, 7, 3, 8, 4, 30, 12, 31, 0, 32, 2, 33, 9, 34, 9, 35, 6, 36, 6, 37, 10, 38, 13, 39, 9, 40, 14, 0, 1, 0, 41, 41, -1, 9, 2, 0, 3, 1, 4, 1, 5, 0, 6, 2, 7, 3, 8, 4, 42, 7, 43, 9, 0, 0, 0, 45, 44, -1, 10, 2, 0, 3, 1, 4, 1, 5, 0, 6, 2, 7, 3, 8, 4, 46, 15, 47, 16, 48, 3, 0, 0, 0, 29, 29, -1, 18, 2, 0, 3, 1, 4, 1, 5, 0, 6, 17, 7, 3, 8, 4, 30, 18, 31, 0, 32, 2, 33, 9, 34, 9, 35, 6, 36, 6, 37, 10, 38, 13, 39, 9, 40, 14, 0 </int_array>
+ <string> "conns" </string>
+ <int_array len="0"> </int_array>
+ </dictionary>
+
+ </main_resource>
+</resource_file> \ No newline at end of file
diff --git a/demos/2d/platformer/sound_coin.wav b/demos/2d/platformer/sound_coin.wav
new file mode 100644
index 0000000000..e78579f461
--- /dev/null
+++ b/demos/2d/platformer/sound_coin.wav
Binary files differ
diff --git a/demos/2d/platformer/sound_explode.wav b/demos/2d/platformer/sound_explode.wav
new file mode 100644
index 0000000000..229c85399c
--- /dev/null
+++ b/demos/2d/platformer/sound_explode.wav
Binary files differ
diff --git a/demos/2d/platformer/sound_hit.wav b/demos/2d/platformer/sound_hit.wav
new file mode 100644
index 0000000000..4fb3b13812
--- /dev/null
+++ b/demos/2d/platformer/sound_hit.wav
Binary files differ
diff --git a/demos/2d/platformer/sound_jump.wav b/demos/2d/platformer/sound_jump.wav
new file mode 100644
index 0000000000..e9942e65e6
--- /dev/null
+++ b/demos/2d/platformer/sound_jump.wav
Binary files differ
diff --git a/demos/2d/platformer/sound_shoot.wav b/demos/2d/platformer/sound_shoot.wav
new file mode 100644
index 0000000000..ad74f328cb
--- /dev/null
+++ b/demos/2d/platformer/sound_shoot.wav
Binary files differ
diff --git a/demos/2d/platformer/stage.xml b/demos/2d/platformer/stage.xml
new file mode 100644
index 0000000000..b8a54537d8
--- /dev/null
+++ b/demos/2d/platformer/stage.xml
@@ -0,0 +1,324 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<resource_file type="PackedScene" subresource_count="9" version="0.99" version_name="Godot Engine v0.99.3735-pre-beta">
+ <ext_resource path="res://music.*" type="AudioStreamOGGVorbis"></ext_resource>
+ <ext_resource path="res://tileset.*" type="TileSet"></ext_resource>
+ <ext_resource path="res://seesaw.*" type="PackedScene"></ext_resource>
+ <ext_resource path="res://player.*" type="PackedScene"></ext_resource>
+ <ext_resource path="res://coin.*" type="PackedScene"></ext_resource>
+ <ext_resource path="res://enemy.*" type="PackedScene"></ext_resource>
+ <ext_resource path="res://moving_platform.*" type="PackedScene"></ext_resource>
+ <ext_resource path="res://parallax_bg.*" type="PackedScene"></ext_resource>
+ <main_resource>
+ <dictionary name="_bundled" shared="false">
+ <string> "names" </string>
+ <string_array len="92">
+ <string> "stage" </string>
+ <string> "Node" </string>
+ <string> "__meta__" </string>
+ <string> "tile_map" </string>
+ <string> "TileMap" </string>
+ <string> "visibility/visible" </string>
+ <string> "visibility/opacity" </string>
+ <string> "visibility/self_opacity" </string>
+ <string> "visibility/on_top" </string>
+ <string> "transform/pos" </string>
+ <string> "transform/rot" </string>
+ <string> "transform/scale" </string>
+ <string> "cell_size" </string>
+ <string> "quadrant_size" </string>
+ <string> "tile_set" </string>
+ <string> "tile_data" </string>
+ <string> "coins" </string>
+ <string> "coin" </string>
+ <string> "Area2D" </string>
+ <string> "coin 2" </string>
+ <string> "coin 3" </string>
+ <string> "coin 4" </string>
+ <string> "coin 5" </string>
+ <string> "coin 6" </string>
+ <string> "coin 7" </string>
+ <string> "coin 8" </string>
+ <string> "coin 9" </string>
+ <string> "coin 10" </string>
+ <string> "coin 11" </string>
+ <string> "coin 12" </string>
+ <string> "coin 13" </string>
+ <string> "coin 14" </string>
+ <string> "coin 15" </string>
+ <string> "coin 16" </string>
+ <string> "coin 17" </string>
+ <string> "coin 18" </string>
+ <string> "coin 19" </string>
+ <string> "coin 20" </string>
+ <string> "coin 21" </string>
+ <string> "coin 22" </string>
+ <string> "coin 23" </string>
+ <string> "coin 24" </string>
+ <string> "coin 25" </string>
+ <string> "coin 26" </string>
+ <string> "coin 27" </string>
+ <string> "coin 28" </string>
+ <string> "coin 29" </string>
+ <string> "coin 30" </string>
+ <string> "coin 31" </string>
+ <string> "coin 31 2" </string>
+ <string> "coin 31 3" </string>
+ <string> "coin 31 4" </string>
+ <string> "coin 31 5" </string>
+ <string> "coin 31 6" </string>
+ <string> "coin 32" </string>
+ <string> "coin 31 7" </string>
+ <string> "coin 31 7 2" </string>
+ <string> "coin 31 7 3" </string>
+ <string> "coin 31 7 4" </string>
+ <string> "coin 31 7 5" </string>
+ <string> "player" </string>
+ <string> "RigidBody2D" </string>
+ <string> "props" </string>
+ <string> "moving_platform" </string>
+ <string> "Node2D" </string>
+ <string> "motion" </string>
+ <string> "cycle" </string>
+ <string> "moving_platform 2" </string>
+ <string> "moving_platform 3" </string>
+ <string> "seesaw" </string>
+ <string> "music" </string>
+ <string> "StreamPlayer" </string>
+ <string> "stream/stream" </string>
+ <string> "stream/play" </string>
+ <string> "stream/loop" </string>
+ <string> "stream/volume_db" </string>
+ <string> "stream/autoplay" </string>
+ <string> "stream/paused" </string>
+ <string> "enemies" </string>
+ <string> "enemy 5" </string>
+ <string> "enemy 6" </string>
+ <string> "enemy 7" </string>
+ <string> "enemy 8" </string>
+ <string> "enemy 9" </string>
+ <string> "enemy 10" </string>
+ <string> "enemy 11" </string>
+ <string> "enemy 12" </string>
+ <string> "enemy 13" </string>
+ <string> "enemy 14" </string>
+ <string> "enemy 15" </string>
+ <string> "parallax_bg" </string>
+ <string> "ParallaxBackground" </string>
+ </string_array>
+ <string> "version" </string>
+ <int> 1 </int>
+ <string> "conn_count" </string>
+ <int> 0 </int>
+ <string> "node_count" </string>
+ <int> 65 </int>
+ <string> "variants" </string>
+ <array len="84" shared="false">
+ <dictionary shared="false">
+ <string> "__editor_plugin_states__" </string>
+ <dictionary shared="false">
+ <string> "Script" </string>
+ <dictionary shared="false">
+ <string> "current" </string>
+ <int> 2 </int>
+ <string> "sources" </string>
+ <array len="4" shared="false">
+ <string> "res://moving_platform.gd" </string>
+ <string> "res://enemy.gd" </string>
+ <string> "res://player.gd" </string>
+ <string> "res://coin.gd" </string>
+ </array>
+ </dictionary>
+ <string> "2D" </string>
+ <dictionary shared="false">
+ <string> "pixel_snap" </string>
+ <bool> False </bool>
+ <string> "zoom" </string>
+ <real> 0.598736 </real>
+ <string> "ofs" </string>
+ <vector2> -37.7393, 205.061 </vector2>
+ </dictionary>
+ <string> "3D" </string>
+ <dictionary shared="false">
+ <string> "zfar" </string>
+ <real> 500 </real>
+ <string> "fov" </string>
+ <real> 45 </real>
+ <string> "viewports" </string>
+ <array len="4" shared="false">
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ </array>
+ <string> "viewport_mode" </string>
+ <int> 1 </int>
+ <string> "default_light" </string>
+ <bool> True </bool>
+ <string> "show_grid" </string>
+ <bool> True </bool>
+ <string> "show_origin" </string>
+ <bool> True </bool>
+ <string> "znear" </string>
+ <real> 0.1 </real>
+ </dictionary>
+ </dictionary>
+ <string> "__editor_run_settings__" </string>
+ <dictionary shared="false">
+ <string> "custom_args" </string>
+ <string> "-l $scene" </string>
+ <string> "run_mode" </string>
+ <int> 0 </int>
+ </dictionary>
+ <string> "__editor_plugin_screen__" </string>
+ <string> "2D" </string>
+ </dictionary>
+ <bool> True </bool>
+ <real> 1 </real>
+ <vector2> 0, 0 </vector2>
+ <real> 0 </real>
+ <vector2> 1, 1 </vector2>
+ <int> 64 </int>
+ <int> 16 </int>
+ <resource resource_type="TileSet" path="res://tileset.*"> </resource>
+ <int_array len="1998"> 0, 2, 70, 536870914, 71, 10, 72, 10, 73, 10, 74, 10, 75, 10, 76, 10, 77, 10, 78, 10, 65536, 2, 65606, 536870914, 65607, 10, 65608, 10, 65609, 10, 65610, 10, 65611, 10, 65612, 10, 65613, 10, 65614, 10, 131072, 2, 131142, 536870914, 131143, 10, 131144, 10, 131145, 10, 131146, 10, 131147, 10, 131148, 10, 131149, 10, 131150, 10, 196608, 2, 196626, 9, 196678, 536870914, 196679, 10, 196680, 10, 196681, 10, 196682, 10, 196683, 10, 196684, 10, 196685, 10, 196686, 10, 262144, 2, 262162, 8, 262214, 536870914, 262215, 10, 262216, 10, 262217, 10, 262218, 10, 262219, 10, 262220, 10, 262221, 10, 262222, 10, 327680, 2, 327697, 536870921, 327698, 7, 327733, 9, 327750, 536870914, 327751, 10, 327752, 10, 327753, 10, 327754, 10, 327755, 10, 327756, 10, 327757, 10, 327758, 10, 393216, 2, 393233, 536870920, 393234, 7, 393257, 9, 393269, 7, 393286, 536870914, 393287, 10, 393288, 10, 393289, 10, 393290, 10, 393291, 10, 393292, 10, 393293, 10, 393294, 10, 458752, 2, 458769, 7, 458770, 8, 458790, 9, 458793, 8, 458805, 8, 458822, 536870914, 458823, 10, 458824, 10, 458825, 10, 458826, 10, 458827, 10, 458828, 10, 458829, 10, 458830, 10, 524288, 4, 524289, 1, 524304, 536870913, 524305, 536870918, 524306, 6, 524307, 5, 524308, 1, 524326, 8, 524329, 7, 524341, 7, 524358, 536870914, 524359, 10, 524360, 10, 524361, 10, 524362, 10, 524363, 10, 524364, 10, 524365, 10, 524366, 10, 589824, 10, 589825, 13, 589840, 536870914, 589841, 10, 589842, 10, 589843, 10, 589844, 2, 589862, 7, 589865, 7, 589876, 536870913, 589877, 6, 589878, 1, 589894, 536870914, 589895, 10, 589896, 10, 589897, 10, 589898, 10, 589899, 10, 589900, 10, 589901, 10, 589902, 10, 655360, 2, 655376, 536870914, 655377, 10, 655378, 10, 655379, 10, 655380, 2, 655398, 7, 655401, 8, 655412, 536870925, 655413, 11, 655414, 13, 655430, 536870914, 655431, 10, 655432, 10, 655433, 10, 655434, 10, 655435, 10, 655436, 10, 655437, 10, 655438, 10, 720896, 2, 720912, 536870914, 720913, 10, 720914, 10, 720915, 10, 720916, 2, 720934, 8, 720937, 7, 720958, 536870913, 720959, 5, 720960, 536870917, 720961, 5, 720962, 5, 720963, 536870917, 720964, 5, 720965, 0, 720966, 536870916, 720967, 10, 720968, 10, 720969, 10, 720970, 10, 720971, 10, 720972, 10, 720973, 10, 720974, 10, 786432, 2, 786437, 9, 786448, 536870914, 786449, 10, 786450, 10, 786451, 10, 786452, 2, 786464, 536870913, 786465, 1, 786470, 7, 786473, 7, 786474, 536870924, 786475, 1, 786494, 536870914, 786495, 10, 786496, 10, 786497, 10, 786498, 10, 786499, 10, 786500, 10, 786501, 10, 786502, 10, 786503, 10, 786504, 10, 786505, 10, 786506, 10, 786507, 10, 786508, 10, 786509, 10, 851968, 2, 851973, 7, 851984, 536870914, 851985, 10, 851986, 10, 851987, 10, 851988, 2, 851996, 536870913, 851997, 1, 852000, 536870914, 852001, 3, 852006, 7, 852009, 536870913, 852011, 2, 852030, 536870914, 852031, 10, 852032, 10, 852033, 10, 852034, 10, 852035, 10, 852036, 10, 852037, 10, 852038, 10, 852039, 10, 852040, 10, 852041, 10, 852042, 10, 852043, 10, 852044, 10, 852045, 10, 917504, 2, 917506, 9, 917509, 7, 917512, 536870921, 917520, 536870925, 917521, 11, 917522, 11, 917523, 11, 917524, 13, 917532, 536870925, 917533, 13, 917536, 536870914, 917537, 4, 917538, 1, 917540, 536870913, 917541, 0, 917542, 1, 917545, 536870914, 917546, 10, 917547, 4, 917548, 1, 917566, 536870914, 917567, 10, 917568, 10, 917569, 10, 917570, 10, 917571, 10, 917572, 10, 917573, 10, 917574, 10, 917575, 10, 917576, 10, 917577, 10, 917578, 10, 917579, 10, 917580, 10, 917581, 10, 983040, 2, 983042, 7, 983045, 7, 983048, 536870920, 983050, 536870913, 983051, 1, 983064, 536870913, 983065, 1, 983072, 536870914, 983073, 10, 983074, 4, 983075, 0, 983076, 536870916, 983077, 10, 983078, 4, 983079, 536870912, 983080, 536870912, 983081, 536870916, 983082, 10, 983083, 10, 983084, 2, 983095, 9, 983102, 536870914, 983103, 10, 983104, 10, 983105, 10, 983106, 10, 983107, 10, 983108, 10, 983109, 10, 983110, 10, 983111, 10, 983112, 10, 983113, 10, 983114, 10, 983115, 10, 983116, 10, 983117, 10, 1048576, 2, 1048578, 8, 1048581, 8, 1048584, 536870919, 1048586, 536870925, 1048587, 13, 1048600, 536870925, 1048601, 13, 1048604, 9, 1048608, 536870925, 1048609, 536870923, 1048610, 536870923, 1048611, 536870923, 1048612, 10, 1048613, 10, 1048614, 10, 1048615, 10, 1048616, 10, 1048617, 10, 1048618, 10, 1048619, 10, 1048620, 4, 1048621, 1, 1048630, 536870921, 1048631, 8, 1048638, 536870914, 1048639, 10, 1048640, 10, 1048641, 10, 1048642, 10, 1048643, 10, 1048644, 10, 1048645, 10, 1048646, 10, 1048647, 10, 1048648, 10, 1048649, 10, 1048650, 10, 1048651, 10, 1048652, 10, 1048653, 10, 1114112, 4, 1114113, 0, 1114114, 6, 1114115, 0, 1114116, 0, 1114117, 6, 1114118, 1, 1114120, 536870920, 1114128, 536870913, 1114129, 5, 1114130, 536870917, 1114131, 5, 1114132, 0, 1114133, 1, 1114140, 7, 1114141, 536870921, 1114148, 536870914, 1114149, 10, 1114150, 10, 1114151, 10, 1114152, 10, 1114153, 10, 1114154, 10, 1114155, 10, 1114156, 10, 1114157, 2, 1114166, 536870920, 1114167, 8, 1114174, 536870914, 1114175, 10, 1114176, 10, 1114177, 10, 1114178, 10, 1114179, 10, 1114180, 10, 1114181, 10, 1114182, 10, 1114183, 10, 1114184, 10, 1114185, 10, 1114186, 10, 1114187, 10, 1114188, 10, 1179648, 10, 1179649, 10, 1179650, 10, 1179651, 10, 1179652, 10, 1179653, 10, 1179654, 2, 1179656, 536870919, 1179663, 536870915, 1179665, 10, 1179666, 10, 1179667, 10, 1179668, 10, 1179669, 4, 1179670, 12, 1179675, 9, 1179676, 8, 1179677, 8, 1179684, 536870914, 1179685, 10, 1179686, 10, 1179687, 10, 1179688, 10, 1179689, 10, 1179690, 10, 1179691, 10, 1179692, 10, 1179693, 4, 1179694, 1, 1179701, 9, 1179702, 536870919, 1179703, 7, 1179710, 536870914, 1179711, 10, 1179712, 10, 1179713, 10, 1179714, 10, 1179715, 10, 1179716, 10, 1179717, 10, 1179718, 10, 1179719, 10, 1179720, 10, 1179721, 10, 1179722, 10, 1245184, 10, 1245185, 10, 1245186, 10, 1245187, 10, 1245188, 10, 1245189, 10, 1245190, 2, 1245192, 536870919, 1245199, 536870913, 1245200, 536870916, 1245201, 10, 1245202, 10, 1245203, 10, 1245204, 10, 1245205, 10, 1245207, 1, 1245211, 7, 1245212, 7, 1245213, 536870920, 1245220, 536870914, 1245221, 10, 1245222, 10, 1245223, 10, 1245224, 10, 1245225, 10, 1245226, 10, 1245227, 10, 1245228, 10, 1245229, 10, 1245230, 2, 1245237, 8, 1245238, 536870919, 1245239, 8, 1245240, 536870921, 1245246, 536870914, 1245247, 10, 1245248, 10, 1245249, 10, 1245250, 10, 1245251, 10, 1245252, 10, 1245253, 10, 1245254, 10, 1245255, 10, 1245256, 10, 1245257, 10, 1245258, 10, 1310720, 10, 1310721, 10, 1310722, 10, 1310723, 10, 1310724, 10, 1310725, 10, 1310726, 2, 1310728, 536870920, 1310730, 536870913, 1310731, 1, 1310734, 536870913, 1310735, 536870916, 1310736, 10, 1310737, 10, 1310738, 10, 1310739, 10, 1310740, 10, 1310741, 10, 1310742, 10, 1310743, 4, 1310744, 1, 1310747, 8, 1310748, 7, 1310749, 536870919, 1310756, 536870914, 1310757, 10, 1310758, 10, 1310759, 10, 1310760, 10, 1310761, 10, 1310762, 10, 1310763, 10, 1310764, 10, 1310765, 10, 1310766, 4, 1310767, 5, 1310768, 12, 1310773, 7, 1310774, 536870919, 1310775, 7, 1310776, 536870919, 1310782, 536870914, 1310783, 10, 1310784, 10, 1310785, 10, 1310786, 10, 1310787, 10, 1310788, 10, 1310789, 10, 1310790, 10, 1310791, 10, 1310792, 10, 1310793, 10, 1376256, 10, 1376257, 10, 1376258, 10, 1376259, 10, 1376260, 10, 1376261, 10, 1376262, 4, 1376263, 0, 1376264, 536870918, 1376265, 0, 1376266, 536870916, 1376267, 4, 1376268, 0, 1376269, 0, 1376270, 536870916, 1376271, 10, 1376272, 10, 1376273, 10, 1376274, 10, 1376275, 10, 1376276, 10, 1376277, 10, 1376278, 10, 1376279, 10, 1376280, 4, 1376281, 12, 1376283, 8, 1376284, 8, 1376285, 536870920, 1376287, 536870924, 1376288, 0, 1376289, 5, 1376290, 536870917, 1376291, 0, 1376292, 536870916, 1376293, 10, 1376294, 10, 1376295, 10, 1376296, 10, 1376297, 10, 1376298, 10, 1376299, 10, 1376300, 10, 1376301, 10, 1376302, 10, 1376303, 10, 1376305, 12, 1376309, 7, 1376310, 536870920, 1376311, 7, 1376312, 536870920, 1376318, 536870914, 1376319, 10, 1376320, 10, 1376321, 10, 1376322, 10, 1376323, 10, 1376324, 10, 1376325, 10, 1376326, 10, 1376327, 10, 1376328, 10, 1441792, 10, 1441793, 10, 1441794, 10, 1441795, 10, 1441796, 10, 1441797, 10, 1441798, 10, 1441799, 10, 1441800, 10, 1441801, 10, 1441802, 10, 1441803, 10, 1441804, 10, 1441805, 10, 1441806, 10, 1441807, 10, 1441808, 10, 1441809, 10, 1441810, 10, 1441811, 10, 1441812, 10, 1441813, 10, 1441814, 10, 1441815, 10, 1441816, 10, 1441818, 0, 1441819, 6, 1441820, 6, 1441821, 536870918, 1441822, 5, 1441824, 10, 1441825, 10, 1441826, 10, 1441827, 10, 1441828, 10, 1441829, 10, 1441830, 10, 1441831, 10, 1441832, 10, 1441833, 10, 1441834, 10, 1441835, 10, 1441836, 10, 1441837, 10, 1441838, 10, 1441839, 10, 1441840, 10, 1441842, 0, 1441843, 0, 1441844, 0, 1441845, 6, 1441846, 536870918, 1441847, 6, 1441848, 536870918, 1441849, 0, 1441850, 5, 1441851, 536870917, 1441852, 5, 1441853, 0, 1441854, 536870916, 1441855, 10, 1441856, 10, 1441857, 10, 1441858, 10, 1441859, 10, 1441860, 10, 1441861, 10, 1441862, 10, 1441863, 10, 1507328, 10, 1507329, 10, 1507330, 10, 1507331, 10, 1507332, 10, 1507333, 10, 1507334, 10, 1507335, 10, 1507336, 10, 1507337, 10, 1507338, 10, 1507339, 10, 1507340, 10, 1507341, 10, 1507342, 10, 1507343, 10, 1507344, 10, 1507345, 10, 1507346, 10, 1507347, 10, 1507348, 10, 1507349, 10, 1507350, 10, 1507351, 10, 1507352, 10, 1507353, 10, 1507354, 10, 1507355, 10, 1507356, 10, 1507357, 10, 1507358, 10, 1507359, 10, 1507360, 10, 1507361, 10, 1507362, 10, 1507363, 10, 1507364, 10, 1507365, 10, 1507366, 10, 1507367, 10, 1507368, 10, 1507369, 10, 1507370, 10, 1507371, 10, 1507372, 10, 1507373, 10, 1507374, 10, 1507375, 10, 1507376, 10, 1507377, 10, 1507378, 10, 1507379, 10, 1507380, 10, 1507381, 10, 1507382, 10, 1507383, 10, 1507384, 10, 1507385, 10, 1507386, 10, 1507387, 10, 1507388, 10, 1507389, 10, 1507390, 10, 1507391, 10, 1507392, 10, 1507393, 10, 1507394, 10, 1507395, 10, 1507396, 10, 1507397, 10, 1507398, 10, 1507399, 10, 1572864, 10, 1572865, 10, 1572866, 10, 1572867, 10, 1572868, 10, 1572869, 10, 1572870, 10, 1572871, 10, 1572872, 10, 1572873, 10, 1572874, 10, 1572875, 10, 1572876, 10, 1572877, 10, 1572878, 10, 1572879, 10, 1572880, 10, 1572881, 10, 1572882, 10, 1572883, 10, 1572884, 10, 1572885, 10, 1572886, 10, 1572887, 10, 1572888, 10, 1572889, 10, 1572890, 10, 1572891, 10, 1572892, 10, 1572893, 10, 1572894, 10, 1572895, 10, 1572896, 10, 1572897, 10, 1572898, 10, 1572899, 10, 1572900, 10, 1572901, 10, 1572902, 10, 1572903, 10, 1572904, 10, 1572905, 10, 1572906, 10, 1572907, 10, 1572908, 10, 1572909, 10, 1572910, 10, 1572911, 10, 1572912, 10, 1572913, 10, 1572914, 10, 1572915, 10, 1572916, 10, 1572917, 10, 1572918, 10, 1572919, 10, 1572920, 10, 1572921, 10, 1572922, 10, 1572923, 10, 1572924, 10, 1572925, 10, 1572926, 10, 1572927, 10, 1572928, 10, 1572929, 10, 1572930, 10, 1572931, 10, 1572932, 10, 1572933, 10, 1572934, 10, 1572935, 10, 1638400, 10, 1638401, 10, 1638402, 10, 1638403, 10, 1638404, 10, 1638405, 10, 1638406, 10, 1638407, 10, 1638408, 10, 1638409, 10, 1638410, 10, 1638411, 10, 1638412, 10, 1638413, 10, 1638414, 10, 1638415, 10, 1638416, 10, 1638417, 10, 1638418, 10, 1638419, 10, 1638420, 10, 1638421, 10, 1638422, 10, 1638423, 10, 1638424, 10, 1638425, 10, 1638426, 10, 1638427, 10, 1638428, 10, 1638429, 10, 1638430, 10, 1638431, 10, 1638432, 10, 1638433, 10, 1638434, 10, 1638435, 10, 1638436, 10, 1638437, 10, 1638438, 10, 1638439, 10, 1638440, 10, 1638441, 10, 1638442, 10, 1638443, 10, 1638444, 10, 1638445, 10, 1638446, 10, 1638447, 10, 1638448, 10, 1638449, 10, 1638450, 10, 1638451, 10, 1638452, 10, 1638453, 10, 1638454, 10, 1638455, 10, 1638456, 10, 1638457, 10, 1638458, 10, 1638459, 10, 1638460, 10, 1638461, 10, 1638462, 10, 1638463, 10, 1638464, 10, 1638465, 10, 1638466, 10, 1638467, 10, 1638468, 10, 1638469, 10, 1638470, 10, 1638471, 10, 1703952, 10, 1703953, 10, 1703954, 10, 1703955, 10, 1703956, 10, 1703957, 10, 1703958, 10, 1703959, 10, 1703960, 10, 1703961, 10, 1703962, 10, 1703963, 10, 1703964, 10, 1703965, 10, 1703966, 10, 1703967, 10, 1703968, 10, 1703969, 10, 1703970, 10, 1703971, 10, 1703972, 10, 1703973, 10, 1703974, 10, 1703975, 10, 1703976, 10, 1703977, 10, 1703978, 10, 1703979, 10, 1703980, 10, 1703981, 10, 1703982, 10, 1703983, 10, 1703984, 10, 1703985, 10, 1703986, 10, 1703987, 10, 1703988, 10, 1703989, 10, 1703990, 10, 1703991, 10, 1703992, 10, 1703993, 10, 1703994, 10, 1703995, 10, 1703996, 10, 1703997, 10, 1703998, 10, 1703999, 10, 1704000, 10, 1704001, 10, 1704002, 10, 1704003, 10, 1704004, 10, 1704005, 10, 1704006, 10, 1704007, 10, 1769488, 10, 1769489, 10, 1769490, 10, 1769491, 10, 1769492, 10, 1769493, 10, 1769494, 10, 1769495, 10, 1769496, 10, 1769497, 10, 1769498, 10, 1769499, 10, 1769500, 10, 1769501, 10, 1769502, 10, 1769503, 10, 1769504, 10, 1769505, 10, 1769506, 10, 1769507, 10, 1769508, 10, 1769509, 10, 1769510, 10, 1769511, 10, 1769512, 10, 1769513, 10, 1769514, 10, 1769515, 10, 1769516, 10, 1769517, 10, 1769518, 10, 1769519, 10, 1769520, 10, 1769521, 10, 1769522, 10, 1769523, 10, 1769524, 10, 1769525, 10, 1769526, 10, 1769527, 10, 1769528, 10, 1769529, 10, 1769530, 10, 1769531, 10, 1769532, 10, 1769533, 10, 1769534, 10, 1769535, 10, 1769536, 10, 1769537, 10, 1769538, 10, 1769539, 10, 1769540, 10, 1769541, 10 </int_array>
+ <dictionary shared="false">
+ <string> "_edit_lock_" </string>
+ <bool> True </bool>
+ </dictionary>
+ <dictionary shared="false">
+ <string> "_editor_collapsed" </string>
+ <bool> True </bool>
+ </dictionary>
+ <resource resource_type="PackedScene" path="res://coin.*"> </resource>
+ <vector2> 672, 1120 </vector2>
+ <vector2> 704, 1120 </vector2>
+ <vector2> 736, 1120 </vector2>
+ <vector2> 1120, 992 </vector2>
+ <vector2> 1152, 992 </vector2>
+ <vector2> 1184, 992 </vector2>
+ <vector2> 1216, 992 </vector2>
+ <vector2> 1248, 992 </vector2>
+ <vector2> 1568, 864 </vector2>
+ <vector2> 1632, 864 </vector2>
+ <vector2> 1824, 768 </vector2>
+ <vector2> 1888, 768 </vector2>
+ <vector2> 2080, 672 </vector2>
+ <vector2> 2144, 672 </vector2>
+ <vector2> 1792, 1248 </vector2>
+ <vector2> 1856, 1248 </vector2>
+ <vector2> 1920, 1248 </vector2>
+ <vector2> 1920, 1184 </vector2>
+ <vector2> 1856, 1184 </vector2>
+ <vector2> 1792, 1184 </vector2>
+ <vector2> 98.8868, 488.515 </vector2>
+ <vector2> 89.5989, 481.217 </vector2>
+ <vector2> 108.175, 481.217 </vector2>
+ <vector2> 116.136, 469.939 </vector2>
+ <vector2> 117.463, 457.997 </vector2>
+ <vector2> 106.184, 449.373 </vector2>
+ <vector2> 98.2234, 458.661 </vector2>
+ <vector2> 88.272, 448.71 </vector2>
+ <vector2> 79.6476, 457.334 </vector2>
+ <vector2> 82.9647, 468.612 </vector2>
+ <vector2> 3357.42, 465.288 </vector2>
+ <vector2> 3421.42, 465.288 </vector2>
+ <vector2> 3485.42, 465.288 </vector2>
+ <vector2> 3485.42, 401.288 </vector2>
+ <vector2> 3421.42, 401.288 </vector2>
+ <vector2> 3357.42, 401.288 </vector2>
+ <vector2> 4172.75, 605.058 </vector2>
+ <vector2> 4236.75, 605.058 </vector2>
+ <vector2> 4300.75, 605.058 </vector2>
+ <vector2> 4300.75, 541.058 </vector2>
+ <vector2> 4236.75, 541.058 </vector2>
+ <vector2> 4172.75, 541.058 </vector2>
+ <resource resource_type="PackedScene" path="res://player.*"> </resource>
+ <vector2> 236.879, 1051.15 </vector2>
+ <resource resource_type="PackedScene" path="res://moving_platform.*"> </resource>
+ <vector2> 1451.86, 742.969 </vector2>
+ <vector2> 0, 140 </vector2>
+ <real> 5 </real>
+ <vector2> 624.824, 545.544 </vector2>
+ <vector2> 300, 0 </vector2>
+ <real> 10 </real>
+ <vector2> 3419.86, 739.662 </vector2>
+ <vector2> 450, 0 </vector2>
+ <resource resource_type="PackedScene" path="res://seesaw.*"> </resource>
+ <vector2> 2402.79, 849.52 </vector2>
+ <resource resource_type="AudioStreamOGGVorbis" path="res://music.*"> </resource>
+ <bool> False </bool>
+ <real> 2 </real>
+ <resource resource_type="PackedScene" path="res://enemy.*"> </resource>
+ <vector2> 834.664, 1309.6 </vector2>
+ <vector2> 707.665, 1225.05 </vector2>
+ <vector2> 1125.21, 1053.06 </vector2>
+ <vector2> 1292.11, 1059.24 </vector2>
+ <vector2> 1607.38, 923.239 </vector2>
+ <vector2> 2586.9, 939.059 </vector2>
+ <vector2> 1457.6, 688.741 </vector2>
+ <vector2> 1193.63, 460.381 </vector2>
+ <vector2> 3429.73, 540.865 </vector2>
+ <vector2> 3546.2, 1356.19 </vector2>
+ <vector2> 2406.63, 815.115 </vector2>
+ <resource resource_type="PackedScene" path="res://parallax_bg.*"> </resource>
+ </array>
+ <string> "nodes" </string>
+ <int_array len="623"> -1, -1, 1, 0, -1, 1, 2, 0, 0, 0, 0, 4, 3, -1, 12, 5, 1, 6, 2, 7, 2, 8, 1, 9, 3, 10, 4, 11, 5, 12, 6, 13, 7, 14, 8, 15, 9, 2, 10, 0, 0, 0, 1, 16, -1, 1, 2, 11, 0, 2, 0, 18, 17, 12, 1, 9, 13, 0, 2, 0, 18, 19, 12, 1, 9, 14, 0, 2, 0, 18, 20, 12, 1, 9, 15, 0, 2, 0, 18, 21, 12, 1, 9, 16, 0, 2, 0, 18, 22, 12, 1, 9, 17, 0, 2, 0, 18, 23, 12, 1, 9, 18, 0, 2, 0, 18, 24, 12, 1, 9, 19, 0, 2, 0, 18, 25, 12, 1, 9, 20, 0, 2, 0, 18, 26, 12, 1, 9, 21, 0, 2, 0, 18, 27, 12, 1, 9, 22, 0, 2, 0, 18, 28, 12, 1, 9, 23, 0, 2, 0, 18, 29, 12, 1, 9, 24, 0, 2, 0, 18, 30, 12, 1, 9, 25, 0, 2, 0, 18, 31, 12, 1, 9, 26, 0, 2, 0, 18, 32, 12, 1, 9, 27, 0, 2, 0, 18, 33, 12, 1, 9, 28, 0, 2, 0, 18, 34, 12, 1, 9, 29, 0, 2, 0, 18, 35, 12, 1, 9, 30, 0, 2, 0, 18, 36, 12, 1, 9, 31, 0, 2, 0, 18, 37, 12, 1, 9, 32, 0, 2, 0, 18, 38, 12, 1, 9, 33, 0, 2, 0, 18, 39, 12, 1, 9, 34, 0, 2, 0, 18, 40, 12, 1, 9, 35, 0, 2, 0, 18, 41, 12, 1, 9, 36, 0, 2, 0, 18, 42, 12, 1, 9, 37, 0, 2, 0, 18, 43, 12, 1, 9, 38, 0, 2, 0, 18, 44, 12, 1, 9, 39, 0, 2, 0, 18, 45, 12, 1, 9, 40, 0, 2, 0, 18, 46, 12, 1, 9, 41, 0, 2, 0, 18, 47, 12, 1, 9, 42, 0, 2, 0, 18, 48, 12, 1, 9, 43, 0, 2, 0, 18, 49, 12, 1, 9, 44, 0, 2, 0, 18, 50, 12, 1, 9, 45, 0, 2, 0, 18, 51, 12, 1, 9, 46, 0, 2, 0, 18, 52, 12, 1, 9, 47, 0, 2, 0, 18, 53, 12, 1, 9, 48, 0, 2, 0, 18, 54, 12, 1, 9, 49, 0, 2, 0, 18, 55, 12, 1, 9, 50, 0, 2, 0, 18, 56, 12, 1, 9, 51, 0, 2, 0, 18, 57, 12, 1, 9, 52, 0, 2, 0, 18, 58, 12, 1, 9, 53, 0, 2, 0, 18, 59, 12, 1, 9, 54, 0, 0, 0, 61, 60, 55, 1, 9, 56, 0, 0, 0, 1, 62, -1, 0, 0, 46, 0, 64, 63, 57, 3, 9, 58, 65, 59, 66, 60, 0, 46, 0, 64, 67, 57, 3, 9, 61, 65, 62, 66, 63, 0, 46, 0, 64, 68, 57, 3, 9, 64, 65, 65, 66, 63, 0, 46, 0, 64, 69, 66, 1, 9, 67, 0, 0, 0, 71, 70, -1, 6, 72, 68, 73, 69, 74, 1, 75, 70, 76, 1, 77, 69, 0, 0, 0, 1, 78, -1, 0, 0, 52, 0, 61, 79, 71, 1, 9, 72, 0, 52, 0, 61, 80, 71, 1, 9, 73, 0, 52, 0, 61, 81, 71, 1, 9, 74, 0, 52, 0, 61, 82, 71, 1, 9, 75, 0, 52, 0, 61, 83, 71, 1, 9, 76, 0, 52, 0, 61, 84, 71, 1, 9, 77, 0, 52, 0, 61, 85, 71, 1, 9, 78, 0, 52, 0, 61, 86, 71, 1, 9, 79, 0, 52, 0, 61, 87, 71, 1, 9, 80, 0, 52, 0, 61, 88, 71, 1, 9, 81, 0, 52, 0, 61, 89, 71, 1, 9, 82, 0, 0, 0, 91, 90, 83, 0, 0 </int_array>
+ <string> "conns" </string>
+ <int_array len="0"> </int_array>
+ </dictionary>
+
+ </main_resource>
+</resource_file> \ No newline at end of file
diff --git a/demos/2d/platformer/tiles_demo.png b/demos/2d/platformer/tiles_demo.png
new file mode 100644
index 0000000000..a7a5000906
--- /dev/null
+++ b/demos/2d/platformer/tiles_demo.png
Binary files differ
diff --git a/demos/2d/platformer/tileset.xml b/demos/2d/platformer/tileset.xml
new file mode 100644
index 0000000000..2e4ecc8c04
--- /dev/null
+++ b/demos/2d/platformer/tileset.xml
@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<resource_file type="TileSet" subresource_count="12" version="0.99" version_name="Godot Engine v0.99.3037-pre-beta">
+ <ext_resource path="res://tiles_demo.png" type="Texture"></ext_resource>
+ <resource type="ConvexPolygonShape2D" path="local://0">
+ <string name="resource/name"> "" </string>
+ <real name="custom_solver_bias"> 0 </real>
+ <vector2_array name="points" len="4"> 0, 8, 64, 8, 64, 64, 0, 64 </vector2_array>
+ <resource name="script/script"></resource>
+ </resource>
+ <resource type="ConvexPolygonShape2D" path="local://1">
+ <string name="resource/name"> "" </string>
+ <real name="custom_solver_bias"> 0 </real>
+ <vector2_array name="points" len="4"> 0, 64, 0, 8, 56, 8, 56, 64 </vector2_array>
+ <resource name="script/script"></resource>
+ </resource>
+ <resource type="ConvexPolygonShape2D" path="local://2">
+ <string name="resource/name"> "" </string>
+ <real name="custom_solver_bias"> 0 </real>
+ <vector2_array name="points" len="4"> 0, 64, 0, 0, 56, 0, 56, 64 </vector2_array>
+ <resource name="script/script"></resource>
+ </resource>
+ <resource type="ConvexPolygonShape2D" path="local://3">
+ <string name="resource/name"> "" </string>
+ <real name="custom_solver_bias"> 0 </real>
+ <vector2_array name="points" len="4"> 0, 64, 0, 0, 56, 0, 56, 64 </vector2_array>
+ <resource name="script/script"></resource>
+ </resource>
+ <resource type="ConvexPolygonShape2D" path="local://4">
+ <string name="resource/name"> "" </string>
+ <real name="custom_solver_bias"> 0 </real>
+ <vector2_array name="points" len="5"> 0, 64, 0, 0, 56, 0, 64, 8, 64, 64 </vector2_array>
+ <resource name="script/script"></resource>
+ </resource>
+ <resource type="ConvexPolygonShape2D" path="local://5">
+ <string name="resource/name"> "" </string>
+ <real name="custom_solver_bias"> 0 </real>
+ <vector2_array name="points" len="4"> 0, 64, 0, 8, 64, 8, 64, 64 </vector2_array>
+ <resource name="script/script"></resource>
+ </resource>
+ <resource type="ConvexPolygonShape2D" path="local://6">
+ <string name="resource/name"> "" </string>
+ <real name="custom_solver_bias"> 0 </real>
+ <vector2_array name="points" len="4"> 0, 64, 0, 8, 64, 8, 64, 64 </vector2_array>
+ <resource name="script/script"></resource>
+ </resource>
+ <resource type="ConvexPolygonShape2D" path="local://7">
+ <string name="resource/name"> "" </string>
+ <real name="custom_solver_bias"> 0 </real>
+ <vector2_array name="points" len="4"> 0, 0, 64, 0, 64, 64, 0, 64 </vector2_array>
+ <resource name="script/script"></resource>
+ </resource>
+ <resource type="ConvexPolygonShape2D" path="local://8">
+ <string name="resource/name"> "" </string>
+ <real name="custom_solver_bias"> 0 </real>
+ <vector2_array name="points" len="4"> 0, 8, 64, 72, 64, 128, 0, 128 </vector2_array>
+ <resource name="script/script"></resource>
+ </resource>
+ <resource type="ConvexPolygonShape2D" path="local://9">
+ <string name="resource/name"> "" </string>
+ <real name="custom_solver_bias"> 0 </real>
+ <vector2_array name="points" len="4"> 0, 64, 0, 0, 56, 0, 56, 64 </vector2_array>
+ <resource name="script/script"></resource>
+ </resource>
+ <main_resource>
+ <string name="resource/name"> "" </string>
+ <string name="0/name"> "floor" </string>
+ <resource name="0/texture" resource_type="Texture" path="res://tiles_demo.png"> </resource>
+ <vector2 name="0/offset"> 0, 0 </vector2>
+ <rect2 name="0/region"> 0, 0, 64, 64 </rect2>
+ <resource name="0/shape" resource_type="ConvexPolygonShape2D" path="local://0"> </resource>
+ <string name="1/name"> "edge" </string>
+ <resource name="1/texture" resource_type="Texture" path="res://tiles_demo.png"> </resource>
+ <vector2 name="1/offset"> 0, 0 </vector2>
+ <rect2 name="1/region"> 64, 0, 64, 64 </rect2>
+ <resource name="1/shape" resource_type="ConvexPolygonShape2D" path="local://1"> </resource>
+ <string name="2/name"> "wall" </string>
+ <resource name="2/texture" resource_type="Texture" path="res://tiles_demo.png"> </resource>
+ <vector2 name="2/offset"> 0, 0 </vector2>
+ <rect2 name="2/region"> 64, 64, 64, 64 </rect2>
+ <resource name="2/shape" resource_type="ConvexPolygonShape2D" path="local://2"> </resource>
+ <string name="3/name"> "wall_deco" </string>
+ <resource name="3/texture" resource_type="Texture" path="res://tiles_demo.png"> </resource>
+ <vector2 name="3/offset"> 0, 0 </vector2>
+ <rect2 name="3/region"> 320, 128, 128, 64 </rect2>
+ <resource name="3/shape" resource_type="ConvexPolygonShape2D" path="local://3"> </resource>
+ <string name="4/name"> "corner" </string>
+ <resource name="4/texture" resource_type="Texture" path="res://tiles_demo.png"> </resource>
+ <vector2 name="4/offset"> 0, 0 </vector2>
+ <rect2 name="4/region"> 64, 128, 64, 64 </rect2>
+ <resource name="4/shape" resource_type="ConvexPolygonShape2D" path="local://4"> </resource>
+ <string name="5/name"> "flowers" </string>
+ <resource name="5/texture" resource_type="Texture" path="res://tiles_demo.png"> </resource>
+ <vector2 name="5/offset"> 0, 0 </vector2>
+ <rect2 name="5/region"> 192, 192, 64, 64 </rect2>
+ <resource name="5/shape" resource_type="ConvexPolygonShape2D" path="local://5"> </resource>
+ <string name="6/name"> "tree_base" </string>
+ <resource name="6/texture" resource_type="Texture" path="res://tiles_demo.png"> </resource>
+ <vector2 name="6/offset"> 0, 0 </vector2>
+ <rect2 name="6/region"> 256, 192, 64, 64 </rect2>
+ <resource name="6/shape" resource_type="ConvexPolygonShape2D" path="local://6"> </resource>
+ <string name="7/name"> "tree_mid" </string>
+ <resource name="7/texture" resource_type="Texture" path="res://tiles_demo.png"> </resource>
+ <vector2 name="7/offset"> 0, 0 </vector2>
+ <rect2 name="7/region"> 256, 128, 64, 64 </rect2>
+ <resource name="7/shape"></resource> <string name="8/name"> "tree_mid 2" </string>
+ <resource name="8/texture" resource_type="Texture" path="res://tiles_demo.png"> </resource>
+ <vector2 name="8/offset"> 0, 0 </vector2>
+ <rect2 name="8/region"> 256, 64, 64, 64 </rect2>
+ <resource name="8/shape"></resource> <string name="9/name"> "tree_top" </string>
+ <resource name="9/texture" resource_type="Texture" path="res://tiles_demo.png"> </resource>
+ <vector2 name="9/offset"> 0, 0 </vector2>
+ <rect2 name="9/region"> 256, 0, 64, 64 </rect2>
+ <resource name="9/shape"></resource> <string name="10/name"> "solid" </string>
+ <resource name="10/texture" resource_type="Texture" path="res://tiles_demo.png"> </resource>
+ <vector2 name="10/offset"> 0, 0 </vector2>
+ <rect2 name="10/region"> 0, 64, 64, 64 </rect2>
+ <resource name="10/shape"></resource> <string name="11/name"> "ceiling" </string>
+ <resource name="11/texture" resource_type="Texture" path="res://tiles_demo.png"> </resource>
+ <vector2 name="11/offset"> 0, 0 </vector2>
+ <rect2 name="11/region"> 384, 64, 64, 64 </rect2>
+ <resource name="11/shape" resource_type="ConvexPolygonShape2D" path="local://7"> </resource>
+ <string name="12/name"> "ramp" </string>
+ <resource name="12/texture" resource_type="Texture" path="res://tiles_demo.png"> </resource>
+ <vector2 name="12/offset"> 0, 0 </vector2>
+ <rect2 name="12/region"> 128, 128, 64, 128 </rect2>
+ <resource name="12/shape" resource_type="ConvexPolygonShape2D" path="local://8"> </resource>
+ <string name="13/name"> "ceiling2wall" </string>
+ <resource name="13/texture" resource_type="Texture" path="res://tiles_demo.png"> </resource>
+ <vector2 name="13/offset"> 0, 0 </vector2>
+ <rect2 name="13/region"> 448, 64, 64, 64 </rect2>
+ <resource name="13/shape" resource_type="ConvexPolygonShape2D" path="local://9"> </resource>
+ <resource name="script/script"></resource>
+ </main_resource>
+</resource_file> \ No newline at end of file
diff --git a/demos/2d/platformer/tileset_edit.xml b/demos/2d/platformer/tileset_edit.xml
new file mode 100644
index 0000000000..4778a8f1e2
--- /dev/null
+++ b/demos/2d/platformer/tileset_edit.xml
@@ -0,0 +1,285 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<resource_file type="PackedScene" subresource_count="12" version="0.99" version_name="Godot Engine v0.99.3037-pre-beta">
+ <ext_resource path="res://tiles_demo.png" type="Texture"></ext_resource>
+ <resource type="ConvexPolygonShape2D" path="local://0">
+ <string name="resource/name"> "" </string>
+ <real name="custom_solver_bias"> 0 </real>
+ <vector2_array name="points" len="4"> 0, 8, 64, 8, 64, 64, 0, 64 </vector2_array>
+ <resource name="script/script"></resource>
+ </resource>
+ <resource type="ConvexPolygonShape2D" path="local://1">
+ <string name="resource/name"> "" </string>
+ <real name="custom_solver_bias"> 0 </real>
+ <vector2_array name="points" len="4"> 0, 64, 0, 8, 56, 8, 56, 64 </vector2_array>
+ <resource name="script/script"></resource>
+ </resource>
+ <resource type="ConvexPolygonShape2D" path="local://2">
+ <string name="resource/name"> "" </string>
+ <real name="custom_solver_bias"> 0 </real>
+ <vector2_array name="points" len="4"> 0, 64, 0, 0, 56, 0, 56, 64 </vector2_array>
+ <resource name="script/script"></resource>
+ </resource>
+ <resource type="ConvexPolygonShape2D" path="local://3">
+ <string name="resource/name"> "" </string>
+ <real name="custom_solver_bias"> 0 </real>
+ <vector2_array name="points" len="4"> 0, 64, 0, 0, 56, 0, 56, 64 </vector2_array>
+ <resource name="script/script"></resource>
+ </resource>
+ <resource type="ConvexPolygonShape2D" path="local://4">
+ <string name="resource/name"> "" </string>
+ <real name="custom_solver_bias"> 0 </real>
+ <vector2_array name="points" len="5"> 0, 64, 0, 0, 56, 0, 64, 8, 64, 64 </vector2_array>
+ <resource name="script/script"></resource>
+ </resource>
+ <resource type="ConvexPolygonShape2D" path="local://5">
+ <string name="resource/name"> "" </string>
+ <real name="custom_solver_bias"> 0 </real>
+ <vector2_array name="points" len="4"> 0, 8, 64, 72, 64, 128, 0, 128 </vector2_array>
+ <resource name="script/script"></resource>
+ </resource>
+ <resource type="ConvexPolygonShape2D" path="local://6">
+ <string name="resource/name"> "" </string>
+ <real name="custom_solver_bias"> 0 </real>
+ <vector2_array name="points" len="4"> 0, 64, 0, 8, 64, 8, 64, 64 </vector2_array>
+ <resource name="script/script"></resource>
+ </resource>
+ <resource type="ConvexPolygonShape2D" path="local://7">
+ <string name="resource/name"> "" </string>
+ <real name="custom_solver_bias"> 0 </real>
+ <vector2_array name="points" len="4"> 0, 64, 0, 8, 64, 8, 64, 64 </vector2_array>
+ <resource name="script/script"></resource>
+ </resource>
+ <resource type="ConvexPolygonShape2D" path="local://8">
+ <string name="resource/name"> "" </string>
+ <real name="custom_solver_bias"> 0 </real>
+ <vector2_array name="points" len="4"> 0, 0, 64, 0, 64, 64, 0, 64 </vector2_array>
+ <resource name="script/script"></resource>
+ </resource>
+ <resource type="ConvexPolygonShape2D" path="local://9">
+ <string name="resource/name"> "" </string>
+ <real name="custom_solver_bias"> 0 </real>
+ <vector2_array name="points" len="4"> 0, 64, 0, 0, 56, 0, 56, 64 </vector2_array>
+ <resource name="script/script"></resource>
+ </resource>
+ <main_resource>
+ <string name="resource/name"> "" </string>
+ <dictionary name="_bundled">
+ <string> "names" </string>
+ <string_array len="86">
+ <string> "Node" </string>
+ <string> "process/process" </string>
+ <string> "process/fixed_process" </string>
+ <string> "process/input" </string>
+ <string> "process/unhandled_input" </string>
+ <string> "process/mode" </string>
+ <string> "script/script" </string>
+ <string> "__meta__" </string>
+ <string> "floor" </string>
+ <string> "Sprite" </string>
+ <string> "visibility/visible" </string>
+ <string> "visibility/toplevel" </string>
+ <string> "visibility/opacity" </string>
+ <string> "visibility/self_opacity" </string>
+ <string> "visibility/on_top" </string>
+ <string> "visibility/blend_mode" </string>
+ <string> "transform/notify" </string>
+ <string> "transform/pos" </string>
+ <string> "transform/rot" </string>
+ <string> "transform/scale" </string>
+ <string> "texture" </string>
+ <string> "centered" </string>
+ <string> "offset" </string>
+ <string> "flip_h" </string>
+ <string> "flip_v" </string>
+ <string> "vframes" </string>
+ <string> "hframes" </string>
+ <string> "frame" </string>
+ <string> "modulate" </string>
+ <string> "region" </string>
+ <string> "region_rect" </string>
+ <string> "collision" </string>
+ <string> "StaticBody2D" </string>
+ <string> "shape_count" </string>
+ <string> "shapes/0/shape" </string>
+ <string> "shapes/0/transform" </string>
+ <string> "simulate_motion" </string>
+ <string> "constant_linear_velocity" </string>
+ <string> "constant_angular_velocity" </string>
+ <string> "CollisionPolygon2D" </string>
+ <string> "build_mode" </string>
+ <string> "polygon" </string>
+ <string> "edge" </string>
+ <string> "wall" </string>
+ <string> "wall_deco" </string>
+ <string> "corner" </string>
+ <string> "ramp" </string>
+ <string> "flowers" </string>
+ <string> "tree_base" </string>
+ <string> "tree_mid" </string>
+ <string> "tree_mid 2" </string>
+ <string> "tree_top" </string>
+ <string> "solid" </string>
+ <string> "ceiling" </string>
+ <string> "ceiling2wall" </string>
+ <string> "help" </string>
+ <string> "Label" </string>
+ <string> "anchor/left" </string>
+ <string> "anchor/top" </string>
+ <string> "anchor/right" </string>
+ <string> "anchor/bottom" </string>
+ <string> "margin/left" </string>
+ <string> "margin/top" </string>
+ <string> "margin/right" </string>
+ <string> "margin/bottom" </string>
+ <string> "hint/tooltip" </string>
+ <string> "focus_neighbour/left" </string>
+ <string> "focus_neighbour/top" </string>
+ <string> "focus_neighbour/right" </string>
+ <string> "focus_neighbour/bottom" </string>
+ <string> "focus/ignore_mouse" </string>
+ <string> "focus/stop_mouse" </string>
+ <string> "size_flags/horizontal" </string>
+ <string> "size_flags/vertical" </string>
+ <string> "size_flags/stretch_ratio" </string>
+ <string> "range/min" </string>
+ <string> "range/max" </string>
+ <string> "range/step" </string>
+ <string> "range/page" </string>
+ <string> "range/value" </string>
+ <string> "range/exp_edit" </string>
+ <string> "rounded_values" </string>
+ <string> "text" </string>
+ <string> "align" </string>
+ <string> "valign" </string>
+ <string> "autowrap" </string>
+ </string_array>
+ <string> "version" </string>
+ <int> 1 </int>
+ <string> "conn_count" </string>
+ <int> 0 </int>
+ <string> "node_count" </string>
+ <int> 36 </int>
+ <string> "variants" </string>
+ <array len="66">
+ <bool> False </bool>
+ <int> 0 </int>
+ <resource name=""></resource> <dictionary>
+ <string> "__editor_plugin_states__" </string>
+ <dictionary>
+ <string> "2D" </string>
+ <dictionary>
+ <string> "zoom" </string>
+ <real> 3.09087 </real>
+ <string> "ofs" </string>
+ <vector2> -2.41578, -57.0874 </vector2>
+ </dictionary>
+ <string> "3D" </string>
+ <dictionary>
+ <string> "zfar" </string>
+ <real> 500 </real>
+ <string> "fov" </string>
+ <real> 45 </real>
+ <string> "window_mode" </string>
+ <int> 0 </int>
+ <string> "window_0" </string>
+ <dictionary>
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "default_light" </string>
+ <bool> True </bool>
+ <string> "x_rot" </string>
+ <real> 0.337 </real>
+ <string> "y_rot" </string>
+ <real> -0.575 </real>
+ <string> "show_grid" </string>
+ <bool> True </bool>
+ <string> "show_origin" </string>
+ <bool> True </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ <string> "znear" </string>
+ <real> 0.1 </real>
+ </dictionary>
+ </dictionary>
+ <string> "__editor_run_settings__" </string>
+ <dictionary>
+ <string> "custom_args" </string>
+ <string> "-l $scene" </string>
+ <string> "run_mode" </string>
+ <int> 0 </int>
+ </dictionary>
+ <string> "__editor_plugin_screen__" </string>
+ <string> "2D" </string>
+ </dictionary>
+ <bool> True </bool>
+ <real> 1 </real>
+ <vector2> 0, 0 </vector2>
+ <real> 0 </real>
+ <vector2> 1, 1 </vector2>
+ <resource resource_type="Texture" path="res://tiles_demo.png"> </resource>
+ <int> 1 </int>
+ <color> 1, 1, 1, 1 </color>
+ <rect2> 0, 0, 64, 64 </rect2>
+ <resource resource_type="ConvexPolygonShape2D" path="local://0"> </resource>
+ <matrix32> 1, -0, 0, 1, 0, 0 </matrix32>
+ <int> 2 </int>
+ <vector2_array len="4"> 64, 8, 64, 64, 0, 64, 0, 8 </vector2_array>
+ <vector2> 64, 0 </vector2>
+ <rect2> 64, 0, 64, 64 </rect2>
+ <resource resource_type="ConvexPolygonShape2D" path="local://1"> </resource>
+ <vector2_array len="4"> 0, 8, 56, 8, 56, 64, 0, 64 </vector2_array>
+ <vector2> 64, 64 </vector2>
+ <rect2> 64, 64, 64, 64 </rect2>
+ <resource resource_type="ConvexPolygonShape2D" path="local://2"> </resource>
+ <vector2_array len="4"> 0, 0, 56, 0, 56, 64, 0, 64 </vector2_array>
+ <vector2> 64, 128 </vector2>
+ <rect2> 320, 128, 128, 64 </rect2>
+ <resource resource_type="ConvexPolygonShape2D" path="local://3"> </resource>
+ <vector2> 64, 192 </vector2>
+ <rect2> 64, 128, 64, 64 </rect2>
+ <resource resource_type="ConvexPolygonShape2D" path="local://4"> </resource>
+ <vector2_array len="5"> 0, 0, 56, 0, 64, 8, 64, 64, 0, 64 </vector2_array>
+ <vector2> 256, 192 </vector2>
+ <rect2> 128, 128, 64, 128 </rect2>
+ <resource resource_type="ConvexPolygonShape2D" path="local://5"> </resource>
+ <vector2_array len="4"> 0, 8, 64, 72, 64, 128, 0, 128 </vector2_array>
+ <vector2> 128, 192 </vector2>
+ <rect2> 192, 192, 64, 64 </rect2>
+ <resource resource_type="ConvexPolygonShape2D" path="local://6"> </resource>
+ <vector2_array len="4"> 0, 64, 64, 64, 64, 8, 0, 8 </vector2_array>
+ <vector2> 192, 192 </vector2>
+ <rect2> 256, 192, 64, 64 </rect2>
+ <resource resource_type="ConvexPolygonShape2D" path="local://7"> </resource>
+ <vector2> 192, 128 </vector2>
+ <rect2> 256, 128, 64, 64 </rect2>
+ <vector2> 192, 64 </vector2>
+ <rect2> 256, 64, 64, 64 </rect2>
+ <vector2> 192, 0 </vector2>
+ <rect2> 256, 0, 64, 64 </rect2>
+ <vector2> 0, 64 </vector2>
+ <rect2> 0, 64, 64, 64 </rect2>
+ <vector2> 0, 128 </vector2>
+ <rect2> 384, 64, 64, 64 </rect2>
+ <resource resource_type="ConvexPolygonShape2D" path="local://8"> </resource>
+ <vector2_array len="4"> 64, 0, 64, 64, 0, 64, 0, 0 </vector2_array>
+ <vector2> 0, 192 </vector2>
+ <rect2> 448, 64, 64, 64 </rect2>
+ <resource resource_type="ConvexPolygonShape2D" path="local://9"> </resource>
+ <real> 296 </real>
+ <real> 8 </real>
+ <real> 596 </real>
+ <real> 125 </real>
+ <string> "" </string>
+ <node_path> "" </node_path>
+ <real> 14 </real>
+ <string> "This scene serves as a tool for editing the tileset.&#10;Nodes (sprites) and their respective collisions&#10;are edited here. &#10;&#10;To create a tileset from this, a &quot;TileSet&quot; resoucre &#10;must be created. this resource adds a menu which&#10;allows generating of the tileset data from the scene.&#10;or optionally merge it if one already exists (by looking&#10;at identical tile names).&#10;&#10;Finally, the saved tileset resource (tileset.xml in this&#10; case), can be opened to be used into a TileMap node&#10; for editing a tile map.&#10;" </string>
+ </array>
+ <string> "nodes" </string>
+ <int_array len="1906"> -1, -1, 0, 0, -1, 7, 1, 0, 2, 0, 3, 0, 4, 0, 5, 1, 6, 2, 7, 3, 0, 0, 0, 9, 8, -1, 27, 1, 0, 2, 0, 3, 0, 4, 0, 5, 1, 10, 4, 11, 0, 12, 5, 13, 5, 14, 4, 15, 1, 16, 0, 17, 6, 18, 7, 19, 8, 20, 9, 21, 0, 22, 6, 23, 0, 24, 0, 25, 10, 26, 10, 27, 1, 28, 11, 29, 4, 30, 12, 6, 2, 0, 1, 0, 32, 31, -1, 22, 1, 0, 2, 0, 3, 0, 4, 0, 5, 1, 10, 4, 11, 0, 12, 5, 13, 5, 14, 4, 15, 1, 16, 4, 17, 6, 18, 7, 19, 8, 33, 10, 34, 13, 35, 14, 36, 0, 37, 6, 38, 7, 6, 2, 0, 2, 0, 39, 39, -1, 18, 1, 0, 2, 0, 3, 0, 4, 0, 5, 1, 10, 4, 11, 0, 12, 5, 13, 5, 14, 4, 15, 1, 16, 4, 17, 6, 18, 7, 19, 8, 40, 15, 41, 16, 6, 2, 0, 0, 0, 9, 42, -1, 27, 1, 0, 2, 0, 3, 0, 4, 0, 5, 1, 10, 4, 11, 0, 12, 5, 13, 5, 14, 4, 15, 1, 16, 0, 17, 17, 18, 7, 19, 8, 20, 9, 21, 0, 22, 6, 23, 0, 24, 0, 25, 10, 26, 10, 27, 1, 28, 11, 29, 4, 30, 18, 6, 2, 0, 4, 0, 32, 31, -1, 22, 1, 0, 2, 0, 3, 0, 4, 0, 5, 1, 10, 4, 11, 0, 12, 5, 13, 5, 14, 4, 15, 1, 16, 4, 17, 6, 18, 7, 19, 8, 33, 10, 34, 19, 35, 14, 36, 0, 37, 6, 38, 7, 6, 2, 0, 5, 0, 39, 39, -1, 18, 1, 0, 2, 0, 3, 0, 4, 0, 5, 1, 10, 4, 11, 0, 12, 5, 13, 5, 14, 4, 15, 1, 16, 4, 17, 6, 18, 7, 19, 8, 40, 15, 41, 20, 6, 2, 0, 0, 0, 9, 43, -1, 27, 1, 0, 2, 0, 3, 0, 4, 0, 5, 1, 10, 4, 11, 0, 12, 5, 13, 5, 14, 4, 15, 1, 16, 0, 17, 21, 18, 7, 19, 8, 20, 9, 21, 0, 22, 6, 23, 0, 24, 0, 25, 10, 26, 10, 27, 1, 28, 11, 29, 4, 30, 22, 6, 2, 0, 7, 0, 32, 31, -1, 22, 1, 0, 2, 0, 3, 0, 4, 0, 5, 1, 10, 4, 11, 0, 12, 5, 13, 5, 14, 4, 15, 1, 16, 4, 17, 6, 18, 7, 19, 8, 33, 10, 34, 23, 35, 14, 36, 0, 37, 6, 38, 7, 6, 2, 0, 8, 0, 39, 39, -1, 18, 1, 0, 2, 0, 3, 0, 4, 0, 5, 1, 10, 4, 11, 0, 12, 5, 13, 5, 14, 4, 15, 1, 16, 4, 17, 6, 18, 7, 19, 8, 40, 15, 41, 24, 6, 2, 0, 0, 0, 9, 44, -1, 27, 1, 0, 2, 0, 3, 0, 4, 0, 5, 1, 10, 4, 11, 0, 12, 5, 13, 5, 14, 4, 15, 1, 16, 0, 17, 25, 18, 7, 19, 8, 20, 9, 21, 0, 22, 6, 23, 0, 24, 0, 25, 10, 26, 10, 27, 1, 28, 11, 29, 4, 30, 26, 6, 2, 0, 10, 0, 32, 31, -1, 22, 1, 0, 2, 0, 3, 0, 4, 0, 5, 1, 10, 4, 11, 0, 12, 5, 13, 5, 14, 4, 15, 1, 16, 4, 17, 6, 18, 7, 19, 8, 33, 10, 34, 27, 35, 14, 36, 0, 37, 6, 38, 7, 6, 2, 0, 11, 0, 39, 39, -1, 18, 1, 0, 2, 0, 3, 0, 4, 0, 5, 1, 10, 4, 11, 0, 12, 5, 13, 5, 14, 4, 15, 1, 16, 4, 17, 6, 18, 7, 19, 8, 40, 15, 41, 24, 6, 2, 0, 0, 0, 9, 45, -1, 27, 1, 0, 2, 0, 3, 0, 4, 0, 5, 1, 10, 4, 11, 0, 12, 5, 13, 5, 14, 4, 15, 1, 16, 0, 17, 28, 18, 7, 19, 8, 20, 9, 21, 0, 22, 6, 23, 0, 24, 0, 25, 10, 26, 10, 27, 1, 28, 11, 29, 4, 30, 29, 6, 2, 0, 13, 0, 32, 31, -1, 22, 1, 0, 2, 0, 3, 0, 4, 0, 5, 1, 10, 4, 11, 0, 12, 5, 13, 5, 14, 4, 15, 1, 16, 4, 17, 6, 18, 7, 19, 8, 33, 10, 34, 30, 35, 14, 36, 0, 37, 6, 38, 7, 6, 2, 0, 14, 0, 39, 39, -1, 18, 1, 0, 2, 0, 3, 0, 4, 0, 5, 1, 10, 4, 11, 0, 12, 5, 13, 5, 14, 4, 15, 1, 16, 4, 17, 6, 18, 7, 19, 8, 40, 15, 41, 31, 6, 2, 0, 0, 0, 9, 46, -1, 27, 1, 0, 2, 0, 3, 0, 4, 0, 5, 1, 10, 4, 11, 0, 12, 5, 13, 5, 14, 4, 15, 1, 16, 0, 17, 32, 18, 7, 19, 8, 20, 9, 21, 0, 22, 6, 23, 0, 24, 0, 25, 10, 26, 10, 27, 1, 28, 11, 29, 4, 30, 33, 6, 2, 0, 16, 0, 32, 31, -1, 22, 1, 0, 2, 0, 3, 0, 4, 0, 5, 1, 10, 4, 11, 0, 12, 5, 13, 5, 14, 4, 15, 1, 16, 4, 17, 6, 18, 7, 19, 8, 33, 10, 34, 34, 35, 14, 36, 0, 37, 6, 38, 7, 6, 2, 0, 17, 0, 39, 39, -1, 18, 1, 0, 2, 0, 3, 0, 4, 0, 5, 1, 10, 4, 11, 0, 12, 5, 13, 5, 14, 4, 15, 1, 16, 4, 17, 6, 18, 7, 19, 8, 40, 15, 41, 35, 6, 2, 0, 0, 0, 9, 47, -1, 27, 1, 0, 2, 0, 3, 0, 4, 0, 5, 1, 10, 4, 11, 0, 12, 5, 13, 5, 14, 4, 15, 1, 16, 0, 17, 36, 18, 7, 19, 8, 20, 9, 21, 0, 22, 6, 23, 0, 24, 0, 25, 10, 26, 10, 27, 1, 28, 11, 29, 4, 30, 37, 6, 2, 0, 19, 0, 32, 31, -1, 22, 1, 0, 2, 0, 3, 0, 4, 0, 5, 1, 10, 4, 11, 0, 12, 5, 13, 5, 14, 4, 15, 1, 16, 4, 17, 6, 18, 7, 19, 8, 33, 10, 34, 38, 35, 14, 36, 0, 37, 6, 38, 7, 6, 2, 0, 20, 0, 39, 39, -1, 18, 1, 0, 2, 0, 3, 0, 4, 0, 5, 1, 10, 4, 11, 0, 12, 5, 13, 5, 14, 4, 15, 1, 16, 4, 17, 6, 18, 7, 19, 8, 40, 15, 41, 39, 6, 2, 0, 0, 0, 9, 48, -1, 27, 1, 0, 2, 0, 3, 0, 4, 0, 5, 1, 10, 4, 11, 0, 12, 5, 13, 5, 14, 4, 15, 1, 16, 0, 17, 40, 18, 7, 19, 8, 20, 9, 21, 0, 22, 6, 23, 0, 24, 0, 25, 10, 26, 10, 27, 1, 28, 11, 29, 4, 30, 41, 6, 2, 0, 22, 0, 32, 31, -1, 22, 1, 0, 2, 0, 3, 0, 4, 0, 5, 1, 10, 4, 11, 0, 12, 5, 13, 5, 14, 4, 15, 1, 16, 4, 17, 6, 18, 7, 19, 8, 33, 10, 34, 42, 35, 14, 36, 0, 37, 6, 38, 7, 6, 2, 0, 23, 0, 39, 39, -1, 18, 1, 0, 2, 0, 3, 0, 4, 0, 5, 1, 10, 4, 11, 0, 12, 5, 13, 5, 14, 4, 15, 1, 16, 4, 17, 6, 18, 7, 19, 8, 40, 15, 41, 39, 6, 2, 0, 0, 0, 9, 49, -1, 27, 1, 0, 2, 0, 3, 0, 4, 0, 5, 1, 10, 4, 11, 0, 12, 5, 13, 5, 14, 4, 15, 1, 16, 0, 17, 43, 18, 7, 19, 8, 20, 9, 21, 0, 22, 6, 23, 0, 24, 0, 25, 10, 26, 10, 27, 1, 28, 11, 29, 4, 30, 44, 6, 2, 0, 0, 0, 9, 50, -1, 27, 1, 0, 2, 0, 3, 0, 4, 0, 5, 1, 10, 4, 11, 0, 12, 5, 13, 5, 14, 4, 15, 1, 16, 0, 17, 45, 18, 7, 19, 8, 20, 9, 21, 0, 22, 6, 23, 0, 24, 0, 25, 10, 26, 10, 27, 1, 28, 11, 29, 4, 30, 46, 6, 2, 0, 0, 0, 9, 51, -1, 27, 1, 0, 2, 0, 3, 0, 4, 0, 5, 1, 10, 4, 11, 0, 12, 5, 13, 5, 14, 4, 15, 1, 16, 0, 17, 47, 18, 7, 19, 8, 20, 9, 21, 0, 22, 6, 23, 0, 24, 0, 25, 10, 26, 10, 27, 1, 28, 11, 29, 4, 30, 48, 6, 2, 0, 0, 0, 9, 52, -1, 27, 1, 0, 2, 0, 3, 0, 4, 0, 5, 1, 10, 4, 11, 0, 12, 5, 13, 5, 14, 4, 15, 1, 16, 0, 17, 49, 18, 7, 19, 8, 20, 9, 21, 0, 22, 6, 23, 0, 24, 0, 25, 10, 26, 10, 27, 1, 28, 11, 29, 4, 30, 50, 6, 2, 0, 0, 0, 9, 53, -1, 27, 1, 0, 2, 0, 3, 0, 4, 0, 5, 1, 10, 4, 11, 0, 12, 5, 13, 5, 14, 4, 15, 1, 16, 0, 17, 51, 18, 7, 19, 8, 20, 9, 21, 0, 22, 6, 23, 0, 24, 0, 25, 10, 26, 10, 27, 1, 28, 11, 29, 4, 30, 52, 6, 2, 0, 29, 0, 32, 31, -1, 22, 1, 0, 2, 0, 3, 0, 4, 0, 5, 1, 10, 4, 11, 0, 12, 5, 13, 5, 14, 4, 15, 1, 16, 4, 17, 6, 18, 7, 19, 8, 33, 10, 34, 53, 35, 14, 36, 0, 37, 6, 38, 7, 6, 2, 0, 30, 0, 39, 39, -1, 18, 1, 0, 2, 0, 3, 0, 4, 0, 5, 1, 10, 4, 11, 0, 12, 5, 13, 5, 14, 4, 15, 1, 16, 4, 17, 6, 18, 7, 19, 8, 40, 15, 41, 54, 6, 2, 0, 0, 0, 9, 54, -1, 27, 1, 0, 2, 0, 3, 0, 4, 0, 5, 1, 10, 4, 11, 0, 12, 5, 13, 5, 14, 4, 15, 1, 16, 0, 17, 55, 18, 7, 19, 8, 20, 9, 21, 0, 22, 6, 23, 0, 24, 0, 25, 10, 26, 10, 27, 1, 28, 11, 29, 4, 30, 56, 6, 2, 0, 32, 0, 32, 31, -1, 22, 1, 0, 2, 0, 3, 0, 4, 0, 5, 1, 10, 4, 11, 0, 12, 5, 13, 5, 14, 4, 15, 1, 16, 4, 17, 6, 18, 7, 19, 8, 33, 10, 34, 57, 35, 14, 36, 0, 37, 6, 38, 7, 6, 2, 0, 33, 0, 39, 39, -1, 18, 1, 0, 2, 0, 3, 0, 4, 0, 5, 1, 10, 4, 11, 0, 12, 5, 13, 5, 14, 4, 15, 1, 16, 4, 17, 6, 18, 7, 19, 8, 40, 15, 41, 24, 6, 2, 0, 0, 0, 56, 55, -1, 42, 1, 0, 2, 0, 3, 0, 4, 0, 5, 1, 10, 4, 11, 0, 12, 5, 13, 5, 14, 4, 15, 1, 16, 0, 57, 1, 58, 1, 59, 1, 60, 1, 61, 58, 62, 59, 63, 60, 64, 61, 65, 62, 66, 63, 67, 63, 68, 63, 69, 63, 70, 4, 71, 4, 72, 15, 73, 1, 74, 5, 75, 7, 76, 64, 77, 5, 78, 64, 79, 7, 80, 0, 81, 0, 82, 65, 83, 1, 84, 1, 85, 0, 6, 2, 0 </int_array>
+ <string> "conns" </string>
+ <int_array len="0"> </int_array>
+ </dictionary>
+ <resource name="script/script"></resource>
+ </main_resource>
+</resource_file> \ No newline at end of file
diff --git a/demos/2d/platformer/types.cache b/demos/2d/platformer/types.cache
new file mode 100644
index 0000000000..a215e5f137
--- /dev/null
+++ b/demos/2d/platformer/types.cache
@@ -0,0 +1,64 @@
+res://tileset.xml
+TileSet
+res://sound_shoot.wav
+Sample
+res://sound_hit.wav
+Sample
+res://scroll_bg_cloud_2.png
+Texture
+res://enemy.png
+Texture
+res://bullet.gd
+GDScript
+res://scroll_bg_cloud_3.png
+Texture
+res://coin.gd
+GDScript
+res://stage.xml
+PackedScene
+res://moving_platform.xml
+PackedScene
+res://bullet.png
+Texture
+res://player.xml
+PackedScene
+res://parallax_bg.xml
+PackedScene
+res://music.ogg
+AudioStreamOGGVorbis
+res://coin.png
+Texture
+res://sound_explode.wav
+Sample
+res://sound_coin.wav
+Sample
+res://robot_demo.png
+Texture
+res://moving_platform.gd
+GDScript
+res://enemy.xml
+PackedScene
+res://tileset_edit.xml
+PackedScene
+res://scroll_bg_fg_1.png
+Texture
+res://player.gd
+GDScript
+res://scroll_bg_fg_2.png
+Texture
+res://moving_platform.png
+Texture
+res://enemy.gd
+GDScript
+res://bullet.xml
+PackedScene
+res://tiles_demo.png
+Texture
+res://sound_jump.wav
+Sample
+res://scroll_bg_sky.png
+Texture
+res://scroll_bg_cloud_1.png
+Texture
+res://coin.xml
+PackedScene
diff --git a/demos/2d/pong/ball.png b/demos/2d/pong/ball.png
new file mode 100644
index 0000000000..c0f6da4f6f
--- /dev/null
+++ b/demos/2d/pong/ball.png
Binary files differ
diff --git a/demos/2d/pong/engine.cfg b/demos/2d/pong/engine.cfg
new file mode 100644
index 0000000000..9e76449bcf
--- /dev/null
+++ b/demos/2d/pong/engine.cfg
@@ -0,0 +1,22 @@
+[application]
+
+name="Pong"
+main_scene="pong.xml"
+icon="res://icon.png"
+
+[display]
+
+width=640
+height=400
+stretch_2d=true
+
+[input]
+
+left_move_up=[key(A)]
+left_move_down=[key(Z)]
+right_move_up=[key(Up)]
+right_move_down=[key(Down)]
+
+[render]
+
+default_clear_color=#ff000000
diff --git a/demos/2d/pong/icon.png b/demos/2d/pong/icon.png
new file mode 100644
index 0000000000..eab34de53d
--- /dev/null
+++ b/demos/2d/pong/icon.png
Binary files differ
diff --git a/demos/2d/pong/left_pallete.png b/demos/2d/pong/left_pallete.png
new file mode 100644
index 0000000000..f0d4b549d0
--- /dev/null
+++ b/demos/2d/pong/left_pallete.png
Binary files differ
diff --git a/demos/2d/pong/pong.gd b/demos/2d/pong/pong.gd
new file mode 100644
index 0000000000..bfffdcf0d8
--- /dev/null
+++ b/demos/2d/pong/pong.gd
@@ -0,0 +1,73 @@
+
+extends Node2D
+
+# member variables here, example:
+# var a=2
+# var b="textvar"
+const INITIAL_BALL_SPEED = 80
+var ball_speed = INITIAL_BALL_SPEED
+var screen_size = Vector2(640,400)
+#default ball direction
+var direction = Vector2(-1,0)
+var pad_size = Vector2(8,32)
+const PAD_SPEED = 150
+
+
+func _process(delta):
+
+
+ # get ball positio and pad rectangles
+ var ball_pos = get_node("ball").get_pos()
+ var left_rect = Rect2( get_node("left").get_pos() - pad_size*0.5, pad_size )
+ var right_rect = Rect2( get_node("right").get_pos() - pad_size*0.5, pad_size )
+
+ #integrate new ball postion
+ ball_pos+=direction*ball_speed*delta
+
+ #flip when touching roof or floor
+ if ( (ball_pos.y<0 and direction.y <0) or (ball_pos.y>screen_size.y and direction.y>0)):
+ direction.y = -direction.y
+
+ #flip, change direction and increase speed when touching pads
+ if ( (left_rect.has_point(ball_pos) and direction.x < 0) or (right_rect.has_point(ball_pos) and direction.x > 0)):
+ direction.x=-direction.x
+ ball_speed*=1.1
+ direction.y=randf()*2.0-1
+ direction = direction.normalized()
+
+ #check gameover
+ if (ball_pos.x<0 or ball_pos.x>screen_size.x):
+ ball_pos=screen_size*0.5
+ ball_speed=INITIAL_BALL_SPEED
+ direction=Vector2(-1,0)
+
+
+ get_node("ball").set_pos(ball_pos)
+
+ #move left pad
+ var left_pos = get_node("left").get_pos()
+
+ if (left_pos.y > 0 and Input.is_action_pressed("left_move_up")):
+ left_pos.y+=-PAD_SPEED*delta
+ if (left_pos.y < screen_size.y and Input.is_action_pressed("left_move_down")):
+ left_pos.y+=PAD_SPEED*delta
+
+ get_node("left").set_pos(left_pos)
+
+ #move right pad
+ var right_pos = get_node("right").get_pos()
+
+ if (right_pos.y > 0 and Input.is_action_pressed("right_move_up")):
+ right_pos.y+=-PAD_SPEED*delta
+ if (right_pos.y < screen_size.y and Input.is_action_pressed("right_move_down")):
+ right_pos.y+=PAD_SPEED*delta
+
+ get_node("right").set_pos(right_pos)
+
+
+
+func _ready():
+ screen_size = get_viewport_rect().size # get actual size
+ pad_size = get_node("left").get_texture().get_size()
+ set_process(true)
+
diff --git a/demos/2d/pong/pong.xml b/demos/2d/pong/pong.xml
new file mode 100644
index 0000000000..cf47a8db9f
--- /dev/null
+++ b/demos/2d/pong/pong.xml
@@ -0,0 +1,183 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<resource_file type="PackedScene" subresource_count="6" version="0.99" version_name="Godot Engine v0.99.3735-pre-beta">
+ <ext_resource path="res://pong.*" type="GDScript"></ext_resource>
+ <ext_resource path="res://separator.*" type="ImageTexture"></ext_resource>
+ <ext_resource path="res://left_pallete.*" type="ImageTexture"></ext_resource>
+ <ext_resource path="res://right_pallete.*" type="ImageTexture"></ext_resource>
+ <ext_resource path="res://ball.*" type="ImageTexture"></ext_resource>
+ <main_resource>
+ <dictionary name="_bundled" shared="false">
+ <string> "names" </string>
+ <string_array len="27">
+ <string> "game" </string>
+ <string> "Node2D" </string>
+ <string> "visibility/visible" </string>
+ <string> "visibility/opacity" </string>
+ <string> "visibility/self_opacity" </string>
+ <string> "visibility/on_top" </string>
+ <string> "transform/pos" </string>
+ <string> "transform/rot" </string>
+ <string> "transform/scale" </string>
+ <string> "script/script" </string>
+ <string> "__meta__" </string>
+ <string> "left" </string>
+ <string> "Sprite" </string>
+ <string> "texture" </string>
+ <string> "centered" </string>
+ <string> "offset" </string>
+ <string> "flip_h" </string>
+ <string> "flip_v" </string>
+ <string> "vframes" </string>
+ <string> "hframes" </string>
+ <string> "frame" </string>
+ <string> "modulate" </string>
+ <string> "region" </string>
+ <string> "region_rect" </string>
+ <string> "right" </string>
+ <string> "separator" </string>
+ <string> "ball" </string>
+ </string_array>
+ <string> "version" </string>
+ <int> 1 </int>
+ <string> "conn_count" </string>
+ <int> 0 </int>
+ <string> "node_count" </string>
+ <int> 5 </int>
+ <string> "variants" </string>
+ <array len="20" shared="false">
+ <bool> True </bool>
+ <real> 1 </real>
+ <vector2> 0, 0 </vector2>
+ <real> 0 </real>
+ <vector2> 1, 1 </vector2>
+ <resource resource_type="GDScript" path="res://pong.*"> </resource>
+ <dictionary shared="false">
+ <string> "__editor_plugin_states__" </string>
+ <dictionary shared="false">
+ <string> "Script" </string>
+ <dictionary shared="false">
+ <string> "current" </string>
+ <int> 0 </int>
+ <string> "sources" </string>
+ <array len="1" shared="false">
+ <string> "res://pong.gd" </string>
+ </array>
+ </dictionary>
+ <string> "2D" </string>
+ <dictionary shared="false">
+ <string> "pixel_snap" </string>
+ <bool> True </bool>
+ <string> "zoom" </string>
+ <real> 1.108033 </real>
+ <string> "ofs" </string>
+ <vector2> -54.59, -36.0052 </vector2>
+ </dictionary>
+ <string> "3D" </string>
+ <dictionary shared="false">
+ <string> "zfar" </string>
+ <real> 500 </real>
+ <string> "fov" </string>
+ <real> 45 </real>
+ <string> "viewports" </string>
+ <array len="4" shared="false">
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ </array>
+ <string> "viewport_mode" </string>
+ <int> 1 </int>
+ <string> "default_light" </string>
+ <bool> True </bool>
+ <string> "show_grid" </string>
+ <bool> True </bool>
+ <string> "show_origin" </string>
+ <bool> True </bool>
+ <string> "znear" </string>
+ <real> 0.1 </real>
+ </dictionary>
+ </dictionary>
+ <string> "__editor_run_settings__" </string>
+ <dictionary shared="false">
+ <string> "custom_args" </string>
+ <string> "-l $scene" </string>
+ <string> "run_mode" </string>
+ <int> 0 </int>
+ </dictionary>
+ <string> "__editor_plugin_screen__" </string>
+ <string> "Script" </string>
+ </dictionary>
+ <vector2> 67.6875, 183.208 </vector2>
+ <resource resource_type="ImageTexture" path="res://left_pallete.*"> </resource>
+ <bool> False </bool>
+ <int> 1 </int>
+ <int> 0 </int>
+ <color> 1, 1, 1, 1 </color>
+ <rect2> 0, 0, 0, 0 </rect2>
+ <vector2> 577, 187 </vector2>
+ <resource resource_type="ImageTexture" path="res://right_pallete.*"> </resource>
+ <vector2> 320, 200 </vector2>
+ <resource resource_type="ImageTexture" path="res://separator.*"> </resource>
+ <vector2> 320.283, 188 </vector2>
+ <resource resource_type="ImageTexture" path="res://ball.*"> </resource>
+ </array>
+ <string> "nodes" </string>
+ <int_array len="197"> -1, -1, 1, 0, -1, 9, 2, 0, 3, 1, 4, 1, 5, 0, 6, 2, 7, 3, 8, 4, 9, 5, 10, 6, 0, 0, 0, 12, 11, -1, 18, 2, 0, 3, 1, 4, 1, 5, 0, 6, 7, 7, 3, 8, 4, 13, 8, 14, 0, 15, 2, 16, 9, 17, 9, 18, 10, 19, 10, 20, 11, 21, 12, 22, 9, 23, 13, 0, 0, 0, 12, 24, -1, 18, 2, 0, 3, 1, 4, 1, 5, 0, 6, 14, 7, 3, 8, 4, 13, 15, 14, 0, 15, 2, 16, 9, 17, 9, 18, 10, 19, 10, 20, 11, 21, 12, 22, 9, 23, 13, 0, 0, 0, 12, 25, -1, 18, 2, 0, 3, 1, 4, 1, 5, 0, 6, 16, 7, 3, 8, 4, 13, 17, 14, 0, 15, 2, 16, 9, 17, 9, 18, 10, 19, 10, 20, 11, 21, 12, 22, 9, 23, 13, 0, 0, 0, 12, 26, -1, 18, 2, 0, 3, 1, 4, 1, 5, 0, 6, 18, 7, 3, 8, 4, 13, 19, 14, 0, 15, 2, 16, 9, 17, 9, 18, 10, 19, 10, 20, 11, 21, 12, 22, 9, 23, 13, 0 </int_array>
+ <string> "conns" </string>
+ <int_array len="0"> </int_array>
+ </dictionary>
+
+ </main_resource>
+</resource_file> \ No newline at end of file
diff --git a/demos/2d/pong/right_pallete.png b/demos/2d/pong/right_pallete.png
new file mode 100644
index 0000000000..3cdb673a5b
--- /dev/null
+++ b/demos/2d/pong/right_pallete.png
Binary files differ
diff --git a/demos/2d/pong/separator.png b/demos/2d/pong/separator.png
new file mode 100644
index 0000000000..56874a59cb
--- /dev/null
+++ b/demos/2d/pong/separator.png
Binary files differ
diff --git a/demos/2d/rubegoldberg/art/bowling_ball.png b/demos/2d/rubegoldberg/art/bowling_ball.png
new file mode 100644
index 0000000000..9443cda882
--- /dev/null
+++ b/demos/2d/rubegoldberg/art/bowling_ball.png
Binary files differ
diff --git a/demos/2d/rubegoldberg/art/box.png b/demos/2d/rubegoldberg/art/box.png
new file mode 100644
index 0000000000..9edcae5909
--- /dev/null
+++ b/demos/2d/rubegoldberg/art/box.png
Binary files differ
diff --git a/demos/2d/rubegoldberg/art/domino.png b/demos/2d/rubegoldberg/art/domino.png
new file mode 100644
index 0000000000..111b936063
--- /dev/null
+++ b/demos/2d/rubegoldberg/art/domino.png
Binary files differ
diff --git a/demos/2d/rubegoldberg/art/platform.png b/demos/2d/rubegoldberg/art/platform.png
new file mode 100644
index 0000000000..c18ddf2b1d
--- /dev/null
+++ b/demos/2d/rubegoldberg/art/platform.png
Binary files differ
diff --git a/demos/2d/rubegoldberg/art/seesaw_base.png b/demos/2d/rubegoldberg/art/seesaw_base.png
new file mode 100644
index 0000000000..ba359c6ce8
--- /dev/null
+++ b/demos/2d/rubegoldberg/art/seesaw_base.png
Binary files differ
diff --git a/demos/2d/rubegoldberg/art/seesaw_top.png b/demos/2d/rubegoldberg/art/seesaw_top.png
new file mode 100644
index 0000000000..7c3fa83b12
--- /dev/null
+++ b/demos/2d/rubegoldberg/art/seesaw_top.png
Binary files differ
diff --git a/demos/2d/rubegoldberg/ball.xml b/demos/2d/rubegoldberg/ball.xml
new file mode 100644
index 0000000000..625438eb75
--- /dev/null
+++ b/demos/2d/rubegoldberg/ball.xml
@@ -0,0 +1,191 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<resource_file type="PackedScene" subresource_count="3" version="0.99" version_name="Godot Engine v0.99.3656-pre-beta">
+ <ext_resource path="res://art/bowling_ball.*" type="ImageTexture"></ext_resource>
+ <resource type="CircleShape2D" path="local://1">
+ <string name="resource/name"> "" </string>
+ <real name="custom_solver_bias"> 0 </real>
+ <real name="radius"> 32 </real>
+ <resource name="script/script"></resource>
+ </resource>
+ <main_resource>
+ <string name="resource/name"> "" </string>
+ <dictionary name="_bundled" shared="false">
+ <string> "names" </string>
+ <string_array len="48">
+ <string> "Ball" </string>
+ <string> "RigidBody2D" </string>
+ <string> "process/process" </string>
+ <string> "process/fixed_process" </string>
+ <string> "process/input" </string>
+ <string> "process/unhandled_input" </string>
+ <string> "process/pause_mode" </string>
+ <string> "visibility/visible" </string>
+ <string> "visibility/opacity" </string>
+ <string> "visibility/self_opacity" </string>
+ <string> "visibility/on_top" </string>
+ <string> "visibility/blend_mode" </string>
+ <string> "transform/pos" </string>
+ <string> "transform/rot" </string>
+ <string> "transform/scale" </string>
+ <string> "shape_count" </string>
+ <string> "shapes/0/shape" </string>
+ <string> "shapes/0/transform" </string>
+ <string> "shapes/0/trigger" </string>
+ <string> "mode" </string>
+ <string> "mass" </string>
+ <string> "friction" </string>
+ <string> "bounce" </string>
+ <string> "custom_integrator" </string>
+ <string> "continuous_cd" </string>
+ <string> "contacts_reported" </string>
+ <string> "contact_monitor" </string>
+ <string> "active" </string>
+ <string> "can_sleep" </string>
+ <string> "velocity/linear" </string>
+ <string> "velocity/angular" </string>
+ <string> "script/script" </string>
+ <string> "__meta__" </string>
+ <string> "Sprite" </string>
+ <string> "texture" </string>
+ <string> "centered" </string>
+ <string> "offset" </string>
+ <string> "flip_h" </string>
+ <string> "flip_v" </string>
+ <string> "vframes" </string>
+ <string> "hframes" </string>
+ <string> "frame" </string>
+ <string> "modulate" </string>
+ <string> "region" </string>
+ <string> "region_rect" </string>
+ <string> "CollisionShape2D" </string>
+ <string> "shape" </string>
+ <string> "trigger" </string>
+ </string_array>
+ <string> "version" </string>
+ <int> 1 </int>
+ <string> "conn_count" </string>
+ <int> 0 </int>
+ <string> "node_count" </string>
+ <int> 3 </int>
+ <string> "variants" </string>
+ <array len="16" shared="true">
+ <bool> False </bool>
+ <int> 0 </int>
+ <bool> True </bool>
+ <real> 1 </real>
+ <vector2> 0, 0 </vector2>
+ <real> 0 </real>
+ <vector2> 1, 1 </vector2>
+ <int> 1 </int>
+ <resource resource_type="CircleShape2D" path="local://1"> </resource>
+ <matrix32> 1, 0, 0, 1, 0, 0 </matrix32>
+ <real> 3 </real>
+ <resource name=""></resource> <dictionary shared="false">
+ <string> "__editor_plugin_states__" </string>
+ <dictionary shared="false">
+ <string> "2D" </string>
+ <dictionary shared="false">
+ <string> "zoom" </string>
+ <real> 1.50734 </real>
+ <string> "ofs" </string>
+ <vector2> -80.5995, -149.825 </vector2>
+ </dictionary>
+ <string> "3D" </string>
+ <dictionary shared="false">
+ <string> "zfar" </string>
+ <real> 500 </real>
+ <string> "fov" </string>
+ <real> 45 </real>
+ <string> "viewports" </string>
+ <array len="4" shared="true">
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ </array>
+ <string> "viewport_mode" </string>
+ <int> 1 </int>
+ <string> "default_light" </string>
+ <bool> True </bool>
+ <string> "show_grid" </string>
+ <bool> True </bool>
+ <string> "show_origin" </string>
+ <bool> True </bool>
+ <string> "znear" </string>
+ <real> 0.1 </real>
+ </dictionary>
+ </dictionary>
+ <string> "__editor_run_settings__" </string>
+ <dictionary shared="false">
+ <string> "custom_args" </string>
+ <string> "-l $scene" </string>
+ <string> "run_mode" </string>
+ <int> 0 </int>
+ </dictionary>
+ <string> "__editor_plugin_screen__" </string>
+ <string> "Script" </string>
+ </dictionary>
+ <resource resource_type="ImageTexture" path="res://art/bowling_ball.*"> </resource>
+ <color> 1, 1, 1, 1 </color>
+ <rect2> 0, 0, 0, 0 </rect2>
+ </array>
+ <string> "nodes" </string>
+ <int_array len="165"> -1, -1, 1, 0, -1, 31, 2, 0, 3, 0, 4, 0, 5, 0, 6, 1, 7, 2, 8, 3, 9, 3, 10, 2, 11, 1, 12, 4, 13, 5, 14, 6, 15, 7, 16, 8, 17, 9, 18, 0, 19, 1, 20, 10, 21, 3, 22, 5, 23, 0, 24, 0, 25, 1, 26, 0, 27, 2, 28, 2, 29, 4, 30, 5, 31, 11, 32, 12, 0, 0, 0, 33, 33, -1, 25, 2, 0, 3, 0, 4, 0, 5, 0, 6, 1, 7, 2, 8, 3, 9, 3, 10, 2, 11, 1, 12, 4, 13, 5, 14, 6, 34, 13, 35, 2, 36, 4, 37, 0, 38, 0, 39, 7, 40, 7, 41, 1, 42, 14, 43, 0, 44, 15, 31, 11, 0, 0, 0, 45, 45, -1, 16, 2, 0, 3, 0, 4, 0, 5, 0, 6, 1, 7, 2, 8, 3, 9, 3, 10, 2, 11, 1, 12, 4, 13, 5, 14, 6, 46, 8, 47, 0, 31, 11, 0 </int_array>
+ <string> "conns" </string>
+ <int_array len="0"> </int_array>
+ </dictionary>
+ <resource name="script/script"></resource>
+ </main_resource>
+</resource_file> \ No newline at end of file
diff --git a/demos/2d/rubegoldberg/box.xml b/demos/2d/rubegoldberg/box.xml
new file mode 100644
index 0000000000..c715326ae0
--- /dev/null
+++ b/demos/2d/rubegoldberg/box.xml
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<resource_file type="PackedScene" subresource_count="3" version="0.99" version_name="Godot Engine v0.99.2864-pre-beta">
+ <ext_resource path="res://art/box.png" type="Texture"></ext_resource>
+ <resource type="RectangleShape2D" path="local://1">
+ <string name="resource/name"> "" </string>
+ <real name="custom_solver_bias"> 0 </real>
+ <vector2 name="extents"> 32, 32 </vector2>
+ <resource name="script/script"></resource>
+ </resource>
+ <main_resource>
+ <string name="resource/name"> "" </string>
+ <dictionary name="_bundled">
+ <string> "names" </string>
+ <string_array len="48">
+ <string> "box" </string>
+ <string> "RigidBody2D" </string>
+ <string> "process/process" </string>
+ <string> "process/fixed_process" </string>
+ <string> "process/input" </string>
+ <string> "process/unhandled_input" </string>
+ <string> "process/mode" </string>
+ <string> "visibility/visible" </string>
+ <string> "visibility/toplevel" </string>
+ <string> "visibility/opacity" </string>
+ <string> "visibility/self_opacity" </string>
+ <string> "visibility/on_top" </string>
+ <string> "visibility/blend_mode" </string>
+ <string> "transform/notify" </string>
+ <string> "transform/pos" </string>
+ <string> "transform/rot" </string>
+ <string> "transform/scale" </string>
+ <string> "shape_count" </string>
+ <string> "shapes/0/shape" </string>
+ <string> "shapes/0/transform" </string>
+ <string> "mode" </string>
+ <string> "mass" </string>
+ <string> "friction" </string>
+ <string> "bounce" </string>
+ <string> "custom_integrator" </string>
+ <string> "continuous_cd" </string>
+ <string> "contacts_reported" </string>
+ <string> "contact_monitor" </string>
+ <string> "active" </string>
+ <string> "can_sleep" </string>
+ <string> "velocity/linear" </string>
+ <string> "velocity/angular" </string>
+ <string> "script/script" </string>
+ <string> "__meta__" </string>
+ <string> "Sprite" </string>
+ <string> "texture" </string>
+ <string> "centered" </string>
+ <string> "offset" </string>
+ <string> "flip_h" </string>
+ <string> "flip_v" </string>
+ <string> "vframes" </string>
+ <string> "hframes" </string>
+ <string> "frame" </string>
+ <string> "modulate" </string>
+ <string> "region" </string>
+ <string> "region_rect" </string>
+ <string> "CollisionShape2D" </string>
+ <string> "shape" </string>
+ </string_array>
+ <string> "version" </string>
+ <int> 1 </int>
+ <string> "conn_count" </string>
+ <int> 0 </int>
+ <string> "node_count" </string>
+ <int> 3 </int>
+ <string> "variants" </string>
+ <array len="15">
+ <bool> False </bool>
+ <int> 0 </int>
+ <bool> True </bool>
+ <real> 1 </real>
+ <vector2> 0, 0 </vector2>
+ <real> 0 </real>
+ <vector2> 1, 1 </vector2>
+ <int> 1 </int>
+ <resource resource_type="RectangleShape2D" path="local://1"> </resource>
+ <matrix32> 1, 0, 0, 1, 0, 0 </matrix32>
+ <resource name=""></resource> <dictionary>
+ <string> "__editor_plugin_states__" </string>
+ <dictionary>
+ <string> "2D" </string>
+ <dictionary>
+ <string> "zoom" </string>
+ <real> 1 </real>
+ <string> "ofs" </string>
+ <vector2> -125, -163 </vector2>
+ </dictionary>
+ <string> "3D" </string>
+ <dictionary>
+ <string> "zfar" </string>
+ <real> 500 </real>
+ <string> "fov" </string>
+ <real> 45 </real>
+ <string> "window_mode" </string>
+ <int> 0 </int>
+ <string> "window_0" </string>
+ <dictionary>
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "default_light" </string>
+ <bool> True </bool>
+ <string> "x_rot" </string>
+ <real> 0.337 </real>
+ <string> "y_rot" </string>
+ <real> -0.575 </real>
+ <string> "show_grid" </string>
+ <bool> True </bool>
+ <string> "show_origin" </string>
+ <bool> True </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ <string> "znear" </string>
+ <real> 0.1 </real>
+ </dictionary>
+ </dictionary>
+ <string> "__editor_run_settings__" </string>
+ <dictionary>
+ <string> "custom_args" </string>
+ <string> "-l $scene" </string>
+ <string> "run_mode" </string>
+ <int> 0 </int>
+ </dictionary>
+ <string> "__editor_plugin_screen__" </string>
+ <string> "2D" </string>
+ </dictionary>
+ <resource resource_type="Texture" path="res://art/box.png"> </resource>
+ <color> 1, 1, 1, 1 </color>
+ <rect2> 0, 0, 0, 0 </rect2>
+ </array>
+ <string> "nodes" </string>
+ <int_array len="173"> -1, -1, 1, 0, -1, 32, 2, 0, 3, 0, 4, 0, 5, 0, 6, 1, 7, 2, 8, 0, 9, 3, 10, 3, 11, 2, 12, 1, 13, 2, 14, 4, 15, 5, 16, 6, 17, 7, 18, 8, 19, 9, 20, 1, 21, 3, 22, 3, 23, 5, 24, 0, 25, 0, 26, 1, 27, 0, 28, 2, 29, 2, 30, 4, 31, 5, 32, 10, 33, 11, 0, 0, 0, 34, 34, -1, 27, 2, 0, 3, 0, 4, 0, 5, 0, 6, 1, 7, 2, 8, 0, 9, 3, 10, 3, 11, 2, 12, 1, 13, 0, 14, 4, 15, 5, 16, 6, 35, 12, 36, 2, 37, 4, 38, 0, 39, 0, 40, 7, 41, 7, 42, 1, 43, 13, 44, 0, 45, 14, 32, 10, 0, 0, 0, 46, 46, -1, 17, 2, 0, 3, 0, 4, 0, 5, 0, 6, 1, 7, 2, 8, 0, 9, 3, 10, 3, 11, 2, 12, 1, 13, 2, 14, 4, 15, 5, 16, 6, 47, 8, 32, 10, 0 </int_array>
+ <string> "conns" </string>
+ <int_array len="0"> </int_array>
+ </dictionary>
+ <resource name="script/script"></resource>
+ </main_resource>
+</resource_file> \ No newline at end of file
diff --git a/demos/2d/rubegoldberg/domino.xml b/demos/2d/rubegoldberg/domino.xml
new file mode 100644
index 0000000000..324bf57e66
--- /dev/null
+++ b/demos/2d/rubegoldberg/domino.xml
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<resource_file type="PackedScene" subresource_count="3" version="0.99" version_name="Godot Engine v0.99.2864-pre-beta">
+ <ext_resource path="res://art/domino.png" type="Texture"></ext_resource>
+ <resource type="RectangleShape2D" path="local://1">
+ <string name="resource/name"> "" </string>
+ <real name="custom_solver_bias"> 0 </real>
+ <vector2 name="extents"> 16, 64 </vector2>
+ <resource name="script/script"></resource>
+ </resource>
+ <main_resource>
+ <string name="resource/name"> "" </string>
+ <dictionary name="_bundled">
+ <string> "names" </string>
+ <string_array len="48">
+ <string> "domino" </string>
+ <string> "RigidBody2D" </string>
+ <string> "process/process" </string>
+ <string> "process/fixed_process" </string>
+ <string> "process/input" </string>
+ <string> "process/unhandled_input" </string>
+ <string> "process/mode" </string>
+ <string> "visibility/visible" </string>
+ <string> "visibility/toplevel" </string>
+ <string> "visibility/opacity" </string>
+ <string> "visibility/self_opacity" </string>
+ <string> "visibility/on_top" </string>
+ <string> "visibility/blend_mode" </string>
+ <string> "transform/notify" </string>
+ <string> "transform/pos" </string>
+ <string> "transform/rot" </string>
+ <string> "transform/scale" </string>
+ <string> "shape_count" </string>
+ <string> "shapes/0/shape" </string>
+ <string> "shapes/0/transform" </string>
+ <string> "mode" </string>
+ <string> "mass" </string>
+ <string> "friction" </string>
+ <string> "bounce" </string>
+ <string> "custom_integrator" </string>
+ <string> "continuous_cd" </string>
+ <string> "contacts_reported" </string>
+ <string> "contact_monitor" </string>
+ <string> "active" </string>
+ <string> "can_sleep" </string>
+ <string> "velocity/linear" </string>
+ <string> "velocity/angular" </string>
+ <string> "script/script" </string>
+ <string> "__meta__" </string>
+ <string> "Sprite" </string>
+ <string> "texture" </string>
+ <string> "centered" </string>
+ <string> "offset" </string>
+ <string> "flip_h" </string>
+ <string> "flip_v" </string>
+ <string> "vframes" </string>
+ <string> "hframes" </string>
+ <string> "frame" </string>
+ <string> "modulate" </string>
+ <string> "region" </string>
+ <string> "region_rect" </string>
+ <string> "CollisionShape2D" </string>
+ <string> "shape" </string>
+ </string_array>
+ <string> "version" </string>
+ <int> 1 </int>
+ <string> "conn_count" </string>
+ <int> 0 </int>
+ <string> "node_count" </string>
+ <int> 3 </int>
+ <string> "variants" </string>
+ <array len="16">
+ <bool> False </bool>
+ <int> 0 </int>
+ <bool> True </bool>
+ <real> 1 </real>
+ <vector2> 0, 0 </vector2>
+ <real> 0 </real>
+ <vector2> 1, 1 </vector2>
+ <int> 1 </int>
+ <resource resource_type="RectangleShape2D" path="local://1"> </resource>
+ <matrix32> 1, 0, 0, 1, 0, 0 </matrix32>
+ <real> 0.5 </real>
+ <resource name=""></resource> <dictionary>
+ <string> "__editor_plugin_states__" </string>
+ <dictionary>
+ <string> "2D" </string>
+ <dictionary>
+ <string> "zoom" </string>
+ <real> 1 </real>
+ <string> "ofs" </string>
+ <vector2> -135, -114 </vector2>
+ </dictionary>
+ <string> "3D" </string>
+ <dictionary>
+ <string> "zfar" </string>
+ <real> 500 </real>
+ <string> "fov" </string>
+ <real> 45 </real>
+ <string> "window_mode" </string>
+ <int> 0 </int>
+ <string> "window_0" </string>
+ <dictionary>
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "default_light" </string>
+ <bool> True </bool>
+ <string> "x_rot" </string>
+ <real> 0.337 </real>
+ <string> "y_rot" </string>
+ <real> -0.575 </real>
+ <string> "show_grid" </string>
+ <bool> True </bool>
+ <string> "show_origin" </string>
+ <bool> True </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ <string> "znear" </string>
+ <real> 0.1 </real>
+ </dictionary>
+ </dictionary>
+ <string> "__editor_run_settings__" </string>
+ <dictionary>
+ <string> "custom_args" </string>
+ <string> "-l $scene" </string>
+ <string> "run_mode" </string>
+ <int> 0 </int>
+ </dictionary>
+ <string> "__editor_plugin_screen__" </string>
+ <string> "2D" </string>
+ </dictionary>
+ <resource resource_type="Texture" path="res://art/domino.png"> </resource>
+ <color> 1, 1, 1, 1 </color>
+ <rect2> 0, 0, 0, 0 </rect2>
+ </array>
+ <string> "nodes" </string>
+ <int_array len="173"> -1, -1, 1, 0, -1, 32, 2, 0, 3, 0, 4, 0, 5, 0, 6, 1, 7, 2, 8, 0, 9, 3, 10, 3, 11, 2, 12, 1, 13, 2, 14, 4, 15, 5, 16, 6, 17, 7, 18, 8, 19, 9, 20, 1, 21, 3, 22, 10, 23, 5, 24, 0, 25, 0, 26, 1, 27, 0, 28, 2, 29, 2, 30, 4, 31, 5, 32, 11, 33, 12, 0, 0, 0, 34, 34, -1, 27, 2, 0, 3, 0, 4, 0, 5, 0, 6, 1, 7, 2, 8, 0, 9, 3, 10, 3, 11, 2, 12, 1, 13, 0, 14, 4, 15, 5, 16, 6, 35, 13, 36, 2, 37, 4, 38, 0, 39, 0, 40, 7, 41, 7, 42, 1, 43, 14, 44, 0, 45, 15, 32, 11, 0, 0, 0, 46, 46, -1, 17, 2, 0, 3, 0, 4, 0, 5, 0, 6, 1, 7, 2, 8, 0, 9, 3, 10, 3, 11, 2, 12, 1, 13, 2, 14, 4, 15, 5, 16, 6, 47, 8, 32, 11, 0 </int_array>
+ <string> "conns" </string>
+ <int_array len="0"> </int_array>
+ </dictionary>
+ <resource name="script/script"></resource>
+ </main_resource>
+</resource_file> \ No newline at end of file
diff --git a/demos/2d/rubegoldberg/engine.cfg b/demos/2d/rubegoldberg/engine.cfg
new file mode 100644
index 0000000000..bd1cc79ddb
--- /dev/null
+++ b/demos/2d/rubegoldberg/engine.cfg
@@ -0,0 +1,10 @@
+[application]
+
+name="Rube Goldberg"
+main_scene="res://rubegoldberg.xml"
+icon="res://icon.png"
+
+[physics_2d]
+
+default_gravity=500
+default_density=0.01
diff --git a/demos/2d/rubegoldberg/icon.png b/demos/2d/rubegoldberg/icon.png
new file mode 100644
index 0000000000..38925bda0d
--- /dev/null
+++ b/demos/2d/rubegoldberg/icon.png
Binary files differ
diff --git a/demos/2d/rubegoldberg/pendulum.xml b/demos/2d/rubegoldberg/pendulum.xml
new file mode 100644
index 0000000000..2a5378ff2f
--- /dev/null
+++ b/demos/2d/rubegoldberg/pendulum.xml
@@ -0,0 +1,233 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<resource_file type="PackedScene" subresource_count="5" version="0.99" version_name="Godot Engine v0.99.3735-pre-beta">
+ <ext_resource path="res://art/bowling_ball.*" type="ImageTexture"></ext_resource>
+ <ext_resource path="res://art/box.*" type="ImageTexture"></ext_resource>
+ <resource type="RectangleShape2D" path="local://1">
+ <real name="custom_solver_bias"> 0 </real>
+ <vector2 name="extents"> 3, 12 </vector2>
+
+ </resource>
+ <resource type="CircleShape2D" path="local://2">
+ <real name="custom_solver_bias"> 0 </real>
+ <real name="radius"> 16 </real>
+
+ </resource>
+ <main_resource>
+ <dictionary name="_bundled" shared="false">
+ <string> "names" </string>
+ <string_array len="57">
+ <string> "pendulum" </string>
+ <string> "Node2D" </string>
+ <string> "visibility/visible" </string>
+ <string> "visibility/opacity" </string>
+ <string> "visibility/self_opacity" </string>
+ <string> "visibility/on_top" </string>
+ <string> "transform/pos" </string>
+ <string> "transform/rot" </string>
+ <string> "transform/scale" </string>
+ <string> "__meta__" </string>
+ <string> "union_0" </string>
+ <string> "RigidBody2D" </string>
+ <string> "shape_count" </string>
+ <string> "shapes/0/shape" </string>
+ <string> "shapes/0/transform" </string>
+ <string> "shapes/0/trigger" </string>
+ <string> "mode" </string>
+ <string> "mass" </string>
+ <string> "friction" </string>
+ <string> "bounce" </string>
+ <string> "custom_integrator" </string>
+ <string> "continuous_cd" </string>
+ <string> "contacts_reported" </string>
+ <string> "contact_monitor" </string>
+ <string> "active" </string>
+ <string> "can_sleep" </string>
+ <string> "velocity/linear" </string>
+ <string> "velocity/angular" </string>
+ <string> "Sprite" </string>
+ <string> "texture" </string>
+ <string> "centered" </string>
+ <string> "offset" </string>
+ <string> "flip_h" </string>
+ <string> "flip_v" </string>
+ <string> "vframes" </string>
+ <string> "hframes" </string>
+ <string> "frame" </string>
+ <string> "modulate" </string>
+ <string> "region" </string>
+ <string> "region_rect" </string>
+ <string> "collision" </string>
+ <string> "CollisionShape2D" </string>
+ <string> "shape" </string>
+ <string> "trigger" </string>
+ <string> "union_ 2" </string>
+ <string> "union_ 3" </string>
+ <string> "union_ 4" </string>
+ <string> "joint1" </string>
+ <string> "PinJoint2D" </string>
+ <string> "node_a" </string>
+ <string> "node_b" </string>
+ <string> "bias/bias" </string>
+ <string> "joint 2_3" </string>
+ <string> "joint 3_4" </string>
+ <string> "ball" </string>
+ <string> "joint 4_ball" </string>
+ <string> "joint wall" </string>
+ </string_array>
+ <string> "version" </string>
+ <int> 1 </int>
+ <string> "conn_count" </string>
+ <int> 0 </int>
+ <string> "node_count" </string>
+ <int> 21 </int>
+ <string> "variants" </string>
+ <array len="38" shared="false">
+ <bool> True </bool>
+ <real> 1 </real>
+ <vector2> 0, 0 </vector2>
+ <real> 0 </real>
+ <vector2> 1, 1 </vector2>
+ <dictionary shared="false">
+ <string> "__editor_plugin_states__" </string>
+ <dictionary shared="false">
+ <string> "2D" </string>
+ <dictionary shared="false">
+ <string> "zoom" </string>
+ <real> 2.78951 </real>
+ <string> "ofs" </string>
+ <vector2> -121.028, 0.923909 </vector2>
+ </dictionary>
+ <string> "3D" </string>
+ <dictionary shared="false">
+ <string> "zfar" </string>
+ <real> 500 </real>
+ <string> "fov" </string>
+ <real> 45 </real>
+ <string> "viewports" </string>
+ <array len="4" shared="false">
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ </array>
+ <string> "viewport_mode" </string>
+ <int> 1 </int>
+ <string> "default_light" </string>
+ <bool> True </bool>
+ <string> "show_grid" </string>
+ <bool> True </bool>
+ <string> "show_origin" </string>
+ <bool> True </bool>
+ <string> "znear" </string>
+ <real> 0.1 </real>
+ </dictionary>
+ </dictionary>
+ <string> "__editor_run_settings__" </string>
+ <dictionary shared="false">
+ <string> "custom_args" </string>
+ <string> "-l $scene" </string>
+ <string> "run_mode" </string>
+ <int> 0 </int>
+ </dictionary>
+ <string> "__editor_plugin_screen__" </string>
+ <string> "2D" </string>
+ </dictionary>
+ <int> 1 </int>
+ <resource resource_type="RectangleShape2D" path="local://1"> </resource>
+ <matrix32> 1, 0, 0, 1, 0, 0 </matrix32>
+ <bool> False </bool>
+ <int> 0 </int>
+ <real> 0.2 </real>
+ <dictionary shared="false">
+ <string> "_edit_group_" </string>
+ <bool> True </bool>
+ </dictionary>
+ <vector2> 0.1, 0.4 </vector2>
+ <resource resource_type="ImageTexture" path="res://art/box.*"> </resource>
+ <color> 1, 1, 1, 1 </color>
+ <rect2> 0, 0, 0, 0 </rect2>
+ <vector2> 0, 26.9432 </vector2>
+ <matrix32> 1, -0, 0, 1, 0, 0 </matrix32>
+ <dictionary shared="false">
+ <string> "_edit_group_" </string>
+ <bool> True </bool>
+ </dictionary>
+ <vector2> 0, 53.8863 </vector2>
+ <vector2> 0, 81.4282 </vector2>
+ <vector2> 0, 13.771 </vector2>
+ <node_path> "../union_0" </node_path>
+ <node_path> "../union_ 2" </node_path>
+ <vector2> 0, 40.7141 </vector2>
+ <node_path> "../union_ 3" </node_path>
+ <vector2> 0, 67.6573 </vector2>
+ <node_path> "../union_ 4" </node_path>
+ <vector2> 0, 106.787 </vector2>
+ <vector2> 0.98476, 1 </vector2>
+ <resource resource_type="CircleShape2D" path="local://2"> </resource>
+ <vector2> 0.5, 0.5 </vector2>
+ <resource resource_type="ImageTexture" path="res://art/bowling_ball.*"> </resource>
+ <vector2> 0, 92.5287 </vector2>
+ <node_path> "../ball" </node_path>
+ <vector2> 0, -12.1024 </vector2>
+ <node_path> "" </node_path>
+ </array>
+ <string> "nodes" </string>
+ <int_array len="773"> -1, -1, 1, 0, -1, 8, 2, 0, 3, 1, 4, 1, 5, 0, 6, 2, 7, 3, 8, 4, 9, 5, 0, 0, 0, 11, 10, -1, 24, 2, 0, 3, 1, 4, 1, 5, 0, 6, 2, 7, 3, 8, 4, 12, 6, 13, 7, 14, 8, 15, 9, 16, 10, 17, 11, 18, 1, 19, 3, 20, 9, 21, 9, 22, 10, 23, 9, 24, 0, 25, 0, 26, 2, 27, 3, 9, 12, 0, 1, 0, 28, 28, -1, 18, 2, 0, 3, 1, 4, 1, 5, 0, 6, 2, 7, 3, 8, 13, 29, 14, 30, 0, 31, 2, 32, 9, 33, 9, 34, 6, 35, 6, 36, 10, 37, 15, 38, 9, 39, 16, 0, 1, 0, 41, 40, -1, 9, 2, 0, 3, 1, 4, 1, 5, 0, 6, 2, 7, 3, 8, 4, 42, 7, 43, 9, 0, 0, 0, 11, 44, -1, 24, 2, 0, 3, 1, 4, 1, 5, 0, 6, 17, 7, 3, 8, 4, 12, 6, 13, 7, 14, 18, 15, 9, 16, 10, 17, 11, 18, 1, 19, 3, 20, 9, 21, 9, 22, 10, 23, 9, 24, 0, 25, 0, 26, 2, 27, 3, 9, 19, 0, 4, 0, 28, 28, -1, 18, 2, 0, 3, 1, 4, 1, 5, 0, 6, 2, 7, 3, 8, 13, 29, 14, 30, 0, 31, 2, 32, 9, 33, 9, 34, 6, 35, 6, 36, 10, 37, 15, 38, 9, 39, 16, 0, 4, 0, 41, 40, -1, 9, 2, 0, 3, 1, 4, 1, 5, 0, 6, 2, 7, 3, 8, 4, 42, 7, 43, 9, 0, 0, 0, 11, 45, -1, 24, 2, 0, 3, 1, 4, 1, 5, 0, 6, 20, 7, 3, 8, 4, 12, 6, 13, 7, 14, 18, 15, 9, 16, 10, 17, 11, 18, 1, 19, 3, 20, 9, 21, 9, 22, 10, 23, 9, 24, 0, 25, 0, 26, 2, 27, 3, 9, 19, 0, 7, 0, 28, 28, -1, 18, 2, 0, 3, 1, 4, 1, 5, 0, 6, 2, 7, 3, 8, 13, 29, 14, 30, 0, 31, 2, 32, 9, 33, 9, 34, 6, 35, 6, 36, 10, 37, 15, 38, 9, 39, 16, 0, 7, 0, 41, 40, -1, 9, 2, 0, 3, 1, 4, 1, 5, 0, 6, 2, 7, 3, 8, 4, 42, 7, 43, 9, 0, 0, 0, 11, 46, -1, 24, 2, 0, 3, 1, 4, 1, 5, 0, 6, 21, 7, 3, 8, 4, 12, 6, 13, 7, 14, 18, 15, 9, 16, 10, 17, 11, 18, 1, 19, 3, 20, 9, 21, 9, 22, 10, 23, 9, 24, 0, 25, 0, 26, 2, 27, 3, 9, 19, 0, 10, 0, 28, 28, -1, 18, 2, 0, 3, 1, 4, 1, 5, 0, 6, 2, 7, 3, 8, 13, 29, 14, 30, 0, 31, 2, 32, 9, 33, 9, 34, 6, 35, 6, 36, 10, 37, 15, 38, 9, 39, 16, 0, 10, 0, 41, 40, -1, 9, 2, 0, 3, 1, 4, 1, 5, 0, 6, 2, 7, 3, 8, 4, 42, 7, 43, 9, 0, 0, 0, 48, 47, -1, 10, 2, 0, 3, 1, 4, 1, 5, 0, 6, 22, 7, 3, 8, 4, 49, 23, 50, 24, 51, 3, 0, 0, 0, 48, 52, -1, 10, 2, 0, 3, 1, 4, 1, 5, 0, 6, 25, 7, 3, 8, 4, 49, 24, 50, 26, 51, 3, 0, 0, 0, 48, 53, -1, 10, 2, 0, 3, 1, 4, 1, 5, 0, 6, 27, 7, 3, 8, 4, 49, 26, 50, 28, 51, 11, 0, 0, 0, 11, 54, -1, 24, 2, 0, 3, 1, 4, 1, 5, 0, 6, 29, 7, 3, 8, 30, 12, 6, 13, 31, 14, 18, 15, 9, 16, 10, 17, 11, 18, 1, 19, 3, 20, 9, 21, 9, 22, 10, 23, 9, 24, 0, 25, 0, 26, 2, 27, 3, 9, 19, 0, 16, 0, 28, 28, -1, 18, 2, 0, 3, 1, 4, 1, 5, 0, 6, 2, 7, 3, 8, 32, 29, 33, 30, 0, 31, 2, 32, 9, 33, 9, 34, 6, 35, 6, 36, 10, 37, 15, 38, 9, 39, 16, 0, 16, 0, 41, 40, -1, 9, 2, 0, 3, 1, 4, 1, 5, 0, 6, 2, 7, 3, 8, 4, 42, 31, 43, 9, 0, 0, 0, 48, 55, -1, 10, 2, 0, 3, 1, 4, 1, 5, 0, 6, 34, 7, 3, 8, 4, 49, 28, 50, 35, 51, 3, 0, 0, 0, 48, 56, -1, 10, 2, 0, 3, 1, 4, 1, 5, 0, 6, 36, 7, 3, 8, 4, 49, 23, 50, 37, 51, 3, 0 </int_array>
+ <string> "conns" </string>
+ <int_array len="0"> </int_array>
+ </dictionary>
+
+ </main_resource>
+</resource_file> \ No newline at end of file
diff --git a/demos/2d/rubegoldberg/platform.xml b/demos/2d/rubegoldberg/platform.xml
new file mode 100644
index 0000000000..0cc8f4b137
--- /dev/null
+++ b/demos/2d/rubegoldberg/platform.xml
@@ -0,0 +1,176 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<resource_file type="PackedScene" subresource_count="3" version="0.99" version_name="Godot Engine v0.99.3735-pre-beta">
+ <ext_resource path="res://art/platform.*" type="ImageTexture"></ext_resource>
+ <resource type="RectangleShape2D" path="local://1">
+ <real name="custom_solver_bias"> 0 </real>
+ <vector2 name="extents"> 128, 16 </vector2>
+
+ </resource>
+ <main_resource>
+ <dictionary name="_bundled" shared="false">
+ <string> "names" </string>
+ <string_array len="34">
+ <string> "platform" </string>
+ <string> "StaticBody2D" </string>
+ <string> "visibility/visible" </string>
+ <string> "visibility/opacity" </string>
+ <string> "visibility/self_opacity" </string>
+ <string> "visibility/on_top" </string>
+ <string> "transform/pos" </string>
+ <string> "transform/rot" </string>
+ <string> "transform/scale" </string>
+ <string> "shape_count" </string>
+ <string> "shapes/0/shape" </string>
+ <string> "shapes/0/transform" </string>
+ <string> "shapes/0/trigger" </string>
+ <string> "simulate_motion" </string>
+ <string> "constant_linear_velocity" </string>
+ <string> "constant_angular_velocity" </string>
+ <string> "friction" </string>
+ <string> "bounce" </string>
+ <string> "__meta__" </string>
+ <string> "Sprite" </string>
+ <string> "texture" </string>
+ <string> "centered" </string>
+ <string> "offset" </string>
+ <string> "flip_h" </string>
+ <string> "flip_v" </string>
+ <string> "vframes" </string>
+ <string> "hframes" </string>
+ <string> "frame" </string>
+ <string> "modulate" </string>
+ <string> "region" </string>
+ <string> "region_rect" </string>
+ <string> "CollisionShape2D" </string>
+ <string> "shape" </string>
+ <string> "trigger" </string>
+ </string_array>
+ <string> "version" </string>
+ <int> 1 </int>
+ <string> "conn_count" </string>
+ <int> 0 </int>
+ <string> "node_count" </string>
+ <int> 3 </int>
+ <string> "variants" </string>
+ <array len="14" shared="false">
+ <bool> True </bool>
+ <real> 1 </real>
+ <vector2> 0, 0 </vector2>
+ <real> 0 </real>
+ <vector2> 1, 1 </vector2>
+ <int> 1 </int>
+ <resource resource_type="RectangleShape2D" path="local://1"> </resource>
+ <matrix32> 1, 0, 0, 1, 0, 0 </matrix32>
+ <bool> False </bool>
+ <dictionary shared="false">
+ <string> "__editor_plugin_states__" </string>
+ <dictionary shared="false">
+ <string> "2D" </string>
+ <dictionary shared="false">
+ <string> "pixel_snap" </string>
+ <bool> False </bool>
+ <string> "zoom" </string>
+ <real> 1 </real>
+ <string> "ofs" </string>
+ <vector2> -135, -114 </vector2>
+ </dictionary>
+ <string> "3D" </string>
+ <dictionary shared="false">
+ <string> "zfar" </string>
+ <real> 500 </real>
+ <string> "fov" </string>
+ <real> 45 </real>
+ <string> "viewports" </string>
+ <array len="4" shared="false">
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ </array>
+ <string> "viewport_mode" </string>
+ <int> 1 </int>
+ <string> "default_light" </string>
+ <bool> True </bool>
+ <string> "show_grid" </string>
+ <bool> True </bool>
+ <string> "show_origin" </string>
+ <bool> True </bool>
+ <string> "znear" </string>
+ <real> 0.1 </real>
+ </dictionary>
+ </dictionary>
+ <string> "__editor_run_settings__" </string>
+ <dictionary shared="false">
+ <string> "custom_args" </string>
+ <string> "-l $scene" </string>
+ <string> "run_mode" </string>
+ <int> 0 </int>
+ </dictionary>
+ <string> "__editor_plugin_screen__" </string>
+ <string> "2D" </string>
+ </dictionary>
+ <resource resource_type="ImageTexture" path="res://art/platform.*"> </resource>
+ <int> 0 </int>
+ <color> 1, 1, 1, 1 </color>
+ <rect2> 0, 0, 0, 0 </rect2>
+ </array>
+ <string> "nodes" </string>
+ <int_array len="109"> -1, -1, 1, 0, -1, 17, 2, 0, 3, 1, 4, 1, 5, 0, 6, 2, 7, 3, 8, 4, 9, 5, 10, 6, 11, 7, 12, 8, 13, 8, 14, 2, 15, 3, 16, 1, 17, 3, 18, 9, 0, 0, 0, 19, 19, -1, 18, 2, 0, 3, 1, 4, 1, 5, 0, 6, 2, 7, 3, 8, 4, 20, 10, 21, 0, 22, 2, 23, 8, 24, 8, 25, 5, 26, 5, 27, 11, 28, 12, 29, 8, 30, 13, 0, 0, 0, 31, 31, -1, 9, 2, 0, 3, 1, 4, 1, 5, 0, 6, 2, 7, 3, 8, 4, 32, 6, 33, 8, 0 </int_array>
+ <string> "conns" </string>
+ <int_array len="0"> </int_array>
+ </dictionary>
+
+ </main_resource>
+</resource_file> \ No newline at end of file
diff --git a/demos/2d/rubegoldberg/rubegoldberg.xml b/demos/2d/rubegoldberg/rubegoldberg.xml
new file mode 100644
index 0000000000..edb6dda0e1
--- /dev/null
+++ b/demos/2d/rubegoldberg/rubegoldberg.xml
@@ -0,0 +1,190 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<resource_file type="PackedScene" subresource_count="7" version="0.99" version_name="Godot Engine v0.99.3735-pre-beta">
+ <ext_resource path="res://platform.*" type="PackedScene"></ext_resource>
+ <ext_resource path="res://ball.*" type="PackedScene"></ext_resource>
+ <ext_resource path="res://domino.*" type="PackedScene"></ext_resource>
+ <ext_resource path="res://seesaw.*" type="PackedScene"></ext_resource>
+ <ext_resource path="res://box.*" type="PackedScene"></ext_resource>
+ <ext_resource path="res://pendulum.*" type="PackedScene"></ext_resource>
+ <main_resource>
+ <dictionary name="_bundled" shared="false">
+ <string> "names" </string>
+ <string_array len="29">
+ <string> "Node" </string>
+ <string> "__meta__" </string>
+ <string> "platform" </string>
+ <string> "StaticBody2D" </string>
+ <string> "transform/pos" </string>
+ <string> "transform/rot" </string>
+ <string> "platform 2" </string>
+ <string> "platform 3" </string>
+ <string> "Ball" </string>
+ <string> "RigidBody2D" </string>
+ <string> "domino" </string>
+ <string> "domino 2" </string>
+ <string> "domino 4" </string>
+ <string> "platform 4" </string>
+ <string> "platform 5" </string>
+ <string> "transform/scale" </string>
+ <string> "Ball 2" </string>
+ <string> "platform 6" </string>
+ <string> "platform 7" </string>
+ <string> "platform 8" </string>
+ <string> "SeeSaw" </string>
+ <string> "Node2D" </string>
+ <string> "box" </string>
+ <string> "pendulum" </string>
+ <string> "pendulum 2" </string>
+ <string> "pendulum 3" </string>
+ <string> "pendulum 4" </string>
+ <string> "Ball 5" </string>
+ <string> "velocity/linear" </string>
+ </string_array>
+ <string> "version" </string>
+ <int> 1 </int>
+ <string> "conn_count" </string>
+ <int> 0 </int>
+ <string> "node_count" </string>
+ <int> 21 </int>
+ <string> "variants" </string>
+ <array len="33" shared="false">
+ <dictionary shared="false">
+ <string> "__editor_plugin_states__" </string>
+ <dictionary shared="false">
+ <string> "2D" </string>
+ <dictionary shared="false">
+ <string> "pixel_snap" </string>
+ <bool> False </bool>
+ <string> "zoom" </string>
+ <real> 0.598737 </real>
+ <string> "ofs" </string>
+ <vector2> -15.4883, -75.0379 </vector2>
+ </dictionary>
+ <string> "3D" </string>
+ <dictionary shared="false">
+ <string> "zfar" </string>
+ <real> 500 </real>
+ <string> "fov" </string>
+ <real> 45 </real>
+ <string> "viewports" </string>
+ <array len="4" shared="false">
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ </array>
+ <string> "viewport_mode" </string>
+ <int> 1 </int>
+ <string> "default_light" </string>
+ <bool> True </bool>
+ <string> "show_grid" </string>
+ <bool> True </bool>
+ <string> "show_origin" </string>
+ <bool> True </bool>
+ <string> "znear" </string>
+ <real> 0.1 </real>
+ </dictionary>
+ </dictionary>
+ <string> "__editor_run_settings__" </string>
+ <dictionary shared="false">
+ <string> "custom_args" </string>
+ <string> "-l $scene" </string>
+ <string> "run_mode" </string>
+ <int> 0 </int>
+ </dictionary>
+ <string> "__editor_plugin_screen__" </string>
+ <string> "2D" </string>
+ </dictionary>
+ <resource resource_type="PackedScene" path="res://platform.*"> </resource>
+ <vector2> 116.881, 145.589 </vector2>
+ <real> -20.87962 </real>
+ <vector2> 336.29, 264.52 </vector2>
+ <vector2> 526.99, 264.52 </vector2>
+ <resource resource_type="PackedScene" path="res://ball.*"> </resource>
+ <vector2> 76.0801, 67.2141 </vector2>
+ <resource resource_type="PackedScene" path="res://domino.*"> </resource>
+ <vector2> 262.764, 182.008 </vector2>
+ <vector2> 356.951, 182.008 </vector2>
+ <vector2> 448.834, 179.291 </vector2>
+ <vector2> 772.686, 345.917 </vector2>
+ <real> 76.771606 </real>
+ <vector2> 640.041, 335.365 </vector2>
+ <real> 90 </real>
+ <vector2> 0.5, 1 </vector2>
+ <vector2> 616.342, 214.247 </vector2>
+ <vector2> 679.231, 588.598 </vector2>
+ <vector2> 424.491, 588.598 </vector2>
+ <vector2> 185.655, 588.598 </vector2>
+ <resource resource_type="PackedScene" path="res://seesaw.*"> </resource>
+ <vector2> 602.935, 554.501 </vector2>
+ <resource resource_type="PackedScene" path="res://box.*"> </resource>
+ <vector2> 476.002, 509.406 </vector2>
+ <real> 21.737282 </real>
+ <resource resource_type="PackedScene" path="res://pendulum.*"> </resource>
+ <vector2> 391.607, 305.444 </vector2>
+ <vector2> 343.172, 303.774 </vector2>
+ <vector2> 288.056, 303.774 </vector2>
+ <vector2> 236.28, 303.774 </vector2>
+ <vector2> 116.165, 526.515 </vector2>
+ <vector2> 0, -200 </vector2>
+ </array>
+ <string> "nodes" </string>
+ <int_array len="201"> -1, -1, 0, 0, -1, 1, 1, 0, 0, 0, 0, 3, 2, 1, 2, 4, 2, 5, 3, 0, 0, 0, 3, 6, 1, 1, 4, 4, 0, 0, 0, 3, 7, 1, 1, 4, 5, 0, 0, 0, 9, 8, 6, 1, 4, 7, 0, 0, 0, 9, 10, 8, 1, 4, 9, 0, 0, 0, 9, 11, 8, 1, 4, 10, 0, 0, 0, 9, 12, 8, 1, 4, 11, 0, 0, 0, 3, 13, 1, 2, 4, 12, 5, 13, 0, 0, 0, 3, 14, 1, 3, 4, 14, 5, 15, 15, 16, 0, 0, 0, 9, 16, 6, 1, 4, 17, 0, 0, 0, 3, 17, 1, 1, 4, 18, 0, 0, 0, 3, 18, 1, 1, 4, 19, 0, 0, 0, 3, 19, 1, 1, 4, 20, 0, 0, 0, 21, 20, 21, 1, 4, 22, 0, 0, 0, 9, 22, 23, 2, 4, 24, 5, 25, 0, 0, 0, 21, 23, 26, 1, 4, 27, 0, 0, 0, 21, 24, 26, 1, 4, 28, 0, 0, 0, 21, 25, 26, 1, 4, 29, 0, 0, 0, 21, 26, 26, 1, 4, 30, 0, 0, 0, 9, 27, 6, 2, 4, 31, 28, 32, 0 </int_array>
+ <string> "conns" </string>
+ <int_array len="0"> </int_array>
+ </dictionary>
+
+ </main_resource>
+</resource_file> \ No newline at end of file
diff --git a/demos/2d/rubegoldberg/seesaw.xml b/demos/2d/rubegoldberg/seesaw.xml
new file mode 100644
index 0000000000..30edbe9162
--- /dev/null
+++ b/demos/2d/rubegoldberg/seesaw.xml
@@ -0,0 +1,169 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<resource_file type="PackedScene" subresource_count="5" version="0.99" version_name="Godot Engine v0.99.2864-pre-beta">
+ <ext_resource path="res://art/seesaw_top.png" type="Texture"></ext_resource>
+ <ext_resource path="res://art/seesaw_base.png" type="Texture"></ext_resource>
+ <resource type="ConcavePolygonShape2D" path="local://1">
+ <string name="resource/name"> "" </string>
+ <real name="custom_solver_bias"> 0 </real>
+ <vector2_array name="segments" len="6"> -32.6231, 32.0838, -1.28218, -31.1383, -1.28218, -31.1383, 33.8412, 33.1645, 33.8412, 33.1645, -32.6231, 32.0838 </vector2_array>
+ <resource name="script/script"></resource>
+ </resource>
+ <resource type="ConvexPolygonShape2D" path="local://2">
+ <string name="resource/name"> "" </string>
+ <real name="custom_solver_bias"> 0 </real>
+ <vector2_array name="points" len="4"> -99.0874, 7.76759, -125.025, -8.98358, 125.162, -8.44321, 99.2248, 7.22723 </vector2_array>
+ <resource name="script/script"></resource>
+ </resource>
+ <main_resource>
+ <string name="resource/name"> "" </string>
+ <dictionary name="_bundled">
+ <string> "names" </string>
+ <string_array len="58">
+ <string> "SeeSaw" </string>
+ <string> "Node2D" </string>
+ <string> "process/process" </string>
+ <string> "process/fixed_process" </string>
+ <string> "process/input" </string>
+ <string> "process/unhandled_input" </string>
+ <string> "process/mode" </string>
+ <string> "visibility/visible" </string>
+ <string> "visibility/toplevel" </string>
+ <string> "visibility/opacity" </string>
+ <string> "visibility/self_opacity" </string>
+ <string> "visibility/on_top" </string>
+ <string> "visibility/blend_mode" </string>
+ <string> "transform/notify" </string>
+ <string> "transform/pos" </string>
+ <string> "transform/rot" </string>
+ <string> "transform/scale" </string>
+ <string> "script/script" </string>
+ <string> "__meta__" </string>
+ <string> "Sprite" </string>
+ <string> "texture" </string>
+ <string> "centered" </string>
+ <string> "offset" </string>
+ <string> "flip_h" </string>
+ <string> "flip_v" </string>
+ <string> "vframes" </string>
+ <string> "hframes" </string>
+ <string> "frame" </string>
+ <string> "modulate" </string>
+ <string> "region" </string>
+ <string> "region_rect" </string>
+ <string> "StaticBody2D" </string>
+ <string> "shape_count" </string>
+ <string> "shapes/0/shape" </string>
+ <string> "shapes/0/transform" </string>
+ <string> "simulate_motion" </string>
+ <string> "constant_linear_velocity" </string>
+ <string> "constant_angular_velocity" </string>
+ <string> "CollisionPolygon2D" </string>
+ <string> "build_mode" </string>
+ <string> "polygon" </string>
+ <string> "RigidBody2D" </string>
+ <string> "mode" </string>
+ <string> "mass" </string>
+ <string> "friction" </string>
+ <string> "bounce" </string>
+ <string> "custom_integrator" </string>
+ <string> "continuous_cd" </string>
+ <string> "contacts_reported" </string>
+ <string> "contact_monitor" </string>
+ <string> "active" </string>
+ <string> "can_sleep" </string>
+ <string> "velocity/linear" </string>
+ <string> "velocity/angular" </string>
+ <string> "PinJoint2D" </string>
+ <string> "node_a" </string>
+ <string> "node_b" </string>
+ <string> "bias/bias" </string>
+ </string_array>
+ <string> "version" </string>
+ <int> 1 </int>
+ <string> "conn_count" </string>
+ <int> 0 </int>
+ <string> "node_count" </string>
+ <int> 8 </int>
+ <string> "variants" </string>
+ <array len="25">
+ <bool> False </bool>
+ <int> 0 </int>
+ <bool> True </bool>
+ <real> 1 </real>
+ <vector2> 0, 0 </vector2>
+ <real> 0 </real>
+ <vector2> 1, 1 </vector2>
+ <resource name=""></resource> <dictionary>
+ <string> "__editor_plugin_states__" </string>
+ <dictionary>
+ <string> "2D" </string>
+ <dictionary>
+ <string> "zoom" </string>
+ <real> 1.670183 </real>
+ <string> "ofs" </string>
+ <vector2> -277.779, -292.484 </vector2>
+ </dictionary>
+ <string> "3D" </string>
+ <dictionary>
+ <string> "zfar" </string>
+ <real> 500 </real>
+ <string> "fov" </string>
+ <real> 45 </real>
+ <string> "window_mode" </string>
+ <int> 0 </int>
+ <string> "window_0" </string>
+ <dictionary>
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "default_light" </string>
+ <bool> True </bool>
+ <string> "x_rot" </string>
+ <real> 0.337 </real>
+ <string> "y_rot" </string>
+ <real> -0.575 </real>
+ <string> "show_grid" </string>
+ <bool> True </bool>
+ <string> "show_origin" </string>
+ <bool> True </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ <string> "znear" </string>
+ <real> 0.1 </real>
+ </dictionary>
+ </dictionary>
+ <string> "__editor_run_settings__" </string>
+ <dictionary>
+ <string> "custom_args" </string>
+ <string> "-l $scene" </string>
+ <string> "run_mode" </string>
+ <int> 0 </int>
+ </dictionary>
+ <string> "__editor_plugin_screen__" </string>
+ <string> "2D" </string>
+ </dictionary>
+ <resource resource_type="Texture" path="res://art/seesaw_base.png"> </resource>
+ <int> 1 </int>
+ <color> 1, 1, 1, 1 </color>
+ <rect2> 0, 0, 0, 0 </rect2>
+ <resource resource_type="ConcavePolygonShape2D" path="local://1"> </resource>
+ <matrix32> 1, 0, 0, 1, 0, 0 </matrix32>
+ <vector2_array len="3"> -32.6231, 32.0838, -1.28218, -31.1383, 33.8412, 33.1645 </vector2_array>
+ <vector2> 1.19748, -29.9368 </vector2>
+ <real> 16.223282 </real>
+ <resource resource_type="ConvexPolygonShape2D" path="local://2"> </resource>
+ <vector2> 1, 0.5 </vector2>
+ <resource resource_type="Texture" path="res://art/seesaw_top.png"> </resource>
+ <vector2_array len="4"> -125.025, -8.98358, 125.162, -8.44321, 99.2248, 7.22723, -99.0874, 7.76759 </vector2_array>
+ <vector2> 0, -31.1343 </vector2>
+ <node_path> "../RigidBody2D" </node_path>
+ <node_path> "../Sprite/StaticBody2D" </node_path>
+ </array>
+ <string> "nodes" </string>
+ <int_array len="414"> -1, -1, 1, 0, -1, 17, 2, 0, 3, 0, 4, 0, 5, 0, 6, 1, 7, 2, 8, 0, 9, 3, 10, 3, 11, 2, 12, 1, 13, 0, 14, 4, 15, 5, 16, 6, 17, 7, 18, 8, 0, 0, 0, 19, 19, -1, 27, 2, 0, 3, 0, 4, 0, 5, 0, 6, 1, 7, 2, 8, 0, 9, 3, 10, 3, 11, 2, 12, 1, 13, 0, 14, 4, 15, 5, 16, 6, 20, 9, 21, 2, 22, 4, 23, 0, 24, 0, 25, 10, 26, 10, 27, 1, 28, 11, 29, 0, 30, 12, 17, 7, 0, 1, 0, 31, 31, -1, 22, 2, 0, 3, 0, 4, 0, 5, 0, 6, 1, 7, 2, 8, 0, 9, 3, 10, 3, 11, 2, 12, 1, 13, 2, 14, 4, 15, 5, 16, 6, 32, 10, 33, 13, 34, 14, 35, 0, 36, 4, 37, 5, 17, 7, 0, 2, 0, 38, 38, -1, 18, 2, 0, 3, 0, 4, 0, 5, 0, 6, 1, 7, 2, 8, 0, 9, 3, 10, 3, 11, 2, 12, 1, 13, 2, 14, 4, 15, 5, 16, 6, 39, 1, 40, 15, 17, 7, 0, 0, 0, 41, 41, -1, 31, 2, 0, 3, 0, 4, 0, 5, 0, 6, 1, 7, 2, 8, 0, 9, 3, 10, 3, 11, 2, 12, 1, 13, 2, 14, 16, 15, 17, 16, 6, 32, 10, 33, 18, 34, 14, 42, 1, 43, 3, 44, 3, 45, 5, 46, 0, 47, 0, 48, 1, 49, 0, 50, 2, 51, 2, 52, 4, 53, 5, 17, 7, 0, 4, 0, 19, 19, -1, 27, 2, 0, 3, 0, 4, 0, 5, 0, 6, 1, 7, 2, 8, 0, 9, 3, 10, 3, 11, 2, 12, 1, 13, 0, 14, 4, 15, 5, 16, 19, 20, 20, 21, 2, 22, 4, 23, 0, 24, 0, 25, 10, 26, 10, 27, 1, 28, 11, 29, 0, 30, 12, 17, 7, 0, 4, 0, 38, 38, -1, 18, 2, 0, 3, 0, 4, 0, 5, 0, 6, 1, 7, 2, 8, 0, 9, 3, 10, 3, 11, 2, 12, 1, 13, 2, 14, 4, 15, 5, 16, 6, 39, 1, 40, 21, 17, 7, 0, 0, 0, 54, 54, -1, 19, 2, 0, 3, 0, 4, 0, 5, 0, 6, 1, 7, 2, 8, 0, 9, 3, 10, 3, 11, 2, 12, 1, 13, 0, 14, 22, 15, 5, 16, 6, 55, 23, 56, 24, 57, 5, 17, 7, 0 </int_array>
+ <string> "conns" </string>
+ <int_array len="0"> </int_array>
+ </dictionary>
+ <resource name="script/script"></resource>
+ </main_resource>
+</resource_file> \ No newline at end of file
diff --git a/demos/2d/splash/bg.png b/demos/2d/splash/bg.png
new file mode 100644
index 0000000000..197a0484d2
--- /dev/null
+++ b/demos/2d/splash/bg.png
Binary files differ
diff --git a/demos/2d/splash/bg_layer_1.png b/demos/2d/splash/bg_layer_1.png
new file mode 100644
index 0000000000..7f18411465
--- /dev/null
+++ b/demos/2d/splash/bg_layer_1.png
Binary files differ
diff --git a/demos/2d/splash/bg_layer_2.png b/demos/2d/splash/bg_layer_2.png
new file mode 100644
index 0000000000..fac5574bfa
--- /dev/null
+++ b/demos/2d/splash/bg_layer_2.png
Binary files differ
diff --git a/demos/2d/splash/button.png b/demos/2d/splash/button.png
new file mode 100644
index 0000000000..ce62e011bd
--- /dev/null
+++ b/demos/2d/splash/button.png
Binary files differ
diff --git a/demos/2d/splash/button_pressed.png b/demos/2d/splash/button_pressed.png
new file mode 100644
index 0000000000..d9c31f2b6c
--- /dev/null
+++ b/demos/2d/splash/button_pressed.png
Binary files differ
diff --git a/demos/2d/splash/engine.cfg b/demos/2d/splash/engine.cfg
new file mode 100644
index 0000000000..cb50c7b1be
--- /dev/null
+++ b/demos/2d/splash/engine.cfg
@@ -0,0 +1,8 @@
+[application]
+
+name="Splash Screen"
+main_scene="res://splash.xml"
+
+[display]
+
+height=450
diff --git a/demos/2d/splash/freesans.fnt b/demos/2d/splash/freesans.fnt
new file mode 100644
index 0000000000..61167a20eb
--- /dev/null
+++ b/demos/2d/splash/freesans.fnt
Binary files differ
diff --git a/demos/2d/splash/splash.xml b/demos/2d/splash/splash.xml
new file mode 100644
index 0000000000..ecfcb0f5b5
--- /dev/null
+++ b/demos/2d/splash/splash.xml
@@ -0,0 +1,438 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<resource_file type="PackedScene" subresource_count="20" version="0.99" version_name="Godot Engine v0.99.3735-pre-beta">
+ <ext_resource path="res://splash_01.*" type="ImageTexture"></ext_resource>
+ <ext_resource path="res://splash_02.*" type="ImageTexture"></ext_resource>
+ <ext_resource path="res://splash_03.*" type="ImageTexture"></ext_resource>
+ <ext_resource path="res://splash_04.*" type="ImageTexture"></ext_resource>
+ <ext_resource path="res://splash_05.*" type="ImageTexture"></ext_resource>
+ <ext_resource path="res://splash_06.*" type="ImageTexture"></ext_resource>
+ <ext_resource path="res://splash_07.*" type="ImageTexture"></ext_resource>
+ <ext_resource path="res://splash_08.*" type="ImageTexture"></ext_resource>
+ <ext_resource path="res://splash_09.*" type="ImageTexture"></ext_resource>
+ <ext_resource path="res://bg.*" type="ImageTexture"></ext_resource>
+ <ext_resource path="res://bg_layer_2.*" type="ImageTexture"></ext_resource>
+ <ext_resource path="res://bg_layer_1.*" type="ImageTexture"></ext_resource>
+ <ext_resource path="res://button_pressed.*" type="ImageTexture"></ext_resource>
+ <ext_resource path="res://freesans.*" type="Font"></ext_resource>
+ <ext_resource path="res://button.*" type="ImageTexture"></ext_resource>
+ <resource type="Animation" path="local://1">
+ <string name="resource/name"> "scroll" </string>
+ <real name="length"> 1 </real>
+ <bool name="loop"> True </bool>
+ <real name="step"> 0.1 </real>
+ <string name="tracks/0/type"> "value" </string>
+ <node_path name="tracks/0/path"> ".:rect/pos" </node_path>
+ <int name="tracks/0/interp"> 1 </int>
+ <dictionary name="tracks/0/keys" shared="false">
+ <string> "cont" </string>
+ <bool> True </bool>
+ <string> "transitions" </string>
+ <real_array len="2"> 1, 1 </real_array>
+ <string> "values" </string>
+ <array len="2" shared="false">
+ <vector2> 0, 0 </vector2>
+ <vector2> -800, 0 </vector2>
+ </array>
+ <string> "times" </string>
+ <real_array len="2"> 0, 1 </real_array>
+ </dictionary>
+
+ </resource>
+ <resource type="SpriteFrames" path="local://2">
+ <array name="frames" len="9" shared="false">
+ <resource resource_type="ImageTexture" path="res://splash_01.*"> </resource>
+ <resource resource_type="ImageTexture" path="res://splash_02.*"> </resource>
+ <resource resource_type="ImageTexture" path="res://splash_03.*"> </resource>
+ <resource resource_type="ImageTexture" path="res://splash_04.*"> </resource>
+ <resource resource_type="ImageTexture" path="res://splash_05.*"> </resource>
+ <resource resource_type="ImageTexture" path="res://splash_06.*"> </resource>
+ <resource resource_type="ImageTexture" path="res://splash_07.*"> </resource>
+ <resource resource_type="ImageTexture" path="res://splash_08.*"> </resource>
+ <resource resource_type="ImageTexture" path="res://splash_09.*"> </resource>
+ </array>
+
+ </resource>
+ <resource type="Animation" path="local://3">
+ <string name="resource/name"> "loop" </string>
+ <real name="length"> 0.6 </real>
+ <bool name="loop"> True </bool>
+ <real name="step"> 0.1 </real>
+ <string name="tracks/0/type"> "value" </string>
+ <node_path name="tracks/0/path"> "logo:frame" </node_path>
+ <int name="tracks/0/interp"> 1 </int>
+ <dictionary name="tracks/0/keys" shared="false">
+ <string> "cont" </string>
+ <bool> False </bool>
+ <string> "transitions" </string>
+ <real_array len="2"> 1, 1 </real_array>
+ <string> "values" </string>
+ <array len="2" shared="false">
+ <int> 8 </int>
+ <int> 7 </int>
+ </array>
+ <string> "times" </string>
+ <real_array len="2"> 0, 0.3 </real_array>
+ </dictionary>
+
+ </resource>
+ <resource type="Animation" path="local://4">
+ <string name="resource/name"> "intro" </string>
+ <real name="length"> 3 </real>
+ <bool name="loop"> False </bool>
+ <real name="step"> 0.1 </real>
+ <string name="tracks/0/type"> "value" </string>
+ <node_path name="tracks/0/path"> "logo:transform/pos" </node_path>
+ <int name="tracks/0/interp"> 1 </int>
+ <dictionary name="tracks/0/keys" shared="false">
+ <string> "cont" </string>
+ <bool> True </bool>
+ <string> "transitions" </string>
+ <real_array len="2"> 2, 1 </real_array>
+ <string> "values" </string>
+ <array len="2" shared="false">
+ <vector2> 412, -212.981 </vector2>
+ <vector2> 412, 171 </vector2>
+ </array>
+ <string> "times" </string>
+ <real_array len="2"> 1, 1.5 </real_array>
+ </dictionary>
+ <string name="tracks/1/type"> "value" </string>
+ <node_path name="tracks/1/path"> "logo:frame" </node_path>
+ <int name="tracks/1/interp"> 1 </int>
+ <dictionary name="tracks/1/keys" shared="false">
+ <string> "cont" </string>
+ <bool> False </bool>
+ <string> "transitions" </string>
+ <real_array len="10"> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 </real_array>
+ <string> "values" </string>
+ <array len="10" shared="false">
+ <int> 0 </int>
+ <int> 0 </int>
+ <int> 1 </int>
+ <int> 2 </int>
+ <int> 3 </int>
+ <int> 4 </int>
+ <int> 5 </int>
+ <int> 6 </int>
+ <int> 7 </int>
+ <int> 8 </int>
+ </array>
+ <string> "times" </string>
+ <real_array len="10"> 0, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3 </real_array>
+ </dictionary>
+ <string name="tracks/2/type"> "value" </string>
+ <node_path name="tracks/2/path"> "start:visibility/opacity" </node_path>
+ <int name="tracks/2/interp"> 1 </int>
+ <dictionary name="tracks/2/keys" shared="false">
+ <string> "cont" </string>
+ <bool> True </bool>
+ <string> "transitions" </string>
+ <real_array len="2"> 1, 1 </real_array>
+ <string> "values" </string>
+ <array len="2" shared="false">
+ <real> 0 </real>
+ <real> 1 </real>
+ </array>
+ <string> "times" </string>
+ <real_array len="2"> 2.5, 2.8 </real_array>
+ </dictionary>
+ <string name="tracks/3/type"> "value" </string>
+ <node_path name="tracks/3/path"> "start:visibility/visible" </node_path>
+ <int name="tracks/3/interp"> 1 </int>
+ <dictionary name="tracks/3/keys" shared="false">
+ <string> "cont" </string>
+ <bool> False </bool>
+ <string> "transitions" </string>
+ <real_array len="2"> 1, 1 </real_array>
+ <string> "values" </string>
+ <array len="2" shared="false">
+ <bool> False </bool>
+ <bool> True </bool>
+ </array>
+ <string> "times" </string>
+ <real_array len="2"> 0, 2.5 </real_array>
+ </dictionary>
+ <string name="tracks/4/type"> "value" </string>
+ <node_path name="tracks/4/path"> "copyright:visibility/visible" </node_path>
+ <int name="tracks/4/interp"> 1 </int>
+ <dictionary name="tracks/4/keys" shared="false">
+ <string> "cont" </string>
+ <bool> False </bool>
+ <string> "transitions" </string>
+ <real_array len="2"> 1, 1 </real_array>
+ <string> "values" </string>
+ <array len="2" shared="false">
+ <bool> False </bool>
+ <bool> True </bool>
+ </array>
+ <string> "times" </string>
+ <real_array len="2"> 0, 2.5 </real_array>
+ </dictionary>
+ <string name="tracks/5/type"> "value" </string>
+ <node_path name="tracks/5/path"> "copyright:visibility/opacity" </node_path>
+ <int name="tracks/5/interp"> 1 </int>
+ <dictionary name="tracks/5/keys" shared="false">
+ <string> "cont" </string>
+ <bool> True </bool>
+ <string> "transitions" </string>
+ <real_array len="2"> 1, 1 </real_array>
+ <string> "values" </string>
+ <array len="2" shared="false">
+ <real> 0 </real>
+ <real> 1 </real>
+ </array>
+ <string> "times" </string>
+ <real_array len="2"> 2.5, 2.8 </real_array>
+ </dictionary>
+
+ </resource>
+ <main_resource>
+ <dictionary name="_bundled" shared="false">
+ <string> "names" </string>
+ <string_array len="81">
+ <string> "splash" </string>
+ <string> "Control" </string>
+ <string> "visibility/visible" </string>
+ <string> "visibility/opacity" </string>
+ <string> "visibility/self_opacity" </string>
+ <string> "visibility/on_top" </string>
+ <string> "anchor/right" </string>
+ <string> "anchor/bottom" </string>
+ <string> "focus_neighbour/left" </string>
+ <string> "focus_neighbour/top" </string>
+ <string> "focus_neighbour/right" </string>
+ <string> "focus_neighbour/bottom" </string>
+ <string> "focus/ignore_mouse" </string>
+ <string> "focus/stop_mouse" </string>
+ <string> "size_flags/horizontal" </string>
+ <string> "size_flags/vertical" </string>
+ <string> "size_flags/stretch_ratio" </string>
+ <string> "__meta__" </string>
+ <string> "bg" </string>
+ <string> "margin/right" </string>
+ <string> "margin/bottom" </string>
+ <string> "1" </string>
+ <string> "TextureFrame" </string>
+ <string> "texture" </string>
+ <string> "modulate" </string>
+ <string> "expand" </string>
+ <string> "2" </string>
+ <string> "margin/left" </string>
+ <string> "scroll" </string>
+ <string> "AnimationPlayer" </string>
+ <string> "playback/process_mode" </string>
+ <string> "playback/default_blend_time" </string>
+ <string> "root/root" </string>
+ <string> "anims/scroll" </string>
+ <string> "playback/active" </string>
+ <string> "playback/speed" </string>
+ <string> "blend_times" </string>
+ <string> "autoplay" </string>
+ <string> "layer2" </string>
+ <string> "margin/top" </string>
+ <string> "layer1" </string>
+ <string> "logo" </string>
+ <string> "AnimatedSprite" </string>
+ <string> "transform/pos" </string>
+ <string> "transform/rot" </string>
+ <string> "transform/scale" </string>
+ <string> "frames" </string>
+ <string> "frame" </string>
+ <string> "centered" </string>
+ <string> "flip_h" </string>
+ <string> "flip_v" </string>
+ <string> "start" </string>
+ <string> "TextureButton" </string>
+ <string> "disabled" </string>
+ <string> "toggle_mode" </string>
+ <string> "click_on_press" </string>
+ <string> "textures/normal" </string>
+ <string> "textures/pressed" </string>
+ <string> "textures/hover" </string>
+ <string> "textures/disabled" </string>
+ <string> "textures/focused" </string>
+ <string> "textures/click_mask" </string>
+ <string> "copyright" </string>
+ <string> "Label" </string>
+ <string> "custom_fonts/font" </string>
+ <string> "range/min" </string>
+ <string> "range/max" </string>
+ <string> "range/step" </string>
+ <string> "range/page" </string>
+ <string> "range/value" </string>
+ <string> "range/exp_edit" </string>
+ <string> "rounded_values" </string>
+ <string> "text" </string>
+ <string> "align" </string>
+ <string> "valign" </string>
+ <string> "autowrap" </string>
+ <string> "percent_visible" </string>
+ <string> "intro" </string>
+ <string> "anims/loop" </string>
+ <string> "anims/intro" </string>
+ <string> "next/intro" </string>
+ </string_array>
+ <string> "version" </string>
+ <int> 1 </int>
+ <string> "conn_count" </string>
+ <int> 0 </int>
+ <string> "node_count" </string>
+ <int> 17 </int>
+ <string> "variants" </string>
+ <array len="49" shared="false">
+ <bool> True </bool>
+ <real> 1 </real>
+ <int> 1 </int>
+ <node_path> "" </node_path>
+ <bool> False </bool>
+ <int> 2 </int>
+ <dictionary shared="false">
+ <string> "__editor_plugin_states__" </string>
+ <dictionary shared="false">
+ <string> "2D" </string>
+ <dictionary shared="false">
+ <string> "pixel_snap" </string>
+ <bool> True </bool>
+ <string> "zoom" </string>
+ <real> 0.54036 </real>
+ <string> "ofs" </string>
+ <vector2> -301.424, 3.30361 </vector2>
+ </dictionary>
+ <string> "3D" </string>
+ <dictionary shared="false">
+ <string> "zfar" </string>
+ <real> 500 </real>
+ <string> "fov" </string>
+ <real> 45 </real>
+ <string> "viewports" </string>
+ <array len="4" shared="false">
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ <dictionary shared="false">
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "x_rot" </string>
+ <real> 0 </real>
+ <string> "y_rot" </string>
+ <real> 0 </real>
+ <string> "use_orthogonal" </string>
+ <bool> False </bool>
+ <string> "use_environment" </string>
+ <bool> False </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ </array>
+ <string> "viewport_mode" </string>
+ <int> 1 </int>
+ <string> "default_light" </string>
+ <bool> True </bool>
+ <string> "show_grid" </string>
+ <bool> True </bool>
+ <string> "show_origin" </string>
+ <bool> True </bool>
+ <string> "znear" </string>
+ <real> 0.1 </real>
+ </dictionary>
+ </dictionary>
+ <string> "__editor_run_settings__" </string>
+ <dictionary shared="false">
+ <string> "custom_args" </string>
+ <string> "-l $scene" </string>
+ <string> "run_mode" </string>
+ <int> 0 </int>
+ </dictionary>
+ <string> "__editor_plugin_screen__" </string>
+ <string> "2D" </string>
+ </dictionary>
+ <real> 40 </real>
+ <resource resource_type="ImageTexture" path="res://bg.*"> </resource>
+ <color> 1, 1, 1, 1 </color>
+ <real> 800 </real>
+ <real> 1600 </real>
+ <real> 450 </real>
+ <real> 0 </real>
+ <node_path> ".." </node_path>
+ <resource resource_type="Animation" path="local://1"> </resource>
+ <real> 0.04 </real>
+ <array len="0" shared="false">
+ </array>
+ <string> "scroll" </string>
+ <real> 194 </real>
+ <real> 456 </real>
+ <resource resource_type="ImageTexture" path="res://bg_layer_2.*"> </resource>
+ <real> 0.1 </real>
+ <real> 212 </real>
+ <resource resource_type="ImageTexture" path="res://bg_layer_1.*"> </resource>
+ <real> 0.2 </real>
+ <vector2> 412, 171 </vector2>
+ <vector2> 1, 1 </vector2>
+ <resource resource_type="SpriteFrames" path="local://2"> </resource>
+ <int> 8 </int>
+ <real> 345 </real>
+ <real> 369 </real>
+ <real> 494 </real>
+ <real> 443 </real>
+ <resource resource_type="ImageTexture" path="res://button.*"> </resource>
+ <resource resource_type="ImageTexture" path="res://button_pressed.*"> </resource>
+ <resource name=""></resource> <real> 658 </real>
+ <real> 417 </real>
+ <real> 776 </real>
+ <real> 434 </real>
+ <resource resource_type="Font" path="res://freesans.*"> </resource>
+ <string> "(c) 1994 SOGA" </string>
+ <int> 0 </int>
+ <real> -1 </real>
+ <resource resource_type="Animation" path="local://3"> </resource>
+ <resource resource_type="Animation" path="local://4"> </resource>
+ <string> "loop" </string>
+ <string> "intro" </string>
+ </array>
+ <string> "nodes" </string>
+ <int_array len="675"> -1, -1, 1, 0, -1, 16, 2, 0, 3, 1, 4, 1, 5, 0, 6, 2, 7, 2, 8, 3, 9, 3, 10, 3, 11, 3, 12, 4, 13, 0, 14, 5, 15, 5, 16, 1, 17, 6, 0, 0, 0, 1, 18, -1, 15, 2, 0, 3, 1, 4, 1, 5, 0, 19, 7, 20, 7, 8, 3, 9, 3, 10, 3, 11, 3, 12, 4, 13, 0, 14, 5, 15, 5, 16, 1, 0, 1, 0, 22, 21, -1, 18, 2, 0, 3, 1, 4, 1, 5, 0, 19, 7, 20, 7, 8, 3, 9, 3, 10, 3, 11, 3, 12, 0, 13, 0, 14, 5, 15, 5, 16, 1, 23, 8, 24, 9, 25, 4, 0, 1, 0, 22, 26, -1, 19, 2, 0, 3, 1, 4, 1, 5, 0, 27, 10, 19, 11, 20, 12, 8, 3, 9, 3, 10, 3, 11, 3, 12, 0, 13, 0, 14, 5, 15, 5, 16, 1, 23, 8, 24, 9, 25, 4, 0, 1, 0, 29, 28, -1, 8, 30, 2, 31, 13, 32, 14, 33, 15, 34, 0, 35, 16, 36, 17, 37, 18, 0, 0, 0, 1, 38, -1, 15, 2, 0, 3, 1, 4, 1, 5, 0, 19, 7, 20, 7, 8, 3, 9, 3, 10, 3, 11, 3, 12, 4, 13, 0, 14, 5, 15, 5, 16, 1, 0, 5, 0, 22, 21, -1, 19, 2, 0, 3, 1, 4, 1, 5, 0, 39, 19, 19, 10, 20, 20, 8, 3, 9, 3, 10, 3, 11, 3, 12, 0, 13, 0, 14, 5, 15, 5, 16, 1, 23, 21, 24, 9, 25, 4, 0, 5, 0, 22, 26, -1, 20, 2, 0, 3, 1, 4, 1, 5, 0, 27, 10, 39, 19, 19, 11, 20, 20, 8, 3, 9, 3, 10, 3, 11, 3, 12, 0, 13, 0, 14, 5, 15, 5, 16, 1, 23, 21, 24, 9, 25, 4, 0, 5, 0, 29, 28, -1, 8, 30, 2, 31, 13, 32, 14, 33, 15, 34, 0, 35, 22, 36, 17, 37, 18, 0, 0, 0, 1, 40, -1, 15, 2, 0, 3, 1, 4, 1, 5, 0, 19, 7, 20, 7, 8, 3, 9, 3, 10, 3, 11, 3, 12, 4, 13, 0, 14, 5, 15, 5, 16, 1, 0, 9, 0, 22, 21, -1, 19, 2, 0, 3, 1, 4, 1, 5, 0, 39, 23, 19, 10, 20, 20, 8, 3, 9, 3, 10, 3, 11, 3, 12, 0, 13, 0, 14, 5, 15, 5, 16, 1, 23, 24, 24, 9, 25, 4, 0, 9, 0, 22, 26, -1, 20, 2, 0, 3, 1, 4, 1, 5, 0, 27, 10, 39, 23, 19, 11, 20, 20, 8, 3, 9, 3, 10, 3, 11, 3, 12, 0, 13, 0, 14, 5, 15, 5, 16, 1, 23, 24, 24, 9, 25, 4, 0, 9, 0, 29, 28, -1, 8, 30, 2, 31, 13, 32, 14, 33, 15, 34, 0, 35, 25, 36, 17, 37, 18, 0, 0, 0, 42, 41, -1, 13, 2, 0, 3, 1, 4, 1, 5, 0, 43, 26, 44, 13, 45, 27, 46, 28, 47, 29, 48, 0, 49, 4, 50, 4, 24, 9, 0, 0, 0, 52, 51, -1, 26, 2, 0, 3, 1, 4, 1, 5, 0, 27, 30, 39, 31, 19, 32, 20, 33, 8, 3, 9, 3, 10, 3, 11, 3, 12, 4, 13, 0, 14, 5, 15, 5, 16, 1, 53, 4, 54, 4, 55, 4, 56, 34, 57, 35, 58, 36, 59, 36, 60, 36, 61, 36, 0, 0, 0, 63, 62, -1, 29, 2, 0, 3, 1, 4, 1, 5, 0, 27, 37, 39, 38, 19, 39, 20, 40, 8, 3, 9, 3, 10, 3, 11, 3, 12, 0, 13, 0, 14, 5, 16, 1, 64, 41, 65, 13, 66, 1, 67, 1, 68, 1, 69, 13, 70, 4, 71, 4, 72, 42, 73, 43, 74, 43, 75, 4, 76, 44, 0, 0, 0, 29, 77, -1, 10, 30, 2, 31, 13, 32, 14, 78, 45, 79, 46, 80, 47, 34, 0, 35, 1, 36, 17, 37, 48, 0 </int_array>
+ <string> "conns" </string>
+ <int_array len="0"> </int_array>
+ </dictionary>
+
+ </main_resource>
+</resource_file> \ No newline at end of file
diff --git a/demos/2d/splash/splash_01.png b/demos/2d/splash/splash_01.png
new file mode 100644
index 0000000000..79a96ac735
--- /dev/null
+++ b/demos/2d/splash/splash_01.png
Binary files differ
diff --git a/demos/2d/splash/splash_02.png b/demos/2d/splash/splash_02.png
new file mode 100644
index 0000000000..fab8bc6b38
--- /dev/null
+++ b/demos/2d/splash/splash_02.png
Binary files differ
diff --git a/demos/2d/splash/splash_03.png b/demos/2d/splash/splash_03.png
new file mode 100644
index 0000000000..07c6cee8d2
--- /dev/null
+++ b/demos/2d/splash/splash_03.png
Binary files differ
diff --git a/demos/2d/splash/splash_04.png b/demos/2d/splash/splash_04.png
new file mode 100644
index 0000000000..e2b6a607ad
--- /dev/null
+++ b/demos/2d/splash/splash_04.png
Binary files differ
diff --git a/demos/2d/splash/splash_05.png b/demos/2d/splash/splash_05.png
new file mode 100644
index 0000000000..de42ab4cb7
--- /dev/null
+++ b/demos/2d/splash/splash_05.png
Binary files differ
diff --git a/demos/2d/splash/splash_06.png b/demos/2d/splash/splash_06.png
new file mode 100644
index 0000000000..c1b5e5dace
--- /dev/null
+++ b/demos/2d/splash/splash_06.png
Binary files differ
diff --git a/demos/2d/splash/splash_07.png b/demos/2d/splash/splash_07.png
new file mode 100644
index 0000000000..c65a6d8aec
--- /dev/null
+++ b/demos/2d/splash/splash_07.png
Binary files differ
diff --git a/demos/2d/splash/splash_08.png b/demos/2d/splash/splash_08.png
new file mode 100644
index 0000000000..0bcf0bafe4
--- /dev/null
+++ b/demos/2d/splash/splash_08.png
Binary files differ
diff --git a/demos/2d/splash/splash_09.png b/demos/2d/splash/splash_09.png
new file mode 100644
index 0000000000..de774104f9
--- /dev/null
+++ b/demos/2d/splash/splash_09.png
Binary files differ
diff --git a/demos/2d/tetris/block.png b/demos/2d/tetris/block.png
new file mode 100644
index 0000000000..b7759b35b4
--- /dev/null
+++ b/demos/2d/tetris/block.png
Binary files differ
diff --git a/demos/2d/tetris/engine.cfg b/demos/2d/tetris/engine.cfg
new file mode 100644
index 0000000000..b80a736c39
--- /dev/null
+++ b/demos/2d/tetris/engine.cfg
@@ -0,0 +1,17 @@
+[application]
+
+name="Tetris"
+main_scene="res://tetris.xml"
+icon="res://tetris.png"
+
+[display]
+
+width=400
+height=400
+
+[input]
+
+move_left=[key(Left)]
+move_right=[key(Right)]
+move_down=[key(Down)]
+rotate=[key(Space)]
diff --git a/demos/2d/tetris/grid.gd b/demos/2d/tetris/grid.gd
new file mode 100644
index 0000000000..dc89300881
--- /dev/null
+++ b/demos/2d/tetris/grid.gd
@@ -0,0 +1,216 @@
+
+
+extends Control
+
+# Simple Tetris-like demo, (c) 2012 Juan Linietsky
+# Implemented by using a regular Control and drawing on it during the _draw() callback.
+# The drawing surface is updated only when changes happen (by calling update())
+
+
+var score = 0
+var score_label=null
+
+const MAX_SHAPES = 7
+
+var block = preload("block.png")
+
+var block_colors=[
+ Color(1,0.5,0.5),
+ Color(0.5,1,0.5),
+ Color(0.5,0.5,1),
+ Color(0.8,0.4,0.8),
+ Color(0.8,0.8,0.4),
+ Color(0.4,0.8,0.8),
+ Color(0.7,0.7,0.7)]
+
+var block_shapes=[
+ [ Vector2(0,-1),Vector2(0,0),Vector2(0,1),Vector2(0,2) ], # I
+ [ Vector2(0,0),Vector2(1,0),Vector2(1,1),Vector2(0,1) ], # O
+ [ Vector2(-1,1),Vector2(0,1),Vector2(0,0),Vector2(1,0) ], # S
+ [ Vector2(1,1),Vector2(0,1),Vector2(0,0),Vector2(-1,0) ], # Z
+ [ Vector2(-1,1),Vector2(-1,0),Vector2(0,0),Vector2(1,0) ], # L
+ [ Vector2(1,1),Vector2(1,0),Vector2(0,0),Vector2(-1,0) ], # J
+ [ Vector2(0,1),Vector2(1,0),Vector2(0,0),Vector2(-1,0) ]] # T
+
+
+var block_rotations=[
+ Matrix32( Vector2(1,0),Vector2(0,1), Vector2() ),
+ Matrix32( Vector2(0,1),Vector2(-1,0), Vector2() ),
+ Matrix32( Vector2(-1,0),Vector2(0,-1), Vector2() ),
+ Matrix32( Vector2(0,-1),Vector2(1,0), Vector2() )
+]
+
+
+var width=0
+var height=0
+
+var cells={}
+
+var piece_active=false
+var piece_shape=0
+var piece_pos=Vector2()
+var piece_rot=0
+
+
+func piece_cell_xform(p,er=0):
+ var r = (4+er+piece_rot)%4
+ return piece_pos+block_rotations[r].xform(p)
+
+func _draw():
+
+ var sb = get_stylebox("bg","Tree") # use line edit bg
+ draw_style_box(sb,Rect2(Vector2(),get_size()).grow(3))
+
+ var bs = block.get_size()
+ for y in range(height):
+ for x in range(width):
+ if (Vector2(x,y) in cells):
+ draw_texture_rect(block,Rect2(Vector2(x,y)*bs,bs),false,block_colors[cells[Vector2(x,y)]])
+
+ if (piece_active):
+
+ for c in block_shapes[piece_shape]:
+ draw_texture_rect(block,Rect2(piece_cell_xform(c)*bs,bs),false,block_colors[piece_shape])
+
+
+func piece_check_fit(ofs,er=0):
+
+ for c in block_shapes[piece_shape]:
+ var pos = piece_cell_xform(c,er)+ofs
+ if (pos.x < 0):
+ return false
+ if (pos.y < 0):
+ return false
+ if (pos.x >= width):
+ return false
+ if (pos.y >= height):
+ return false
+ if (pos in cells):
+ return false
+
+ return true
+
+func new_piece():
+
+ piece_shape = randi() % MAX_SHAPES
+ piece_pos = Vector2(width/2,0)
+ piece_active=true
+ piece_rot=0
+ if (piece_shape==0):
+ piece_pos.y+=1
+
+ if (not piece_check_fit(Vector2())):
+ #game over
+ #print("GAME OVER!")
+ game_over()
+
+ update()
+
+
+func test_collapse_rows():
+ var accum_down=0
+ for i in range(height):
+ var y = height - i - 1
+ var collapse = true
+ for x in range(width):
+ if (Vector2(x,y) in cells):
+ if (accum_down):
+ cells[ Vector2(x,y+accum_down) ] = cells[Vector2(x,y)]
+ else:
+ collapse=false
+ if (accum_down):
+ cells.erase( Vector2(x,y+accum_down) )
+
+ if (collapse):
+ accum_down+=1
+
+
+ score+=accum_down*100
+ score_label.set_text(str(score))
+
+
+func game_over():
+
+ piece_active=false
+ get_node("gameover").set_text("Game Over")
+ update()
+
+
+func restart_pressed():
+
+ score=0
+ score_label.set_text("0")
+ cells.clear()
+ get_node("gameover").set_text("")
+ piece_active=true
+ update()
+
+
+
+func piece_move_down():
+
+ if (!piece_active):
+ return
+ if (piece_check_fit(Vector2(0,1))):
+ piece_pos.y+=1
+ update()
+ else:
+
+ for c in block_shapes[piece_shape]:
+ var pos = piece_cell_xform(c)
+ cells[pos]=piece_shape
+ test_collapse_rows()
+ new_piece()
+
+
+func piece_rotate():
+
+ var adv = 1
+ if (not piece_check_fit(Vector2(),1)):
+ return
+ piece_rot = (piece_rot + adv) % 4
+ update()
+
+
+
+func _input(ie):
+
+
+ if (not piece_active):
+ return
+ if (!ie.is_pressed()):
+ return
+
+ if (ie.is_action("move_left")):
+ if (piece_check_fit(Vector2(-1,0))):
+ piece_pos.x-=1
+ update()
+ elif (ie.is_action("move_right")):
+ if (piece_check_fit(Vector2(1,0))):
+ piece_pos.x+=1
+ update()
+ elif (ie.is_action("move_down")):
+ piece_move_down()
+ elif (ie.is_action("rotate")):
+ piece_rotate()
+
+
+func setup(w,h):
+ width=w
+ height=h
+ set_size( Vector2(w,h)*block.get_size() )
+ new_piece()
+ get_node("timer").start()
+
+
+func _ready():
+ # Initalization here
+
+ setup(10,20)
+ score_label = get_node("../score")
+
+ set_process_input(true)
+
+
+
+
diff --git a/demos/2d/tetris/grid.xml b/demos/2d/tetris/grid.xml
new file mode 100644
index 0000000000..072ffb5e75
--- /dev/null
+++ b/demos/2d/tetris/grid.xml
@@ -0,0 +1,153 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<resource_file type="PackedScene" subresource_count="2" version="0.99" version_name="Godot Engine v0.99.3037-pre-beta">
+ <ext_resource path="res://grid.gd" type="GDScript"></ext_resource>
+ <main_resource>
+ <string name="resource/name"> "" </string>
+ <dictionary name="_bundled">
+ <string> "names" </string>
+ <string_array len="57">
+ <string> "Grid" </string>
+ <string> "Control" </string>
+ <string> "process/process" </string>
+ <string> "process/fixed_process" </string>
+ <string> "process/input" </string>
+ <string> "process/unhandled_input" </string>
+ <string> "process/mode" </string>
+ <string> "visibility/visible" </string>
+ <string> "visibility/toplevel" </string>
+ <string> "visibility/opacity" </string>
+ <string> "visibility/self_opacity" </string>
+ <string> "visibility/on_top" </string>
+ <string> "visibility/blend_mode" </string>
+ <string> "transform/notify" </string>
+ <string> "anchor/left" </string>
+ <string> "anchor/top" </string>
+ <string> "anchor/right" </string>
+ <string> "anchor/bottom" </string>
+ <string> "margin/left" </string>
+ <string> "margin/top" </string>
+ <string> "margin/right" </string>
+ <string> "margin/bottom" </string>
+ <string> "hint/tooltip" </string>
+ <string> "focus_neighbour/left" </string>
+ <string> "focus_neighbour/top" </string>
+ <string> "focus_neighbour/right" </string>
+ <string> "focus_neighbour/bottom" </string>
+ <string> "focus/ignore_mouse" </string>
+ <string> "focus/stop_mouse" </string>
+ <string> "size_flags/horizontal" </string>
+ <string> "size_flags/vertical" </string>
+ <string> "size_flags/stretch_ratio" </string>
+ <string> "script/script" </string>
+ <string> "__meta__" </string>
+ <string> "timer" </string>
+ <string> "Timer" </string>
+ <string> "wait_time" </string>
+ <string> "one_shot" </string>
+ <string> "autostart" </string>
+ <string> "gameover" </string>
+ <string> "Label" </string>
+ <string> "custom_colors/font_color" </string>
+ <string> "custom_constants/shadow_offset_x" </string>
+ <string> "custom_constants/shadow_offset_y" </string>
+ <string> "range/min" </string>
+ <string> "range/max" </string>
+ <string> "range/step" </string>
+ <string> "range/page" </string>
+ <string> "range/value" </string>
+ <string> "range/exp_edit" </string>
+ <string> "rounded_values" </string>
+ <string> "text" </string>
+ <string> "align" </string>
+ <string> "valign" </string>
+ <string> "autowrap" </string>
+ <string> "piece_move_down" </string>
+ <string> "timeout" </string>
+ </string_array>
+ <string> "version" </string>
+ <int> 1 </int>
+ <string> "conn_count" </string>
+ <int> 1 </int>
+ <string> "node_count" </string>
+ <int> 3 </int>
+ <string> "variants" </string>
+ <array len="14">
+ <bool> False </bool>
+ <int> 0 </int>
+ <bool> True </bool>
+ <real> 1 </real>
+ <real> 0 </real>
+ <real> 40 </real>
+ <string> "" </string>
+ <node_path> "" </node_path>
+ <int> 2 </int>
+ <resource resource_type="GDScript" path="res://grid.gd"> </resource>
+ <dictionary>
+ <string> "__editor_plugin_states__" </string>
+ <dictionary>
+ <string> "Script" </string>
+ <dictionary>
+ <string> "current" </string>
+ <int> 0 </int>
+ <string> "sources" </string>
+ <array len="1">
+ <string> "res://grid.gd" </string>
+ </array>
+ </dictionary>
+ <string> "2D" </string>
+ <dictionary>
+ <string> "zoom" </string>
+ <real> 1 </real>
+ <string> "ofs" </string>
+ <vector2> -69, -22 </vector2>
+ </dictionary>
+ <string> "3D" </string>
+ <dictionary>
+ <string> "zfar" </string>
+ <real> 500 </real>
+ <string> "fov" </string>
+ <real> 45 </real>
+ <string> "window_mode" </string>
+ <int> 0 </int>
+ <string> "window_0" </string>
+ <dictionary>
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "default_light" </string>
+ <bool> True </bool>
+ <string> "x_rot" </string>
+ <real> 0.337 </real>
+ <string> "y_rot" </string>
+ <real> -0.575 </real>
+ <string> "show_grid" </string>
+ <bool> True </bool>
+ <string> "show_origin" </string>
+ <bool> True </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ <string> "znear" </string>
+ <real> 0.1 </real>
+ </dictionary>
+ </dictionary>
+ <string> "__editor_run_settings__" </string>
+ <dictionary>
+ <string> "custom_args" </string>
+ <string> "-l $scene" </string>
+ <string> "run_mode" </string>
+ <int> 0 </int>
+ </dictionary>
+ <string> "__editor_plugin_screen__" </string>
+ <string> "Script" </string>
+ </dictionary>
+ <resource name=""></resource> <int> 1 </int>
+ <color> 0, 0, 0, 1 </color>
+ </array>
+ <string> "nodes" </string>
+ <int_array len="193"> -1, -1, 1, 0, -1, 32, 2, 0, 3, 0, 4, 0, 5, 0, 6, 1, 7, 2, 8, 0, 9, 3, 10, 3, 11, 2, 12, 1, 13, 0, 14, 1, 15, 1, 16, 1, 17, 1, 18, 4, 19, 4, 20, 5, 21, 5, 22, 6, 23, 7, 24, 7, 25, 7, 26, 7, 27, 0, 28, 2, 29, 8, 30, 8, 31, 3, 32, 9, 33, 10, 0, 0, 0, 35, 34, -1, 9, 2, 0, 3, 0, 4, 0, 5, 0, 6, 1, 36, 3, 37, 0, 38, 0, 32, 11, 0, 0, 0, 40, 39, -1, 45, 2, 0, 3, 0, 4, 0, 5, 0, 6, 1, 7, 2, 8, 0, 9, 3, 10, 3, 11, 2, 12, 1, 13, 0, 14, 1, 15, 1, 16, 12, 17, 12, 18, 4, 19, 4, 20, 4, 21, 4, 22, 6, 23, 7, 24, 7, 25, 7, 26, 7, 27, 2, 28, 2, 29, 8, 30, 1, 31, 3, 41, 13, 42, 12, 43, 12, 44, 4, 45, 3, 46, 3, 47, 3, 48, 4, 49, 0, 50, 0, 51, 6, 52, 12, 53, 12, 54, 0, 32, 11, 0 </int_array>
+ <string> "conns" </string>
+ <int_array len="6"> 1, 0, 56, 55, 2, 0 </int_array>
+ </dictionary>
+ <resource name="script/script"></resource>
+ </main_resource>
+</resource_file> \ No newline at end of file
diff --git a/demos/2d/tetris/tetris.png b/demos/2d/tetris/tetris.png
new file mode 100644
index 0000000000..8b63977bfe
--- /dev/null
+++ b/demos/2d/tetris/tetris.png
Binary files differ
diff --git a/demos/2d/tetris/tetris.xml b/demos/2d/tetris/tetris.xml
new file mode 100644
index 0000000000..1b5e5afeb0
--- /dev/null
+++ b/demos/2d/tetris/tetris.xml
@@ -0,0 +1,171 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<resource_file type="PackedScene" subresource_count="2" version="0.99" version_name="Godot Engine v0.99.3037-pre-beta">
+ <ext_resource path="res://grid.xml" type="PackedScene"></ext_resource>
+ <main_resource>
+ <string name="resource/name"> "" </string>
+ <dictionary name="_bundled">
+ <string> "names" </string>
+ <string_array len="59">
+ <string> "Tetris" </string>
+ <string> "Panel" </string>
+ <string> "process/process" </string>
+ <string> "process/fixed_process" </string>
+ <string> "process/input" </string>
+ <string> "process/unhandled_input" </string>
+ <string> "process/mode" </string>
+ <string> "visibility/visible" </string>
+ <string> "visibility/toplevel" </string>
+ <string> "visibility/opacity" </string>
+ <string> "visibility/self_opacity" </string>
+ <string> "visibility/on_top" </string>
+ <string> "visibility/blend_mode" </string>
+ <string> "transform/notify" </string>
+ <string> "anchor/left" </string>
+ <string> "anchor/top" </string>
+ <string> "anchor/right" </string>
+ <string> "anchor/bottom" </string>
+ <string> "margin/left" </string>
+ <string> "margin/top" </string>
+ <string> "margin/right" </string>
+ <string> "margin/bottom" </string>
+ <string> "hint/tooltip" </string>
+ <string> "focus_neighbour/left" </string>
+ <string> "focus_neighbour/top" </string>
+ <string> "focus_neighbour/right" </string>
+ <string> "focus_neighbour/bottom" </string>
+ <string> "focus/ignore_mouse" </string>
+ <string> "focus/stop_mouse" </string>
+ <string> "size_flags/horizontal" </string>
+ <string> "size_flags/vertical" </string>
+ <string> "size_flags/stretch_ratio" </string>
+ <string> "script/script" </string>
+ <string> "__meta__" </string>
+ <string> "Grid" </string>
+ <string> "Control" </string>
+ <string> "Label" </string>
+ <string> "range/min" </string>
+ <string> "range/max" </string>
+ <string> "range/step" </string>
+ <string> "range/page" </string>
+ <string> "range/value" </string>
+ <string> "range/exp_edit" </string>
+ <string> "rounded_values" </string>
+ <string> "text" </string>
+ <string> "align" </string>
+ <string> "valign" </string>
+ <string> "autowrap" </string>
+ <string> "score" </string>
+ <string> "restart" </string>
+ <string> "Button" </string>
+ <string> "disabled" </string>
+ <string> "toggle_mode" </string>
+ <string> "click_on_press" </string>
+ <string> "icon" </string>
+ <string> "flat" </string>
+ <string> "clip_text" </string>
+ <string> "restart_pressed" </string>
+ <string> "pressed" </string>
+ </string_array>
+ <string> "version" </string>
+ <int> 1 </int>
+ <string> "conn_count" </string>
+ <int> 1 </int>
+ <string> "node_count" </string>
+ <int> 5 </int>
+ <string> "variants" </string>
+ <array len="30">
+ <bool> False </bool>
+ <int> 0 </int>
+ <bool> True </bool>
+ <real> 1 </real>
+ <real> 0 </real>
+ <real> 400 </real>
+ <string> "" </string>
+ <node_path> "" </node_path>
+ <int> 2 </int>
+ <resource name=""></resource> <dictionary>
+ <string> "__editor_plugin_states__" </string>
+ <dictionary>
+ <string> "Script" </string>
+ <dictionary>
+ <string> "current" </string>
+ <int> 0 </int>
+ <string> "sources" </string>
+ <array len="1">
+ <string> "res://grid.gd" </string>
+ </array>
+ </dictionary>
+ <string> "2D" </string>
+ <dictionary>
+ <string> "zoom" </string>
+ <real> 1.360374 </real>
+ <string> "ofs" </string>
+ <vector2> -44.5757, -54.344 </vector2>
+ </dictionary>
+ <string> "3D" </string>
+ <dictionary>
+ <string> "zfar" </string>
+ <real> 500 </real>
+ <string> "fov" </string>
+ <real> 45 </real>
+ <string> "window_mode" </string>
+ <int> 0 </int>
+ <string> "window_0" </string>
+ <dictionary>
+ <string> "distance" </string>
+ <real> 4 </real>
+ <string> "default_light" </string>
+ <bool> True </bool>
+ <string> "x_rot" </string>
+ <real> 0.337 </real>
+ <string> "y_rot" </string>
+ <real> -0.575 </real>
+ <string> "show_grid" </string>
+ <bool> True </bool>
+ <string> "show_origin" </string>
+ <bool> True </bool>
+ <string> "pos" </string>
+ <vector3> 0, 0, 0 </vector3>
+ </dictionary>
+ <string> "znear" </string>
+ <real> 0.1 </real>
+ </dictionary>
+ </dictionary>
+ <string> "__editor_run_settings__" </string>
+ <dictionary>
+ <string> "custom_args" </string>
+ <string> "-l $scene" </string>
+ <string> "run_mode" </string>
+ <int> 0 </int>
+ </dictionary>
+ <string> "__editor_plugin_screen__" </string>
+ <string> "2D" </string>
+ </dictionary>
+ <resource resource_type="PackedScene" path="res://grid.xml"> </resource>
+ <real> 40 </real>
+ <real> 35 </real>
+ <real> 80 </real>
+ <real> 75 </real>
+ <real> 243 </real>
+ <real> 36 </real>
+ <real> 283 </real>
+ <real> 49 </real>
+ <string> "Score:" </string>
+ <real> 252 </real>
+ <real> 55 </real>
+ <real> 293 </real>
+ <real> 68 </real>
+ <string> "0" </string>
+ <real> 292 </real>
+ <real> 303 </real>
+ <real> 311 </real>
+ <string> "Restart" </string>
+ </array>
+ <string> "nodes" </string>
+ <int_array len="351"> -1, -1, 1, 0, -1, 32, 2, 0, 3, 0, 4, 0, 5, 0, 6, 1, 7, 2, 8, 0, 9, 3, 10, 3, 11, 2, 12, 1, 13, 0, 14, 1, 15, 1, 16, 1, 17, 1, 18, 4, 19, 4, 20, 5, 21, 5, 22, 6, 23, 7, 24, 7, 25, 7, 26, 7, 27, 0, 28, 2, 29, 8, 30, 8, 31, 3, 32, 9, 33, 10, 0, 0, 0, 35, 34, 11, 4, 18, 12, 19, 13, 20, 14, 21, 15, 0, 0, 0, 36, 36, -1, 42, 2, 0, 3, 0, 4, 0, 5, 0, 6, 1, 7, 2, 8, 0, 9, 3, 10, 3, 11, 2, 12, 1, 13, 0, 14, 1, 15, 1, 16, 1, 17, 1, 18, 16, 19, 17, 20, 18, 21, 19, 22, 6, 23, 7, 24, 7, 25, 7, 26, 7, 27, 2, 28, 2, 29, 8, 30, 1, 31, 3, 37, 4, 38, 3, 39, 3, 40, 3, 41, 4, 42, 0, 43, 0, 44, 20, 45, 1, 46, 1, 47, 0, 32, 9, 0, 0, 0, 36, 48, -1, 42, 2, 0, 3, 0, 4, 0, 5, 0, 6, 1, 7, 2, 8, 0, 9, 3, 10, 3, 11, 2, 12, 1, 13, 0, 14, 1, 15, 1, 16, 1, 17, 1, 18, 21, 19, 22, 20, 23, 21, 24, 22, 6, 23, 7, 24, 7, 25, 7, 26, 7, 27, 2, 28, 2, 29, 8, 30, 1, 31, 3, 37, 4, 38, 3, 39, 3, 40, 3, 41, 4, 42, 0, 43, 0, 44, 25, 45, 1, 46, 1, 47, 0, 32, 9, 0, 0, 0, 50, 49, -1, 38, 2, 0, 3, 0, 4, 0, 5, 0, 6, 1, 7, 2, 8, 0, 9, 3, 10, 3, 11, 2, 12, 1, 13, 0, 14, 1, 15, 1, 16, 1, 17, 1, 18, 16, 19, 26, 20, 27, 21, 28, 22, 6, 23, 7, 24, 7, 25, 7, 26, 7, 27, 0, 28, 2, 29, 8, 30, 8, 31, 3, 51, 0, 52, 0, 53, 0, 44, 29, 54, 9, 55, 0, 56, 0, 32, 9, 0 </int_array>
+ <string> "conns" </string>
+ <int_array len="6"> 4, 1, 58, 57, 2, 0 </int_array>
+ </dictionary>
+ <resource name="script/script"></resource>
+ </main_resource>
+</resource_file> \ No newline at end of file