summaryrefslogtreecommitdiff
path: root/demos/2d/platformer
diff options
context:
space:
mode:
Diffstat (limited to 'demos/2d/platformer')
-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
42 files changed, 3688 insertions, 0 deletions
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