Browse Source

Merge pull request #865 from jtnicholl/physics_platformer

Update 2D physics platformer for 4.0
Rémi Verschelde 2 years ago
parent
commit
c34e3f33c6
45 changed files with 1241 additions and 757 deletions
  1. 4 4
      2d/physics_platformer/README.md
  2. 0 52
      2d/physics_platformer/Stage.tscn
  3. 0 349
      2d/physics_platformer/Tileset.tres
  4. 0 35
      2d/physics_platformer/background/Seesaw.tscn
  5. 0 0
      2d/physics_platformer/background/parallax_bg.tscn
  6. 1 1
      2d/physics_platformer/background/plank.png.import
  7. 1 1
      2d/physics_platformer/background/plankpin.png.import
  8. 1 1
      2d/physics_platformer/background/scroll_bg_cloud_1.png.import
  9. 1 1
      2d/physics_platformer/background/scroll_bg_cloud_2.png.import
  10. 1 1
      2d/physics_platformer/background/scroll_bg_cloud_3.png.import
  11. 1 1
      2d/physics_platformer/background/scroll_bg_fg_1.png.import
  12. 1 1
      2d/physics_platformer/background/scroll_bg_fg_2.png.import
  13. 1 1
      2d/physics_platformer/background/scroll_bg_sky.png.import
  14. 35 0
      2d/physics_platformer/background/seesaw.tscn
  15. 1 1
      2d/physics_platformer/coin/coin.png.import
  16. 0 0
      2d/physics_platformer/coin/coin.tscn
  17. 35 35
      2d/physics_platformer/enemy/enemy.gd
  18. 1 1
      2d/physics_platformer/enemy/enemy.png.import
  19. 85 59
      2d/physics_platformer/enemy/enemy.tscn
  20. BIN
      2d/physics_platformer/icon.png
  21. BIN
      2d/physics_platformer/icon.webp
  22. 5 5
      2d/physics_platformer/icon.webp.import
  23. 0 16
      2d/physics_platformer/platform/MovingPlatform.tscn
  24. 0 16
      2d/physics_platformer/platform/OneWayPlatform.tscn
  25. 0 17
      2d/physics_platformer/platform/moving_platform.gd
  26. 1 1
      2d/physics_platformer/platform/moving_platform.png.import
  27. 11 0
      2d/physics_platformer/platform/moving_platform.tscn
  28. 1 1
      2d/physics_platformer/platform/one_way_platform.png.import
  29. 16 0
      2d/physics_platformer/platform/one_way_platform.tscn
  30. 1 1
      2d/physics_platformer/player/bullet.png.import
  31. 0 0
      2d/physics_platformer/player/bullet.tscn
  32. 1 1
      2d/physics_platformer/player/osb_fire.png.import
  33. 1 1
      2d/physics_platformer/player/osb_jump.png.import
  34. 1 1
      2d/physics_platformer/player/osb_left.png.import
  35. 1 1
      2d/physics_platformer/player/osb_right.png.import
  36. 75 97
      2d/physics_platformer/player/player.gd
  37. 6 4
      2d/physics_platformer/player/player.tscn
  38. BIN
      2d/physics_platformer/player/player.webp
  39. 5 5
      2d/physics_platformer/player/player.webp.import
  40. BIN
      2d/physics_platformer/player/robot_demo.png
  41. 11 45
      2d/physics_platformer/project.godot
  42. 137 0
      2d/physics_platformer/stage.tscn
  43. 1 1
      2d/physics_platformer/tiles_demo.png.import
  44. 798 0
      2d/physics_platformer/tileset.tres
  45. 0 0
      2d/physics_platformer/tileset_edit.tscn

+ 4 - 4
2d/physics_platformer/README.md

@@ -1,15 +1,15 @@
 # Physics Platformer
 # Physics Platformer
 
 
-This demo uses [`RigidDynamicBody2D`](https://docs.godotengine.org/en/latest/classes/class_rigiddynamicbody2d.html)
+This demo uses [`RigidBody2D`](https://docs.godotengine.org/en/latest/classes/class_rigidbody2d.html)
 for the player and enemies.
 for the player and enemies.
 These character controllers are more powerful than
 These character controllers are more powerful than
-[`KinematicBody2D`](https://docs.godotengine.org/en/latest/classes/class_kinematicbody2d.html),
+[`CharacterBody2D`](https://docs.godotengine.org/en/latest/classes/class_characterbody2d.html),
 but can be more difficult to handle, as they require
 but can be more difficult to handle, as they require
 manual modification of the RigidDynamicBody velocity.
 manual modification of the RigidDynamicBody velocity.
 
 
 Language: GDScript
 Language: GDScript
 
 
-Renderer: GLES 2
+Renderer: Forward Plus
 
 
 Check out this demo on the asset library: https://godotengine.org/asset-library/asset/119
 Check out this demo on the asset library: https://godotengine.org/asset-library/asset/119
 
 
@@ -17,7 +17,7 @@ Check out this demo on the asset library: https://godotengine.org/asset-library/
 
 
 The player and enemies use dynamic character
 The player and enemies use dynamic character
 controllers for movement, made with
 controllers for movement, made with
-[`RigidDynamicBody2D`](https://docs.godotengine.org/en/latest/classes/class_rigiddynamicbody2d.html),
+[`RigidBody2D`](https://docs.godotengine.org/en/latest/classes/class_rigidbody2d.html),
 which means that they can perfectly interact with physics
 which means that they can perfectly interact with physics
 (there is a see-saw, and you can even ride enemies).
 (there is a see-saw, and you can even ride enemies).
 Because of this, all movement must be done in sync with
 Because of this, all movement must be done in sync with

File diff suppressed because it is too large
+ 0 - 52
2d/physics_platformer/Stage.tscn


+ 0 - 349
2d/physics_platformer/Tileset.tres

@@ -1,349 +0,0 @@
-[gd_resource type="TileSet" load_steps=14 format=2]
-
-[ext_resource path="res://tiles_demo.png" type="Texture2D" id=1]
-
-[sub_resource type="ConvexPolygonShape2D" id=1]
-points = PackedVector2Array( -16, -12, 16, -12, 16, 16, -16, 16 )
-
-[sub_resource type="ConvexPolygonShape2D" id=2]
-points = PackedVector2Array( -16, 16, -16, -12, 12, -12, 12, 16 )
-
-[sub_resource type="ConvexPolygonShape2D" id=3]
-points = PackedVector2Array( -16, -16, 16, -16, 16, 16, -16, 16 )
-
-[sub_resource type="ConvexPolygonShape2D" id=4]
-points = PackedVector2Array( -16, -28, 16, 4, 16, 32, -16, 32 )
-
-[sub_resource type="ConvexPolygonShape2D" id=5]
-points = PackedVector2Array( -16, 16, -16, -16, 12, -16, 12, 16 )
-
-[sub_resource type="ConvexPolygonShape2D" id=6]
-points = PackedVector2Array( -16, -12, 16, -12, 16, 12, -16, 12 )
-
-[sub_resource type="ConvexPolygonShape2D" id=7]
-points = PackedVector2Array( -16, -12, 12, -12, 12, 12, -16, 12 )
-
-[sub_resource type="ConvexPolygonShape2D" id=8]
-points = PackedVector2Array( -16, 16, -16, -16, 12, -16, 12, 16 )
-
-[sub_resource type="ConvexPolygonShape2D" id=9]
-points = PackedVector2Array( -32, 16, -32, -16, -4, -16, -4, 16 )
-
-[sub_resource type="ConvexPolygonShape2D" id=10]
-points = PackedVector2Array( -16, 16, -16, -16, 12, -16, 16, -12, 16, 16 )
-
-[sub_resource type="ConvexPolygonShape2D" id=11]
-points = PackedVector2Array( -16, 16, -16, -12, 16, -12, 16, 16 )
-
-[sub_resource type="ConvexPolygonShape2D" id=12]
-points = PackedVector2Array( -16, 16, -16, -12, 16, -12, 16, 16 )
-
-[resource]
-0/name = "floor"
-0/texture = ExtResource( 1 )
-0/tex_offset = Vector2( 0, 0 )
-0/modulate = Color( 1, 1, 1, 1 )
-0/region = Rect2( 0, 0, 32, 32 )
-0/tile_mode = 0
-0/occluder_offset = Vector2( 16, 16 )
-0/navigation_offset = Vector2( 16, 16 )
-0/shape_offset = Vector2( 16, 16 )
-0/shape_transform = Transform2D( 1, 0, 0, 1, 16, 16 )
-0/shape = SubResource( 1 )
-0/shape_one_way = false
-0/shape_one_way_margin = 1.0
-0/shapes = [ {
-"autotile_coord": Vector2( 0, 0 ),
-"one_way": false,
-"one_way_margin": 1.0,
-"shape": SubResource( 1 ),
-"shape_transform": Transform2D( 1, 0, 0, 1, 16, 16 )
-} ]
-0/z_index = 0
-1/name = "edge"
-1/texture = ExtResource( 1 )
-1/tex_offset = Vector2( 0, 0 )
-1/modulate = Color( 1, 1, 1, 1 )
-1/region = Rect2( 32, 0, 32, 32 )
-1/tile_mode = 0
-1/occluder_offset = Vector2( 16, 16 )
-1/navigation_offset = Vector2( 16, 16 )
-1/shape_offset = Vector2( 16, 16 )
-1/shape_transform = Transform2D( 1, 0, 0, 1, 16, 16 )
-1/shape = SubResource( 2 )
-1/shape_one_way = false
-1/shape_one_way_margin = 1.0
-1/shapes = [ {
-"autotile_coord": Vector2( 0, 0 ),
-"one_way": false,
-"one_way_margin": 1.0,
-"shape": SubResource( 2 ),
-"shape_transform": Transform2D( 1, 0, 0, 1, 16, 16 )
-} ]
-1/z_index = 0
-2/name = "wall"
-2/texture = ExtResource( 1 )
-2/tex_offset = Vector2( 0, 0 )
-2/modulate = Color( 1, 1, 1, 1 )
-2/region = Rect2( 32, 32, 32, 32 )
-2/tile_mode = 0
-2/occluder_offset = Vector2( 16, 16 )
-2/navigation_offset = Vector2( 16, 16 )
-2/shape_offset = Vector2( 16, 16 )
-2/shape_transform = Transform2D( 1, 0, 0, 1, 16, 16 )
-2/shape = SubResource( 8 )
-2/shape_one_way = false
-2/shape_one_way_margin = 1.0
-2/shapes = [ {
-"autotile_coord": Vector2( 0, 0 ),
-"one_way": false,
-"one_way_margin": 1.0,
-"shape": SubResource( 8 ),
-"shape_transform": Transform2D( 1, 0, 0, 1, 16, 16 )
-} ]
-2/z_index = 0
-3/name = "wall_deco"
-3/texture = ExtResource( 1 )
-3/tex_offset = Vector2( 0, 0 )
-3/modulate = Color( 1, 1, 1, 1 )
-3/region = Rect2( 160, 64, 64, 32 )
-3/tile_mode = 0
-3/occluder_offset = Vector2( 32, 16 )
-3/navigation_offset = Vector2( 32, 16 )
-3/shape_offset = Vector2( 32, 16 )
-3/shape_transform = Transform2D( 1, 0, 0, 1, 32, 16 )
-3/shape = SubResource( 9 )
-3/shape_one_way = false
-3/shape_one_way_margin = 1.0
-3/shapes = [ {
-"autotile_coord": Vector2( 0, 0 ),
-"one_way": false,
-"one_way_margin": 1.0,
-"shape": SubResource( 9 ),
-"shape_transform": Transform2D( 1, 0, 0, 1, 32, 16 )
-} ]
-3/z_index = 0
-4/name = "corner"
-4/texture = ExtResource( 1 )
-4/tex_offset = Vector2( 0, 0 )
-4/modulate = Color( 1, 1, 1, 1 )
-4/region = Rect2( 32, 64, 32, 32 )
-4/tile_mode = 0
-4/occluder_offset = Vector2( 16, 16 )
-4/navigation_offset = Vector2( 16, 16 )
-4/shape_offset = Vector2( 16, 16 )
-4/shape_transform = Transform2D( 1, 0, 0, 1, 16, 16 )
-4/shape = SubResource( 10 )
-4/shape_one_way = false
-4/shape_one_way_margin = 1.0
-4/shapes = [ {
-"autotile_coord": Vector2( 0, 0 ),
-"one_way": false,
-"one_way_margin": 1.0,
-"shape": SubResource( 10 ),
-"shape_transform": Transform2D( 1, 0, 0, 1, 16, 16 )
-} ]
-4/z_index = 0
-5/name = "flowers"
-5/texture = ExtResource( 1 )
-5/tex_offset = Vector2( 0, 0 )
-5/modulate = Color( 1, 1, 1, 1 )
-5/region = Rect2( 96, 96, 32, 32 )
-5/tile_mode = 0
-5/occluder_offset = Vector2( 16, 16 )
-5/navigation_offset = Vector2( 16, 16 )
-5/shape_offset = Vector2( 16, 16 )
-5/shape_transform = Transform2D( 1, 0, 0, 1, 16, 16 )
-5/shape = SubResource( 11 )
-5/shape_one_way = false
-5/shape_one_way_margin = 1.0
-5/shapes = [ {
-"autotile_coord": Vector2( 0, 0 ),
-"one_way": false,
-"one_way_margin": 1.0,
-"shape": SubResource( 11 ),
-"shape_transform": Transform2D( 1, 0, 0, 1, 16, 16 )
-} ]
-5/z_index = 0
-6/name = "tree_base"
-6/texture = ExtResource( 1 )
-6/tex_offset = Vector2( 0, 0 )
-6/modulate = Color( 1, 1, 1, 1 )
-6/region = Rect2( 128, 96, 32, 32 )
-6/tile_mode = 0
-6/occluder_offset = Vector2( 16, 16 )
-6/navigation_offset = Vector2( 16, 16 )
-6/shape_offset = Vector2( 16, 16 )
-6/shape_transform = Transform2D( 1, 0, 0, 1, 16, 16 )
-6/shape = SubResource( 12 )
-6/shape_one_way = false
-6/shape_one_way_margin = 1.0
-6/shapes = [ {
-"autotile_coord": Vector2( 0, 0 ),
-"one_way": false,
-"one_way_margin": 1.0,
-"shape": SubResource( 12 ),
-"shape_transform": Transform2D( 1, 0, 0, 1, 16, 16 )
-} ]
-6/z_index = 0
-7/name = "tree_mid"
-7/texture = ExtResource( 1 )
-7/tex_offset = Vector2( 0, 0 )
-7/modulate = Color( 1, 1, 1, 1 )
-7/region = Rect2( 128, 64, 32, 32 )
-7/tile_mode = 0
-7/occluder_offset = Vector2( 16, 16 )
-7/navigation_offset = Vector2( 16, 16 )
-7/shape_offset = Vector2( 0, 0 )
-7/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
-7/shape_one_way = false
-7/shape_one_way_margin = 0.0
-7/shapes = [  ]
-7/z_index = 0
-8/name = "tree_mid 2"
-8/texture = ExtResource( 1 )
-8/tex_offset = Vector2( 0, 0 )
-8/modulate = Color( 1, 1, 1, 1 )
-8/region = Rect2( 128, 32, 32, 32 )
-8/tile_mode = 0
-8/occluder_offset = Vector2( 16, 16 )
-8/navigation_offset = Vector2( 16, 16 )
-8/shape_offset = Vector2( 0, 0 )
-8/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
-8/shape_one_way = false
-8/shape_one_way_margin = 0.0
-8/shapes = [  ]
-8/z_index = 0
-9/name = "tree_top"
-9/texture = ExtResource( 1 )
-9/tex_offset = Vector2( 0, 0 )
-9/modulate = Color( 1, 1, 1, 1 )
-9/region = Rect2( 128, 0, 32, 32 )
-9/tile_mode = 0
-9/occluder_offset = Vector2( 16, 16 )
-9/navigation_offset = Vector2( 16, 16 )
-9/shape_offset = Vector2( 0, 0 )
-9/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
-9/shape_one_way = false
-9/shape_one_way_margin = 0.0
-9/shapes = [  ]
-9/z_index = 0
-10/name = "solid"
-10/texture = ExtResource( 1 )
-10/tex_offset = Vector2( 0, 0 )
-10/modulate = Color( 1, 1, 1, 1 )
-10/region = Rect2( 0, 32, 32, 32 )
-10/tile_mode = 0
-10/occluder_offset = Vector2( 16, 16 )
-10/navigation_offset = Vector2( 16, 16 )
-10/shape_offset = Vector2( 0, 0 )
-10/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
-10/shape_one_way = false
-10/shape_one_way_margin = 0.0
-10/shapes = [  ]
-10/z_index = 0
-11/name = "ceiling"
-11/texture = ExtResource( 1 )
-11/tex_offset = Vector2( 0, 0 )
-11/modulate = Color( 1, 1, 1, 1 )
-11/region = Rect2( 192, 32, 32, 32 )
-11/tile_mode = 0
-11/occluder_offset = Vector2( 16, 16 )
-11/navigation_offset = Vector2( 16, 16 )
-11/shape_offset = Vector2( 16, 16 )
-11/shape_transform = Transform2D( 1, 0, 0, 1, 16, 16 )
-11/shape = SubResource( 3 )
-11/shape_one_way = false
-11/shape_one_way_margin = 1.0
-11/shapes = [ {
-"autotile_coord": Vector2( 0, 0 ),
-"one_way": false,
-"one_way_margin": 1.0,
-"shape": SubResource( 3 ),
-"shape_transform": Transform2D( 1, 0, 0, 1, 16, 16 )
-} ]
-11/z_index = 0
-12/name = "ramp"
-12/texture = ExtResource( 1 )
-12/tex_offset = Vector2( 0, 0 )
-12/modulate = Color( 1, 1, 1, 1 )
-12/region = Rect2( 64, 64, 32, 64 )
-12/tile_mode = 0
-12/occluder_offset = Vector2( 16, 32 )
-12/navigation_offset = Vector2( 16, 32 )
-12/shape_offset = Vector2( 16, 32 )
-12/shape_transform = Transform2D( 1, 0, 0, 1, 16, 32 )
-12/shape = SubResource( 4 )
-12/shape_one_way = false
-12/shape_one_way_margin = 1.0
-12/shapes = [ {
-"autotile_coord": Vector2( 0, 0 ),
-"one_way": false,
-"one_way_margin": 1.0,
-"shape": SubResource( 4 ),
-"shape_transform": Transform2D( 1, 0, 0, 1, 16, 32 )
-} ]
-12/z_index = 0
-13/name = "ceiling2wall"
-13/texture = ExtResource( 1 )
-13/tex_offset = Vector2( 0, 0 )
-13/modulate = Color( 1, 1, 1, 1 )
-13/region = Rect2( 224, 32, 32, 32 )
-13/tile_mode = 0
-13/occluder_offset = Vector2( 16, 16 )
-13/navigation_offset = Vector2( 16, 16 )
-13/shape_offset = Vector2( 16, 16 )
-13/shape_transform = Transform2D( 1, 0, 0, 1, 16, 16 )
-13/shape = SubResource( 5 )
-13/shape_one_way = false
-13/shape_one_way_margin = 1.0
-13/shapes = [ {
-"autotile_coord": Vector2( 0, 0 ),
-"one_way": false,
-"one_way_margin": 1.0,
-"shape": SubResource( 5 ),
-"shape_transform": Transform2D( 1, 0, 0, 1, 16, 16 )
-} ]
-13/z_index = 0
-14/name = "platform_floor"
-14/texture = ExtResource( 1 )
-14/tex_offset = Vector2( 0, 0 )
-14/modulate = Color( 1, 1, 1, 1 )
-14/region = Rect2( 64, 0, 32, 32 )
-14/tile_mode = 0
-14/occluder_offset = Vector2( 16, 16 )
-14/navigation_offset = Vector2( 16, 16 )
-14/shape_offset = Vector2( 16, 16 )
-14/shape_transform = Transform2D( 1, 0, 0, 1, 16, 16 )
-14/shape = SubResource( 6 )
-14/shape_one_way = false
-14/shape_one_way_margin = 1.0
-14/shapes = [ {
-"autotile_coord": Vector2( 0, 0 ),
-"one_way": false,
-"one_way_margin": 1.0,
-"shape": SubResource( 6 ),
-"shape_transform": Transform2D( 1, 0, 0, 1, 16, 16 )
-} ]
-14/z_index = 0
-15/name = "platform_edge"
-15/texture = ExtResource( 1 )
-15/tex_offset = Vector2( 0, 0 )
-15/modulate = Color( 1, 1, 1, 1 )
-15/region = Rect2( 96, 0, 32, 32 )
-15/tile_mode = 0
-15/occluder_offset = Vector2( 16, 16 )
-15/navigation_offset = Vector2( 16, 16 )
-15/shape_offset = Vector2( 16, 16 )
-15/shape_transform = Transform2D( 1, 0, 0, 1, 16, 16 )
-15/shape = SubResource( 7 )
-15/shape_one_way = false
-15/shape_one_way_margin = 1.0
-15/shapes = [ {
-"autotile_coord": Vector2( 0, 0 ),
-"one_way": false,
-"one_way_margin": 1.0,
-"shape": SubResource( 7 ),
-"shape_transform": Transform2D( 1, 0, 0, 1, 16, 16 )
-} ]
-15/z_index = 0

+ 0 - 35
2d/physics_platformer/background/Seesaw.tscn

@@ -1,35 +0,0 @@
-[gd_scene load_steps=5 format=2]
-
-[ext_resource path="res://background/plank.png" type="Texture2D" id=1]
-[ext_resource path="res://background/plankpin.png" type="Texture2D" id=2]
-
-[sub_resource type="RectangleShape2D" id=1]
-extents = Vector2(64, 4)
-
-[sub_resource type="RectangleShape2D" id=2]
-extents = Vector2(8, 13.5)
-
-[node name="Seesaw" type="Node2D"]
-
-[node name="Plank" type="RigidDynamicBody2D" parent="."]
-mass = 5.10204
-
-[node name="Sprite2D" type="Sprite2D" parent="Plank"]
-texture = ExtResource( 1 )
-
-[node name="CollisionShape2D" type="CollisionShape2D" parent="Plank"]
-shape = SubResource( 1 )
-
-[node name="Pin" type="PinJoint2D" parent="."]
-node_a = NodePath("../Plank")
-node_b = NodePath("../Pillar")
-
-[node name="Pillar" type="StaticBody2D" parent="."]
-
-[node name="Sprite2D" type="Sprite2D" parent="Pillar"]
-position = Vector2(0, 10)
-texture = ExtResource( 2 )
-
-[node name="CollisionShape2D" type="CollisionShape2D" parent="Pillar"]
-position = Vector2(0, 12.5)
-shape = SubResource( 2 )

+ 0 - 0
2d/physics_platformer/background/ParallaxBg.tscn → 2d/physics_platformer/background/parallax_bg.tscn


+ 1 - 1
2d/physics_platformer/background/plank.png.import

@@ -16,9 +16,9 @@ dest_files=["res://.godot/imported/plank.png-d70731fc82f225d8353819786c2ed28a.ct
 [params]
 [params]
 
 
 compress/mode=0
 compress/mode=0
+compress/high_quality=false
 compress/lossy_quality=0.7
 compress/lossy_quality=0.7
 compress/hdr_compression=1
 compress/hdr_compression=1
-compress/bptc_ldr=0
 compress/normal_map=0
 compress/normal_map=0
 compress/channel_pack=0
 compress/channel_pack=0
 mipmaps/generate=false
 mipmaps/generate=false

+ 1 - 1
2d/physics_platformer/background/plankpin.png.import

@@ -16,9 +16,9 @@ dest_files=["res://.godot/imported/plankpin.png-68d06cc4b9ab95f9d0142d1a4c768140
 [params]
 [params]
 
 
 compress/mode=0
 compress/mode=0
+compress/high_quality=false
 compress/lossy_quality=0.7
 compress/lossy_quality=0.7
 compress/hdr_compression=1
 compress/hdr_compression=1
-compress/bptc_ldr=0
 compress/normal_map=0
 compress/normal_map=0
 compress/channel_pack=0
 compress/channel_pack=0
 mipmaps/generate=false
 mipmaps/generate=false

+ 1 - 1
2d/physics_platformer/background/scroll_bg_cloud_1.png.import

@@ -16,9 +16,9 @@ dest_files=["res://.godot/imported/scroll_bg_cloud_1.png-19f55c25a7e1985c92542fa
 [params]
 [params]
 
 
 compress/mode=0
 compress/mode=0
+compress/high_quality=false
 compress/lossy_quality=0.7
 compress/lossy_quality=0.7
 compress/hdr_compression=1
 compress/hdr_compression=1
-compress/bptc_ldr=0
 compress/normal_map=0
 compress/normal_map=0
 compress/channel_pack=0
 compress/channel_pack=0
 mipmaps/generate=false
 mipmaps/generate=false

+ 1 - 1
2d/physics_platformer/background/scroll_bg_cloud_2.png.import

@@ -16,9 +16,9 @@ dest_files=["res://.godot/imported/scroll_bg_cloud_2.png-869806dcc546591f3d754e3
 [params]
 [params]
 
 
 compress/mode=0
 compress/mode=0
+compress/high_quality=false
 compress/lossy_quality=0.7
 compress/lossy_quality=0.7
 compress/hdr_compression=1
 compress/hdr_compression=1
-compress/bptc_ldr=0
 compress/normal_map=0
 compress/normal_map=0
 compress/channel_pack=0
 compress/channel_pack=0
 mipmaps/generate=false
 mipmaps/generate=false

+ 1 - 1
2d/physics_platformer/background/scroll_bg_cloud_3.png.import

@@ -16,9 +16,9 @@ dest_files=["res://.godot/imported/scroll_bg_cloud_3.png-831c6ed9fa8b4070081428a
 [params]
 [params]
 
 
 compress/mode=0
 compress/mode=0
+compress/high_quality=false
 compress/lossy_quality=0.7
 compress/lossy_quality=0.7
 compress/hdr_compression=1
 compress/hdr_compression=1
-compress/bptc_ldr=0
 compress/normal_map=0
 compress/normal_map=0
 compress/channel_pack=0
 compress/channel_pack=0
 mipmaps/generate=false
 mipmaps/generate=false

+ 1 - 1
2d/physics_platformer/background/scroll_bg_fg_1.png.import

@@ -16,9 +16,9 @@ dest_files=["res://.godot/imported/scroll_bg_fg_1.png-20c90ebded5095c6863cdf6b1b
 [params]
 [params]
 
 
 compress/mode=0
 compress/mode=0
+compress/high_quality=false
 compress/lossy_quality=0.7
 compress/lossy_quality=0.7
 compress/hdr_compression=1
 compress/hdr_compression=1
-compress/bptc_ldr=0
 compress/normal_map=0
 compress/normal_map=0
 compress/channel_pack=0
 compress/channel_pack=0
 mipmaps/generate=false
 mipmaps/generate=false

+ 1 - 1
2d/physics_platformer/background/scroll_bg_fg_2.png.import

@@ -16,9 +16,9 @@ dest_files=["res://.godot/imported/scroll_bg_fg_2.png-2b54decd69e8aff2caa33640a3
 [params]
 [params]
 
 
 compress/mode=0
 compress/mode=0
+compress/high_quality=false
 compress/lossy_quality=0.7
 compress/lossy_quality=0.7
 compress/hdr_compression=1
 compress/hdr_compression=1
-compress/bptc_ldr=0
 compress/normal_map=0
 compress/normal_map=0
 compress/channel_pack=0
 compress/channel_pack=0
 mipmaps/generate=false
 mipmaps/generate=false

+ 1 - 1
2d/physics_platformer/background/scroll_bg_sky.png.import

@@ -16,9 +16,9 @@ dest_files=["res://.godot/imported/scroll_bg_sky.png-377ea542199b2e23d7a822ed940
 [params]
 [params]
 
 
 compress/mode=0
 compress/mode=0
+compress/high_quality=false
 compress/lossy_quality=0.7
 compress/lossy_quality=0.7
 compress/hdr_compression=1
 compress/hdr_compression=1
-compress/bptc_ldr=0
 compress/normal_map=0
 compress/normal_map=0
 compress/channel_pack=0
 compress/channel_pack=0
 mipmaps/generate=false
 mipmaps/generate=false

+ 35 - 0
2d/physics_platformer/background/seesaw.tscn

@@ -0,0 +1,35 @@
+[gd_scene load_steps=5 format=3 uid="uid://rxbjx7rhfd8k"]
+
+[ext_resource type="Texture2D" uid="uid://c3w6uvr4jjkwa" path="res://background/plank.png" id="1"]
+[ext_resource type="Texture2D" uid="uid://ci8y3ieuf3ltc" path="res://background/plankpin.png" id="2"]
+
+[sub_resource type="RectangleShape2D" id="1"]
+size = Vector2(128, 8)
+
+[sub_resource type="RectangleShape2D" id="2"]
+size = Vector2(16, 27)
+
+[node name="Seesaw" type="Node2D"]
+
+[node name="Plank" type="RigidBody2D" parent="."]
+mass = 5.10204
+
+[node name="Sprite2D" type="Sprite2D" parent="Plank"]
+texture = ExtResource("1")
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Plank"]
+shape = SubResource("1")
+
+[node name="Pin" type="PinJoint2D" parent="."]
+node_a = NodePath("../Plank")
+node_b = NodePath("../Pillar")
+
+[node name="Pillar" type="StaticBody2D" parent="."]
+
+[node name="Sprite2D" type="Sprite2D" parent="Pillar"]
+position = Vector2(0, 10)
+texture = ExtResource("2")
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Pillar"]
+position = Vector2(0, 12.5)
+shape = SubResource("2")

+ 1 - 1
2d/physics_platformer/coin/coin.png.import

@@ -16,9 +16,9 @@ dest_files=["res://.godot/imported/coin.png-c9e5c2f51b2a10beb2d794afbbee004f.cte
 [params]
 [params]
 
 
 compress/mode=0
 compress/mode=0
+compress/high_quality=false
 compress/lossy_quality=0.7
 compress/lossy_quality=0.7
 compress/hdr_compression=1
 compress/hdr_compression=1
-compress/bptc_ldr=0
 compress/normal_map=0
 compress/normal_map=0
 compress/channel_pack=0
 compress/channel_pack=0
 mipmaps/generate=false
 mipmaps/generate=false

+ 0 - 0
2d/physics_platformer/coin/Coin.tscn → 2d/physics_platformer/coin/coin.tscn


+ 35 - 35
2d/physics_platformer/enemy/enemy.gd

@@ -1,5 +1,5 @@
-class_name Enemy
-extends RigidBody2D
+class_name Enemy extends RigidBody2D
+
 
 
 const WALK_SPEED = 50
 const WALK_SPEED = 50
 
 
@@ -8,40 +8,39 @@ enum State {
 	DYING,
 	DYING,
 }
 }
 
 
-var state = State.WALKING
+var _state := State.WALKING
+
+var direction := -1
+var anim := ""
 
 
-var direction = -1
-var anim = ""
+var Bullet := preload("res://player/bullet.gd")
 
 
-var Bullet = preload("res://player/bullet.gd")
+@onready var rc_left := $RaycastLeft as RayCast2D
+@onready var rc_right := $RaycastRight as RayCast2D
 
 
-@onready var rc_left = $RaycastLeft
-@onready var rc_right = $RaycastRight
 
 
-func _integrate_forces(s):
-	var lv = s.get_linear_velocity()
-	var new_anim = anim
+func _integrate_forces(state: PhysicsDirectBodyState2D) -> void:
+	var velocity := state.get_linear_velocity()
+	var new_anim := anim
 
 
-	if state == State.DYING:
+	if _state == State.DYING:
 		new_anim = "explode"
 		new_anim = "explode"
-	elif state == State.WALKING:
+	elif _state == State.WALKING:
 		new_anim = "walk"
 		new_anim = "walk"
 
 
-		var wall_side = 0.0
+		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)
+		for collider_index in state.get_contact_count():
+			var collider := state.get_contact_collider_object(collider_index)
+			var collision_normal := state.get_contact_local_normal(collider_index)
 
 
-			if cc:
-				if cc is Bullet and not cc.disabled:
-					# enqueue call
-					call_deferred("_bullet_collider", cc, s, dp)
-					break
+			if collider is Bullet and not (collider as Bullet).disabled:
+				_bullet_collider.call_deferred(collider, state, collision_normal)
+				break
 
 
-			if dp.x > 0.9:
+			if collision_normal.x > 0.9:
 				wall_side = 1.0
 				wall_side = 1.0
-			elif dp.x < -0.9:
+			elif collision_normal.x < -0.9:
 				wall_side = -1.0
 				wall_side = -1.0
 
 
 		if wall_side != 0 and wall_side != direction:
 		if wall_side != 0 and wall_side != direction:
@@ -54,35 +53,36 @@ func _integrate_forces(s):
 			direction = -direction
 			direction = -direction
 			($Sprite2D as Sprite2D).scale.x = -direction
 			($Sprite2D as Sprite2D).scale.x = -direction
 
 
-		lv.x = direction * WALK_SPEED
+		velocity.x = direction * WALK_SPEED
 
 
 	if anim != new_anim:
 	if anim != new_anim:
 		anim = new_anim
 		anim = new_anim
 		($AnimationPlayer as AnimationPlayer).play(anim)
 		($AnimationPlayer as AnimationPlayer).play(anim)
 
 
-	s.set_linear_velocity(lv)
+	state.set_linear_velocity(velocity)
 
 
 
 
-func _die():
+func _die() -> void:
 	queue_free()
 	queue_free()
 
 
 
 
-func _pre_explode():
+func _pre_explode() -> void:
 	#make sure nothing collides against this
 	#make sure nothing collides against this
 	$Shape1.queue_free()
 	$Shape1.queue_free()
 	$Shape2.queue_free()
 	$Shape2.queue_free()
 	$Shape3.queue_free()
 	$Shape3.queue_free()
 
 
-	# Stay there
-	#mode = MODE_STATIC
 	($SoundExplode as AudioStreamPlayer2D).play()
 	($SoundExplode as AudioStreamPlayer2D).play()
 
 
 
 
-func _bullet_collider(cc, s, dp):
-	#mode = MODE_RIGID
-	state = State.DYING
+func _bullet_collider(
+	collider: Bullet,
+	state: PhysicsDirectBodyState2D,
+	collision_normal: Vector2
+) -> void:
+	_state = State.DYING
 
 
-	s.set_angular_velocity(sign(dp.x) * 33.0)
+	state.set_angular_velocity(signf(collision_normal.x) * 33.0)
 	physics_material_override.friction = 1
 	physics_material_override.friction = 1
-	cc.disable()
+	collider.disable()
 	($SoundHit as AudioStreamPlayer2D).play()
 	($SoundHit as AudioStreamPlayer2D).play()

+ 1 - 1
2d/physics_platformer/enemy/enemy.png.import

@@ -16,9 +16,9 @@ dest_files=["res://.godot/imported/enemy.png-1891d9038eeed672a2459bc4e7db5910.ct
 [params]
 [params]
 
 
 compress/mode=0
 compress/mode=0
+compress/high_quality=false
 compress/lossy_quality=0.7
 compress/lossy_quality=0.7
 compress/hdr_compression=1
 compress/hdr_compression=1
-compress/bptc_ldr=0
 compress/normal_map=0
 compress/normal_map=0
 compress/channel_pack=0
 compress/channel_pack=0
 mipmaps/generate=false
 mipmaps/generate=false

+ 85 - 59
2d/physics_platformer/enemy/Enemy.tscn → 2d/physics_platformer/enemy/enemy.tscn

@@ -1,22 +1,22 @@
-[gd_scene load_steps=12 format=2]
+[gd_scene load_steps=14 format=3 uid="uid://daqqtote00syu"]
 
 
-[ext_resource path="res://enemy/enemy.gd" type="Script" id=1]
-[ext_resource path="res://enemy/enemy.png" type="Texture2D" id=2]
-[ext_resource path="res://player/bullet.png" type="Texture2D" id=3]
-[ext_resource path="res://audio/sound_hit.wav" type="AudioStream" id=4]
-[ext_resource path="res://audio/sound_explode.wav" type="AudioStream" id=5]
+[ext_resource type="Script" path="res://enemy/enemy.gd" id="1_hjwkx"]
+[ext_resource type="Texture2D" uid="uid://crrmmbu8k46tl" path="res://enemy/enemy.png" id="2_org2d"]
+[ext_resource type="Texture2D" uid="uid://7sv64orewgmb" path="res://player/bullet.png" id="3_7unrb"]
+[ext_resource type="AudioStream" uid="uid://cfssio7r2t7wq" path="res://audio/sound_hit.wav" id="4_5rkwm"]
+[ext_resource type="AudioStream" uid="uid://bulmr2lpb7y4h" path="res://audio/sound_explode.wav" id="5_t2e2f"]
 
 
-[sub_resource type="PhysicsMaterial" id=1]
+[sub_resource type="PhysicsMaterial" id="1"]
 
 
-[sub_resource type="Animation" id=2]
+[sub_resource type="Animation" id="2"]
 length = 6.0
 length = 6.0
 step = 0.0
 step = 0.0
 tracks/0/type = "value"
 tracks/0/type = "value"
+tracks/0/imported = false
+tracks/0/enabled = true
 tracks/0/path = NodePath("Sprite2D:frame")
 tracks/0/path = NodePath("Sprite2D:frame")
 tracks/0/interp = 1
 tracks/0/interp = 1
 tracks/0/loop_wrap = true
 tracks/0/loop_wrap = true
-tracks/0/imported = false
-tracks/0/enabled = true
 tracks/0/keys = {
 tracks/0/keys = {
 "times": PackedFloat32Array(0),
 "times": PackedFloat32Array(0),
 "transitions": PackedFloat32Array(1),
 "transitions": PackedFloat32Array(1),
@@ -24,11 +24,11 @@ tracks/0/keys = {
 "values": [4]
 "values": [4]
 }
 }
 tracks/1/type = "value"
 tracks/1/type = "value"
+tracks/1/imported = false
+tracks/1/enabled = true
 tracks/1/path = NodePath("Explosion:emitting")
 tracks/1/path = NodePath("Explosion:emitting")
 tracks/1/interp = 1
 tracks/1/interp = 1
 tracks/1/loop_wrap = true
 tracks/1/loop_wrap = true
-tracks/1/imported = false
-tracks/1/enabled = true
 tracks/1/keys = {
 tracks/1/keys = {
 "times": PackedFloat32Array(1),
 "times": PackedFloat32Array(1),
 "transitions": PackedFloat32Array(1),
 "transitions": PackedFloat32Array(1),
@@ -36,28 +36,28 @@ tracks/1/keys = {
 "values": [true]
 "values": [true]
 }
 }
 tracks/2/type = "method"
 tracks/2/type = "method"
+tracks/2/imported = false
+tracks/2/enabled = true
 tracks/2/path = NodePath(".")
 tracks/2/path = NodePath(".")
 tracks/2/interp = 1
 tracks/2/interp = 1
 tracks/2/loop_wrap = true
 tracks/2/loop_wrap = true
-tracks/2/imported = false
-tracks/2/enabled = true
 tracks/2/keys = {
 tracks/2/keys = {
-"times": PackedFloat32Array(0.8, 2),
+"times": PackedFloat32Array(1.04, 2),
 "transitions": PackedFloat32Array(1, 1),
 "transitions": PackedFloat32Array(1, 1),
 "values": [{
 "values": [{
 "args": [],
 "args": [],
-"method": "_pre_explode"
+"method": &"_pre_explode"
 }, {
 }, {
 "args": [],
 "args": [],
-"method": "_die"
+"method": &"_die"
 }]
 }]
 }
 }
 tracks/3/type = "value"
 tracks/3/type = "value"
+tracks/3/imported = false
+tracks/3/enabled = true
 tracks/3/path = NodePath("Sprite2D:self_modulate")
 tracks/3/path = NodePath("Sprite2D:self_modulate")
 tracks/3/interp = 1
 tracks/3/interp = 1
 tracks/3/loop_wrap = true
 tracks/3/loop_wrap = true
-tracks/3/imported = false
-tracks/3/enabled = true
 tracks/3/keys = {
 tracks/3/keys = {
 "times": PackedFloat32Array(0.5, 1.1),
 "times": PackedFloat32Array(0.5, 1.1),
 "transitions": PackedFloat32Array(1, 1),
 "transitions": PackedFloat32Array(1, 1),
@@ -65,16 +65,16 @@ tracks/3/keys = {
 "values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0)]
 "values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0)]
 }
 }
 
 
-[sub_resource type="Animation" id=3]
+[sub_resource type="Animation" id="3"]
 length = 6.75
 length = 6.75
-loop = true
+loop_mode = 1
 step = 0.25
 step = 0.25
 tracks/0/type = "value"
 tracks/0/type = "value"
+tracks/0/imported = false
+tracks/0/enabled = true
 tracks/0/path = NodePath("Sprite2D:frame")
 tracks/0/path = NodePath("Sprite2D:frame")
 tracks/0/interp = 1
 tracks/0/interp = 1
 tracks/0/loop_wrap = true
 tracks/0/loop_wrap = true
-tracks/0/imported = false
-tracks/0/enabled = true
 tracks/0/keys = {
 tracks/0/keys = {
 "times": PackedFloat32Array(0, 0.75, 1.5, 2.25, 3, 3.75, 4.5, 5.25, 6, 6.75),
 "times": PackedFloat32Array(0, 0.75, 1.5, 2.25, 3, 3.75, 4.5, 5.25, 6, 6.75),
 "transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
 "transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
@@ -82,16 +82,16 @@ tracks/0/keys = {
 "values": [5, 6, 5, 6, 5, 6, 7, 6, 7, 5]
 "values": [5, 6, 5, 6, 5, 6, 7, 6, 7, 5]
 }
 }
 
 
-[sub_resource type="Animation" id=4]
+[sub_resource type="Animation" id="4"]
 length = 1.25
 length = 1.25
-loop = true
+loop_mode = 1
 step = 0.25
 step = 0.25
 tracks/0/type = "value"
 tracks/0/type = "value"
+tracks/0/imported = false
+tracks/0/enabled = true
 tracks/0/path = NodePath("Sprite2D:frame")
 tracks/0/path = NodePath("Sprite2D:frame")
 tracks/0/interp = 1
 tracks/0/interp = 1
 tracks/0/loop_wrap = true
 tracks/0/loop_wrap = true
-tracks/0/imported = false
-tracks/0/enabled = true
 tracks/0/keys = {
 tracks/0/keys = {
 "times": PackedFloat32Array(0, 0.25, 0.5, 0.75, 1, 1.25),
 "times": PackedFloat32Array(0, 0.25, 0.5, 0.75, 1, 1.25),
 "transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1),
 "transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1),
@@ -99,55 +99,85 @@ tracks/0/keys = {
 "values": [0, 1, 2, 3, 4, 0]
 "values": [0, 1, 2, 3, 4, 0]
 }
 }
 
 
-[sub_resource type="CircleShape2D" id=5]
+[sub_resource type="Animation" id="Animation_a7qal"]
+resource_name = "RESET"
+length = 0.01
+tracks/0/type = "value"
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/path = NodePath("Sprite2D:frame")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/keys = {
+"times": PackedFloat32Array(0),
+"transitions": PackedFloat32Array(1),
+"update": 1,
+"values": [0]
+}
+tracks/1/type = "value"
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/path = NodePath("Sprite2D:self_modulate")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/keys = {
+"times": PackedFloat32Array(0),
+"transitions": PackedFloat32Array(1),
+"update": 0,
+"values": [Color(1, 1, 1, 1)]
+}
+
+[sub_resource type="AnimationLibrary" id="AnimationLibrary_ay0tp"]
+_data = {
+"RESET": SubResource("Animation_a7qal"),
+"explode": SubResource("2"),
+"idle": SubResource("3"),
+"walk": SubResource("4")
+}
+
+[sub_resource type="CircleShape2D" id="5"]
 radius = 7.0
 radius = 7.0
 
 
-[sub_resource type="Gradient" id=6]
+[sub_resource type="Gradient" id="6"]
 offsets = PackedFloat32Array(0.5, 1)
 offsets = PackedFloat32Array(0.5, 1)
 colors = PackedColorArray(1, 1, 1, 0.501961, 0, 0, 0, 0)
 colors = PackedColorArray(1, 1, 1, 0.501961, 0, 0, 0, 0)
 
 
-[node name="Enemy" type="RigidDynamicBody2D"]
-mode = 2
-physics_material_override = SubResource( 1 )
-contacts_reported = 4
-script = ExtResource( 1 )
-
-[node name="Enabler" type="VisibleOnScreenEnabler2D" parent="."]
-position = Vector2(8.12845, 5.5017)
-scale = Vector2(11.7528, 5.43145)
-pause_particles = false
+[node name="Enemy" type="RigidBody2D"]
+physics_material_override = SubResource("1")
+max_contacts_reported = 4
+contact_monitor = true
+lock_rotation = true
+script = ExtResource("1_hjwkx")
 
 
 [node name="AnimationPlayer" type="AnimationPlayer" parent="."]
 [node name="AnimationPlayer" type="AnimationPlayer" parent="."]
-anims/explode = SubResource( 2 )
-anims/idle = SubResource( 3 )
-anims/walk = SubResource( 4 )
+libraries = {
+"": SubResource("AnimationLibrary_ay0tp")
+}
+
+[node name="VisibleOnScreenEnabler2D" type="VisibleOnScreenEnabler2D" parent="."]
+rect = Rect2(-150, -100, 300, 200)
 
 
 [node name="Sprite2D" type="Sprite2D" parent="."]
 [node name="Sprite2D" type="Sprite2D" parent="."]
-texture = ExtResource( 2 )
+texture = ExtResource("2_org2d")
 hframes = 8
 hframes = 8
-frame = 4
 
 
 [node name="Shape1" type="CollisionShape2D" parent="."]
 [node name="Shape1" type="CollisionShape2D" parent="."]
 position = Vector2(-0.54036, -1.08072)
 position = Vector2(-0.54036, -1.08072)
-shape = SubResource( 5 )
+shape = SubResource("5")
 
 
 [node name="Shape2" type="CollisionShape2D" parent="."]
 [node name="Shape2" type="CollisionShape2D" parent="."]
 position = Vector2(3.24216, 1.62108)
 position = Vector2(3.24216, 1.62108)
-shape = SubResource( 5 )
+shape = SubResource("5")
 
 
 [node name="Shape3" type="CollisionShape2D" parent="."]
 [node name="Shape3" type="CollisionShape2D" parent="."]
 position = Vector2(-6.2475, 1.76707)
 position = Vector2(-6.2475, 1.76707)
-shape = SubResource( 5 )
+shape = SubResource("5")
 
 
 [node name="RaycastLeft" type="RayCast2D" parent="."]
 [node name="RaycastLeft" type="RayCast2D" parent="."]
 position = Vector2(-14, -4.672)
 position = Vector2(-14, -4.672)
-enabled = true
-cast_to = Vector2(0, 22.5)
 
 
 [node name="RaycastRight" type="RayCast2D" parent="."]
 [node name="RaycastRight" type="RayCast2D" parent="."]
 position = Vector2(11, -4.672)
 position = Vector2(11, -4.672)
-enabled = true
-cast_to = Vector2(0, 22.5)
 
 
 [node name="Explosion" type="CPUParticles2D" parent="."]
 [node name="Explosion" type="CPUParticles2D" parent="."]
 modulate = Color(1, 1, 1, 0.685843)
 modulate = Color(1, 1, 1, 0.685843)
@@ -157,19 +187,15 @@ lifetime = 0.5
 one_shot = true
 one_shot = true
 speed_scale = 1.2
 speed_scale = 1.2
 explosiveness = 0.76
 explosiveness = 0.76
-texture = ExtResource( 3 )
+texture = ExtResource("3_7unrb")
 emission_shape = 1
 emission_shape = 1
 emission_sphere_radius = 8.0
 emission_sphere_radius = 8.0
 spread = 180.0
 spread = 180.0
 gravity = Vector2(0, 0)
 gravity = Vector2(0, 0)
-initial_velocity = 120.0
-initial_velocity_random = 0.5
-angle_random = 1.0
-scale_amount_random = 1.0
-color_ramp = SubResource( 6 )
+color_ramp = SubResource("6")
 
 
 [node name="SoundHit" type="AudioStreamPlayer2D" parent="."]
 [node name="SoundHit" type="AudioStreamPlayer2D" parent="."]
-stream = ExtResource( 4 )
+stream = ExtResource("4_5rkwm")
 
 
 [node name="SoundExplode" type="AudioStreamPlayer2D" parent="."]
 [node name="SoundExplode" type="AudioStreamPlayer2D" parent="."]
-stream = ExtResource( 5 )
+stream = ExtResource("5_t2e2f")

BIN
2d/physics_platformer/icon.png


BIN
2d/physics_platformer/icon.webp


+ 5 - 5
2d/physics_platformer/icon.png.import → 2d/physics_platformer/icon.webp.import

@@ -2,23 +2,23 @@
 
 
 importer="texture"
 importer="texture"
 type="CompressedTexture2D"
 type="CompressedTexture2D"
-uid="uid://dv2hr3igi3roi"
-path="res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.ctex"
+uid="uid://upnbycigfu4k"
+path="res://.godot/imported/icon.webp-e94f9a68b0f625a567a797079e4d325f.ctex"
 metadata={
 metadata={
 "vram_texture": false
 "vram_texture": false
 }
 }
 
 
 [deps]
 [deps]
 
 
-source_file="res://icon.png"
-dest_files=["res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.ctex"]
+source_file="res://icon.webp"
+dest_files=["res://.godot/imported/icon.webp-e94f9a68b0f625a567a797079e4d325f.ctex"]
 
 
 [params]
 [params]
 
 
 compress/mode=0
 compress/mode=0
+compress/high_quality=false
 compress/lossy_quality=0.7
 compress/lossy_quality=0.7
 compress/hdr_compression=1
 compress/hdr_compression=1
-compress/bptc_ldr=0
 compress/normal_map=0
 compress/normal_map=0
 compress/channel_pack=0
 compress/channel_pack=0
 mipmaps/generate=false
 mipmaps/generate=false

+ 0 - 16
2d/physics_platformer/platform/MovingPlatform.tscn

@@ -1,16 +0,0 @@
-[gd_scene load_steps=3 format=2]
-
-[ext_resource path="res://platform/moving_platform.gd" type="Script" id=1]
-[ext_resource path="res://platform/moving_platform.png" type="Texture2D" id=2]
-
-[node name="MovingPlatform" type="Node2D"]
-script = ExtResource( 1 )
-
-[node name="Platform" type="RigidDynamicBody2D" parent="."]
-mode = 3
-
-[node name="Sprite2D" type="Sprite2D" parent="Platform"]
-texture = ExtResource( 2 )
-
-[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Platform"]
-polygon = PackedVector2Array(-44, -12, 44, -12, 44, 12, -44, 12)

+ 0 - 16
2d/physics_platformer/platform/OneWayPlatform.tscn

@@ -1,16 +0,0 @@
-[gd_scene load_steps=3 format=2]
-
-[ext_resource path="res://platform/one_way_platform.png" type="Texture2D" id=1]
-
-[sub_resource type="RectangleShape2D" id=1]
-extents = Vector2(50, 5)
-
-[node name="OneWayPlatform" type="StaticBody2D"]
-
-[node name="Sprite2D" type="Sprite2D" parent="."]
-texture = ExtResource( 1 )
-
-[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
-position = Vector2(0.73152, -6.5836)
-shape = SubResource( 1 )
-one_way_collision = true

+ 0 - 17
2d/physics_platformer/platform/moving_platform.gd

@@ -1,17 +0,0 @@
-class_name MovingPlatform
-extends Node2D
-
-@export var motion = Vector2()
-@export var cycle = 1.0
-
-var accum = 0.0
-
-func _physics_process(delta):
-	accum += delta * (1.0 / cycle) * TAU
-	accum = fmod(accum, TAU)
-
-	var d = sin(accum)
-	var xf = Transform2D()
-
-	xf[2]= motion * d
-	($Platform as RigidBody2D).transform = xf

+ 1 - 1
2d/physics_platformer/platform/moving_platform.png.import

@@ -16,9 +16,9 @@ dest_files=["res://.godot/imported/moving_platform.png-7e92061cd93e8b0235df711d3
 [params]
 [params]
 
 
 compress/mode=0
 compress/mode=0
+compress/high_quality=false
 compress/lossy_quality=0.7
 compress/lossy_quality=0.7
 compress/hdr_compression=1
 compress/hdr_compression=1
-compress/bptc_ldr=0
 compress/normal_map=0
 compress/normal_map=0
 compress/channel_pack=0
 compress/channel_pack=0
 mipmaps/generate=false
 mipmaps/generate=false

+ 11 - 0
2d/physics_platformer/platform/moving_platform.tscn

@@ -0,0 +1,11 @@
+[gd_scene load_steps=2 format=3 uid="uid://dtbrdmojpvetu"]
+
+[ext_resource type="Texture2D" uid="uid://cde7btbdorp8f" path="res://platform/moving_platform.png" id="2"]
+
+[node name="MovingPlatform" type="CharacterBody2D"]
+
+[node name="Sprite2D" type="Sprite2D" parent="."]
+texture = ExtResource("2")
+
+[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="."]
+polygon = PackedVector2Array(-44, -12, 44, -12, 44, 12, -44, 12)

+ 1 - 1
2d/physics_platformer/platform/one_way_platform.png.import

@@ -16,9 +16,9 @@ dest_files=["res://.godot/imported/one_way_platform.png-2865772e209813c1636a14ae
 [params]
 [params]
 
 
 compress/mode=0
 compress/mode=0
+compress/high_quality=false
 compress/lossy_quality=0.7
 compress/lossy_quality=0.7
 compress/hdr_compression=1
 compress/hdr_compression=1
-compress/bptc_ldr=0
 compress/normal_map=0
 compress/normal_map=0
 compress/channel_pack=0
 compress/channel_pack=0
 mipmaps/generate=false
 mipmaps/generate=false

+ 16 - 0
2d/physics_platformer/platform/one_way_platform.tscn

@@ -0,0 +1,16 @@
+[gd_scene load_steps=3 format=3 uid="uid://dkmxopg1dknq8"]
+
+[ext_resource type="Texture2D" uid="uid://c15sicsdamq2o" path="res://platform/one_way_platform.png" id="1"]
+
+[sub_resource type="RectangleShape2D" id="1"]
+size = Vector2(110, 10)
+
+[node name="OneWayPlatform" type="StaticBody2D"]
+
+[node name="Sprite2D" type="Sprite2D" parent="."]
+texture = ExtResource("1")
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
+position = Vector2(0.73152, -6.5836)
+shape = SubResource("1")
+one_way_collision = true

+ 1 - 1
2d/physics_platformer/player/bullet.png.import

@@ -16,9 +16,9 @@ dest_files=["res://.godot/imported/bullet.png-5615cb9904aab8db60fe6f48e996475f.c
 [params]
 [params]
 
 
 compress/mode=0
 compress/mode=0
+compress/high_quality=false
 compress/lossy_quality=0.7
 compress/lossy_quality=0.7
 compress/hdr_compression=1
 compress/hdr_compression=1
-compress/bptc_ldr=0
 compress/normal_map=0
 compress/normal_map=0
 compress/channel_pack=0
 compress/channel_pack=0
 mipmaps/generate=false
 mipmaps/generate=false

+ 0 - 0
2d/physics_platformer/player/Bullet.tscn → 2d/physics_platformer/player/bullet.tscn


+ 1 - 1
2d/physics_platformer/player/osb_fire.png.import

@@ -16,9 +16,9 @@ dest_files=["res://.godot/imported/osb_fire.png-67a49910acd764fd7c67429af0ad5cb8
 [params]
 [params]
 
 
 compress/mode=0
 compress/mode=0
+compress/high_quality=false
 compress/lossy_quality=0.7
 compress/lossy_quality=0.7
 compress/hdr_compression=1
 compress/hdr_compression=1
-compress/bptc_ldr=0
 compress/normal_map=0
 compress/normal_map=0
 compress/channel_pack=0
 compress/channel_pack=0
 mipmaps/generate=false
 mipmaps/generate=false

+ 1 - 1
2d/physics_platformer/player/osb_jump.png.import

@@ -16,9 +16,9 @@ dest_files=["res://.godot/imported/osb_jump.png-0d4d2b2d1a7d2c11e3e4fd800b8589ed
 [params]
 [params]
 
 
 compress/mode=0
 compress/mode=0
+compress/high_quality=false
 compress/lossy_quality=0.7
 compress/lossy_quality=0.7
 compress/hdr_compression=1
 compress/hdr_compression=1
-compress/bptc_ldr=0
 compress/normal_map=0
 compress/normal_map=0
 compress/channel_pack=0
 compress/channel_pack=0
 mipmaps/generate=false
 mipmaps/generate=false

+ 1 - 1
2d/physics_platformer/player/osb_left.png.import

@@ -16,9 +16,9 @@ dest_files=["res://.godot/imported/osb_left.png-95ec3a371455889d592aa8cae0a755bc
 [params]
 [params]
 
 
 compress/mode=0
 compress/mode=0
+compress/high_quality=false
 compress/lossy_quality=0.7
 compress/lossy_quality=0.7
 compress/hdr_compression=1
 compress/hdr_compression=1
-compress/bptc_ldr=0
 compress/normal_map=0
 compress/normal_map=0
 compress/channel_pack=0
 compress/channel_pack=0
 mipmaps/generate=false
 mipmaps/generate=false

+ 1 - 1
2d/physics_platformer/player/osb_right.png.import

@@ -16,9 +16,9 @@ dest_files=["res://.godot/imported/osb_right.png-db9bb4651315f3d42b87bd17a86cce7
 [params]
 [params]
 
 
 compress/mode=0
 compress/mode=0
+compress/high_quality=false
 compress/lossy_quality=0.7
 compress/lossy_quality=0.7
 compress/hdr_compression=1
 compress/hdr_compression=1
-compress/bptc_ldr=0
 compress/normal_map=0
 compress/normal_map=0
 compress/channel_pack=0
 compress/channel_pack=0
 mipmaps/generate=false
 mipmaps/generate=false

+ 75 - 97
2d/physics_platformer/player/player.gd

@@ -1,27 +1,5 @@
-class_name Player
-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.
+class_name Player extends RigidBody2D
+
 
 
 const WALK_ACCEL = 500.0
 const WALK_ACCEL = 500.0
 const WALK_DEACCEL = 500.0
 const WALK_DEACCEL = 500.0
@@ -33,63 +11,64 @@ const STOP_JUMP_FORCE = 450.0
 const MAX_SHOOT_POSE_TIME = 0.3
 const MAX_SHOOT_POSE_TIME = 0.3
 const MAX_FLOOR_AIRBORNE_TIME = 0.15
 const MAX_FLOOR_AIRBORNE_TIME = 0.15
 
 
-var anim = ""
-var siding_left = false
-var jumping = false
-var stopping_jump = false
-var shooting = false
+var anim := ""
+var siding_left := false
+var jumping := false
+var stopping_jump := false
+var shooting := false
+
+var floor_h_velocity: float = 0.0
 
 
-var floor_h_velocity = 0.0
+var airborne_time: float = 1e20
+var shoot_time: float = 1e20
 
 
-var airborne_time = 1e20
-var shoot_time = 1e20
+var Bullet := preload("res://player/bullet.tscn")
+var Enemy := preload("res://enemy/enemy.tscn")
 
 
-var Bullet = preload("res://player/Bullet.tscn")
-var Enemy = preload("res://enemy/Enemy.tscn")
+@onready var sound_jump := $SoundJump as AudioStreamPlayer2D
+@onready var sound_shoot := $SoundShoot as AudioStreamPlayer2D
+@onready var sprite := $Sprite2D as Sprite2D
+@onready var sprite_smoke := sprite.get_node(^"Smoke") as CPUParticles2D
+@onready var animation_player := $AnimationPlayer as AnimationPlayer
+@onready var bullet_shoot := $BulletShoot as Marker2D
 
 
-@onready var sound_jump = $SoundJump
-@onready var sound_shoot = $SoundShoot
-@onready var sprite = $Sprite2D
-@onready var sprite_smoke = sprite.get_node(^"Smoke")
-@onready var animation_player = $AnimationPlayer
-@onready var bullet_shoot = $BulletShoot
 
 
-func _integrate_forces(s):
-	var lv = s.get_linear_velocity()
-	var step = s.get_step()
+func _integrate_forces(state: PhysicsDirectBodyState2D) -> void:
+	var velocity := state.get_linear_velocity()
+	var step := state.get_step()
 
 
-	var new_anim = anim
-	var new_siding_left = siding_left
+	var new_anim := anim
+	var new_siding_left := siding_left
 
 
 	# Get player input.
 	# Get player input.
-	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")
+	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:
 	if spawn:
-		call_deferred("_spawn_enemy_above")
+		_spawn_enemy_above.call_deferred()
 
 
 	# Deapply prev floor velocity.
 	# Deapply prev floor velocity.
-	lv.x -= floor_h_velocity
+	velocity.x -= floor_h_velocity
 	floor_h_velocity = 0.0
 	floor_h_velocity = 0.0
 
 
 	# Find the floor (a contact with upwards facing collision normal).
 	# Find the floor (a contact with upwards facing collision normal).
-	var found_floor = false
-	var floor_index = -1
+	var found_floor := false
+	var floor_index := -1
 
 
-	for x in range(s.get_contact_count()):
-		var ci = s.get_contact_local_normal(x)
+	for contact_index in state.get_contact_count():
+		var collision_normal = state.get_contact_local_normal(contact_index)
 
 
-		if ci.dot(Vector2(0, -1)) > 0.6:
+		if collision_normal.dot(Vector2(0, -1)) > 0.6:
 			found_floor = true
 			found_floor = true
-			floor_index = x
+			floor_index = contact_index
 
 
 	# A good idea when implementing characters of all kinds,
 	# A good idea when implementing characters of all kinds,
 	# compensates for physics imprecision, as well as human reaction delay.
 	# compensates for physics imprecision, as well as human reaction delay.
 	if shoot and not shooting:
 	if shoot and not shooting:
-		call_deferred("_shot_bullet")
+		_shot_bullet.call_deferred()
 	else:
 	else:
 		shoot_time += step
 		shoot_time += step
 
 
@@ -98,49 +77,49 @@ func _integrate_forces(s):
 	else:
 	else:
 		airborne_time += step # Time it spent in the air.
 		airborne_time += step # Time it spent in the air.
 
 
-	var on_floor = airborne_time < MAX_FLOOR_AIRBORNE_TIME
+	var on_floor := airborne_time < MAX_FLOOR_AIRBORNE_TIME
 
 
 	# Process jump.
 	# Process jump.
 	if jumping:
 	if jumping:
-		if lv.y > 0:
+		if velocity.y > 0:
 			# Set off the jumping flag if going down.
 			# Set off the jumping flag if going down.
 			jumping = false
 			jumping = false
 		elif not jump:
 		elif not jump:
 			stopping_jump = true
 			stopping_jump = true
 
 
 		if stopping_jump:
 		if stopping_jump:
-			lv.y += STOP_JUMP_FORCE * step
+			velocity.y += STOP_JUMP_FORCE * step
 
 
 	if on_floor:
 	if on_floor:
 		# Process logic when character is on floor.
 		# Process logic when character is on floor.
 		if move_left and not move_right:
 		if move_left and not move_right:
-			if lv.x > -WALK_MAX_VELOCITY:
-				lv.x -= WALK_ACCEL * step
+			if velocity.x > -WALK_MAX_VELOCITY:
+				velocity.x -= WALK_ACCEL * step
 		elif move_right and not move_left:
 		elif move_right and not move_left:
-			if lv.x < WALK_MAX_VELOCITY:
-				lv.x += WALK_ACCEL * step
+			if velocity.x < WALK_MAX_VELOCITY:
+				velocity.x += WALK_ACCEL * step
 		else:
 		else:
-			var xv = abs(lv.x)
+			var xv := absf(velocity.x)
 			xv -= WALK_DEACCEL * step
 			xv -= WALK_DEACCEL * step
 			if xv < 0:
 			if xv < 0:
 				xv = 0
 				xv = 0
-			lv.x = sign(lv.x) * xv
+			velocity.x = signf(velocity.x) * xv
 
 
 		# Check jump.
 		# Check jump.
 		if not jumping and jump:
 		if not jumping and jump:
-			lv.y = -JUMP_VELOCITY
+			velocity.y = -JUMP_VELOCITY
 			jumping = true
 			jumping = true
 			stopping_jump = false
 			stopping_jump = false
 			sound_jump.play()
 			sound_jump.play()
 
 
 		# Check siding.
 		# Check siding.
-		if lv.x < 0 and move_left:
+		if velocity.x < 0 and move_left:
 			new_siding_left = true
 			new_siding_left = true
-		elif lv.x > 0 and move_right:
+		elif velocity.x > 0 and move_right:
 			new_siding_left = false
 			new_siding_left = false
 		if jumping:
 		if jumping:
 			new_anim = "jumping"
 			new_anim = "jumping"
-		elif abs(lv.x) < 0.1:
+		elif absf(velocity.x) < 0.1:
 			if shoot_time < MAX_SHOOT_POSE_TIME:
 			if shoot_time < MAX_SHOOT_POSE_TIME:
 				new_anim = "idle_weapon"
 				new_anim = "idle_weapon"
 			else:
 			else:
@@ -153,20 +132,20 @@ func _integrate_forces(s):
 	else:
 	else:
 		# Process logic when the character is in the air.
 		# Process logic when the character is in the air.
 		if move_left and not move_right:
 		if move_left and not move_right:
-			if lv.x > -WALK_MAX_VELOCITY:
-				lv.x -= AIR_ACCEL * step
+			if velocity.x > -WALK_MAX_VELOCITY:
+				velocity.x -= AIR_ACCEL * step
 		elif move_right and not move_left:
 		elif move_right and not move_left:
-			if lv.x < WALK_MAX_VELOCITY:
-				lv.x += AIR_ACCEL * step
+			if velocity.x < WALK_MAX_VELOCITY:
+				velocity.x += AIR_ACCEL * step
 		else:
 		else:
-			var xv = abs(lv.x)
+			var xv := absf(velocity.x)
 			xv -= AIR_DEACCEL * step
 			xv -= AIR_DEACCEL * step
 
 
 			if xv < 0:
 			if xv < 0:
 				xv = 0
 				xv = 0
-			lv.x = sign(lv.x) * xv
+			velocity.x = signf(velocity.x) * xv
 
 
-		if lv.y < 0:
+		if velocity.y < 0:
 			if shoot_time < MAX_SHOOT_POSE_TIME:
 			if shoot_time < MAX_SHOOT_POSE_TIME:
 				new_anim = "jumping_weapon"
 				new_anim = "jumping_weapon"
 			else:
 			else:
@@ -195,36 +174,35 @@ func _integrate_forces(s):
 
 
 	# Apply floor velocity.
 	# Apply floor velocity.
 	if found_floor:
 	if found_floor:
-		floor_h_velocity = s.get_contact_collider_velocity_at_position(floor_index).x
-		lv.x += floor_h_velocity
+		floor_h_velocity = state.get_contact_collider_velocity_at_position(floor_index).x
+		velocity.x += floor_h_velocity
 
 
 	# Finally, apply gravity and set back the linear velocity.
 	# Finally, apply gravity and set back the linear velocity.
-	lv += s.get_total_gravity() * step
-	s.set_linear_velocity(lv)
+	velocity += state.get_total_gravity() * step
+	state.set_linear_velocity(velocity)
 
 
 
 
-func _shot_bullet():
+func _shot_bullet() -> void:
 	shoot_time = 0
 	shoot_time = 0
-	var bi = Bullet.instantiate()
-	var ss
+	var bullet := Bullet.instantiate() as RigidBody2D
+	var speed_scale: float
 	if siding_left:
 	if siding_left:
-		ss = -1.0
+		speed_scale = -1.0
 	else:
 	else:
-		ss = 1.0
-	var pos = position + bullet_shoot.position * Vector2(ss, 1.0)
+		speed_scale = 1.0
 
 
-	bi.position = pos
-	get_parent().add_child(bi)
+	bullet.position = self.position + bullet_shoot.position * Vector2(speed_scale, 1.0)
+	get_parent().add_child(bullet)
 
 
-	bi.linear_velocity = Vector2(400.0 * ss, -40)
+	bullet.linear_velocity = Vector2(400.0 * speed_scale, -40)
 
 
 	sprite_smoke.restart()
 	sprite_smoke.restart()
 	sound_shoot.play()
 	sound_shoot.play()
 
 
-	add_collision_exception_with(bi) # Make bullet and this not collide.
+	add_collision_exception_with(bullet) # Make bullet and this not collide.
 
 
 
 
-func _spawn_enemy_above():
-	var e = Enemy.instantiate()
-	e.position = position + 50 * Vector2.UP
-	get_parent().add_child(e)
+func _spawn_enemy_above() -> void:
+	var enemy := Enemy.instantiate() as RigidBody2D
+	enemy.position = self.position + 50 * Vector2.UP
+	get_parent().add_child(enemy)

+ 6 - 4
2d/physics_platformer/player/Player.tscn → 2d/physics_platformer/player/player.tscn

@@ -1,7 +1,7 @@
-[gd_scene load_steps=20 format=3 uid="uid://bv85r3nk410cj"]
+[gd_scene load_steps=20 format=3 uid="uid://bbxsp4gp554vh"]
 
 
 [ext_resource type="Script" path="res://player/player.gd" id="1"]
 [ext_resource type="Script" path="res://player/player.gd" id="1"]
-[ext_resource type="Texture2D" uid="uid://u5mto8jq4nhu" path="res://player/robot_demo.png" id="2"]
+[ext_resource type="Texture2D" uid="uid://dh57uloeigwj6" path="res://player/player.webp" id="2_675nc"]
 [ext_resource type="Texture2D" uid="uid://7sv64orewgmb" path="res://player/bullet.png" id="3"]
 [ext_resource type="Texture2D" uid="uid://7sv64orewgmb" path="res://player/bullet.png" id="3"]
 [ext_resource type="AudioStream" uid="uid://gw2a4ii0oby2" path="res://audio/sound_shoot.wav" id="8"]
 [ext_resource type="AudioStream" uid="uid://gw2a4ii0oby2" path="res://audio/sound_shoot.wav" id="8"]
 [ext_resource type="AudioStream" uid="uid://bpyko2i13mj0v" path="res://audio/sound_jump.wav" id="9"]
 [ext_resource type="AudioStream" uid="uid://bpyko2i13mj0v" path="res://audio/sound_jump.wav" id="9"]
@@ -194,10 +194,13 @@ length = 18.0
 mass = 1.5
 mass = 1.5
 physics_material_override = SubResource("1")
 physics_material_override = SubResource("1")
 custom_integrator = true
 custom_integrator = true
+max_contacts_reported = 4
+contact_monitor = true
+lock_rotation = true
 script = ExtResource("1")
 script = ExtResource("1")
 
 
 [node name="Sprite2D" type="Sprite2D" parent="."]
 [node name="Sprite2D" type="Sprite2D" parent="."]
-texture = ExtResource("2")
+texture = ExtResource("2_675nc")
 hframes = 16
 hframes = 16
 vframes = 2
 vframes = 2
 
 
@@ -220,7 +223,6 @@ libraries = {
 }
 }
 
 
 [node name="Camera2D" type="Camera2D" parent="."]
 [node name="Camera2D" type="Camera2D" parent="."]
-current = true
 zoom = Vector2(2, 2)
 zoom = Vector2(2, 2)
 limit_left = 0
 limit_left = 0
 limit_top = 0
 limit_top = 0

BIN
2d/physics_platformer/player/player.webp


+ 5 - 5
2d/physics_platformer/player/robot_demo.png.import → 2d/physics_platformer/player/player.webp.import

@@ -2,23 +2,23 @@
 
 
 importer="texture"
 importer="texture"
 type="CompressedTexture2D"
 type="CompressedTexture2D"
-uid="uid://u5mto8jq4nhu"
-path="res://.godot/imported/robot_demo.png-7165a8ae8f36b01883df6b585a93f592.ctex"
+uid="uid://dh57uloeigwj6"
+path="res://.godot/imported/player.webp-f8efd9c2246a95708b9c4853ed21513e.ctex"
 metadata={
 metadata={
 "vram_texture": false
 "vram_texture": false
 }
 }
 
 
 [deps]
 [deps]
 
 
-source_file="res://player/robot_demo.png"
-dest_files=["res://.godot/imported/robot_demo.png-7165a8ae8f36b01883df6b585a93f592.ctex"]
+source_file="res://player/player.webp"
+dest_files=["res://.godot/imported/player.webp-f8efd9c2246a95708b9c4853ed21513e.ctex"]
 
 
 [params]
 [params]
 
 
 compress/mode=0
 compress/mode=0
+compress/high_quality=false
 compress/lossy_quality=0.7
 compress/lossy_quality=0.7
 compress/hdr_compression=1
 compress/hdr_compression=1
-compress/bptc_ldr=0
 compress/normal_map=0
 compress/normal_map=0
 compress/channel_pack=0
 compress/channel_pack=0
 mipmaps/generate=false
 mipmaps/generate=false

BIN
2d/physics_platformer/player/robot_demo.png


+ 11 - 45
2d/physics_platformer/project.godot

@@ -8,40 +8,6 @@
 
 
 config_version=5
 config_version=5
 
 
-_global_script_classes=[{
-"base": "RigidBody2D",
-"class": &"Bullet",
-"language": &"GDScript",
-"path": "res://player/bullet.gd"
-}, {
-"base": "Area2D",
-"class": &"Coin",
-"language": &"GDScript",
-"path": "res://coin/coin.gd"
-}, {
-"base": "RigidBody2D",
-"class": &"Enemy",
-"language": &"GDScript",
-"path": "res://enemy/enemy.gd"
-}, {
-"base": "Node2D",
-"class": &"MovingPlatform",
-"language": &"GDScript",
-"path": "res://platform/moving_platform.gd"
-}, {
-"base": "RigidBody2D",
-"class": &"Player",
-"language": &"GDScript",
-"path": "res://player/player.gd"
-}]
-_global_script_class_icons={
-"Bullet": "",
-"Coin": "",
-"Enemy": "",
-"MovingPlatform": "",
-"Player": ""
-}
-
 [application]
 [application]
 
 
 config/name="Physics-Based Platformer 2D"
 config/name="Physics-Based Platformer 2D"
@@ -49,9 +15,9 @@ config/description="This demo uses RigidDynamicBody2D for the player and enemies
 character controllers are more powerful than CharacterBody2D,
 character controllers are more powerful than CharacterBody2D,
 but can be more difficult to handle, as they require
 but can be more difficult to handle, as they require
 manual modification of the RigidDynamicBody3D velocity."
 manual modification of the RigidDynamicBody3D velocity."
-run/main_scene="res://Stage.tscn"
+run/main_scene="res://stage.tscn"
 config/features=PackedStringArray("4.0")
 config/features=PackedStringArray("4.0")
-config/icon="res://icon.png"
+config/icon="res://icon.webp"
 
 
 [debug]
 [debug]
 
 
@@ -95,39 +61,39 @@ texture={
 
 
 jump={
 jump={
 "deadzone": 0.5,
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":16777232,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":16777232,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
 , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":0,"pressure":0.0,"pressed":false,"script":null)
 , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":0,"pressure":0.0,"pressed":false,"script":null)
-, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":87,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":87,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
 ]
 ]
 }
 }
 move_left={
 move_left={
 "deadzone": 0.5,
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":16777231,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":16777231,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
 , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":14,"pressure":0.0,"pressed":false,"script":null)
 , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":14,"pressure":0.0,"pressed":false,"script":null)
-, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":65,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":65,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
 , Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":-1.0,"script":null)
 , Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":-1.0,"script":null)
 ]
 ]
 }
 }
 move_right={
 move_right={
 "deadzone": 0.5,
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":16777233,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":16777233,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
 , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":15,"pressure":0.0,"pressed":false,"script":null)
 , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":15,"pressure":0.0,"pressed":false,"script":null)
-, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":68,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":68,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
 , Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":1.0,"script":null)
 , Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":1.0,"script":null)
 ]
 ]
 }
 }
 shoot={
 shoot={
 "deadzone": 0.5,
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":32,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":32,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
 , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":2,"pressure":0.0,"pressed":false,"script":null)
 , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":2,"pressure":0.0,"pressed":false,"script":null)
-, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":90,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":90,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
 , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":7,"pressure":0.0,"pressed":false,"script":null)
 , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":7,"pressure":0.0,"pressed":false,"script":null)
 , Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":1,"pressed":false,"double_click":false,"script":null)
 , Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":1,"pressed":false,"double_click":false,"script":null)
 ]
 ]
 }
 }
 spawn={
 spawn={
 "deadzone": 0.5,
 "deadzone": 0.5,
-"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":16777244,"physical_keycode":0,"unicode":0,"echo":false,"script":null)
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":16777244,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
 , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":11,"pressure":0.0,"pressed":false,"script":null)
 , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":11,"pressure":0.0,"pressed":false,"script":null)
 ]
 ]
 }
 }

File diff suppressed because it is too large
+ 137 - 0
2d/physics_platformer/stage.tscn


+ 1 - 1
2d/physics_platformer/tiles_demo.png.import

@@ -16,9 +16,9 @@ dest_files=["res://.godot/imported/tiles_demo.png-7ca5c7c5c02ab8abe0d585a6a8f086
 [params]
 [params]
 
 
 compress/mode=0
 compress/mode=0
+compress/high_quality=false
 compress/lossy_quality=0.7
 compress/lossy_quality=0.7
 compress/hdr_compression=1
 compress/hdr_compression=1
-compress/bptc_ldr=0
 compress/normal_map=0
 compress/normal_map=0
 compress/channel_pack=0
 compress/channel_pack=0
 mipmaps/generate=false
 mipmaps/generate=false

+ 798 - 0
2d/physics_platformer/tileset.tres

@@ -0,0 +1,798 @@
+[gd_resource type="TileSet" load_steps=18 format=3 uid="uid://rowrak7ls50v"]
+
+[ext_resource type="Texture2D" uid="uid://dbcdt0wqr3gd3" path="res://tiles_demo.png" id="1"]
+
+[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_va8am"]
+texture = ExtResource("1")
+texture_region_size = Vector2i(32, 32)
+0:0/next_alternative_id = 8
+0:0/0 = 0
+0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/0/physics_layer_0/angular_velocity = 0.0
+0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -12, 16, -12, 16, 16, -16, 16)
+0:0/1 = 1
+0:0/1/flip_h = true
+0:0/1/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/1/physics_layer_0/angular_velocity = 0.0
+0:0/1/physics_layer_0/polygon_0/points = PackedVector2Array(16, -12, -16, -12, -16, 16, 16, 16)
+0:0/2 = 2
+0:0/2/flip_v = true
+0:0/2/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/2/physics_layer_0/angular_velocity = 0.0
+0:0/2/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 12, 16, 12, 16, -16, -16, -16)
+0:0/3 = 3
+0:0/3/flip_h = true
+0:0/3/flip_v = true
+0:0/3/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/3/physics_layer_0/angular_velocity = 0.0
+0:0/3/physics_layer_0/polygon_0/points = PackedVector2Array(16, 12, -16, 12, -16, -16, 16, -16)
+0:0/4 = 4
+0:0/4/transpose = true
+0:0/4/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/4/physics_layer_0/angular_velocity = 0.0
+0:0/4/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -12, 16, -12, 16, 16, -16, 16)
+0:0/5 = 5
+0:0/5/flip_h = true
+0:0/5/transpose = true
+0:0/5/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/5/physics_layer_0/angular_velocity = 0.0
+0:0/5/physics_layer_0/polygon_0/points = PackedVector2Array(16, -12, -16, -12, -16, 16, 16, 16)
+0:0/6 = 6
+0:0/6/flip_v = true
+0:0/6/transpose = true
+0:0/6/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/6/physics_layer_0/angular_velocity = 0.0
+0:0/6/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 12, 16, 12, 16, -16, -16, -16)
+0:0/7 = 7
+0:0/7/flip_h = true
+0:0/7/flip_v = true
+0:0/7/transpose = true
+0:0/7/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/7/physics_layer_0/angular_velocity = 0.0
+0:0/7/physics_layer_0/polygon_0/points = PackedVector2Array(16, 12, -16, 12, -16, -16, 16, -16)
+
+[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_dri2i"]
+texture = ExtResource("1")
+margins = Vector2i(32, 0)
+texture_region_size = Vector2i(32, 32)
+0:0/next_alternative_id = 8
+0:0/0 = 0
+0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/0/physics_layer_0/angular_velocity = 0.0
+0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 16, -16, -12, 12, -12, 12, 16)
+0:0/1 = 1
+0:0/1/flip_h = true
+0:0/1/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/1/physics_layer_0/angular_velocity = 0.0
+0:0/1/physics_layer_0/polygon_0/points = PackedVector2Array(16, 16, 16, -12, -12, -12, -12, 16)
+0:0/2 = 2
+0:0/2/flip_v = true
+0:0/2/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/2/physics_layer_0/angular_velocity = 0.0
+0:0/2/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 12, 12, 12, 12, -16)
+0:0/3 = 3
+0:0/3/flip_h = true
+0:0/3/flip_v = true
+0:0/3/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/3/physics_layer_0/angular_velocity = 0.0
+0:0/3/physics_layer_0/polygon_0/points = PackedVector2Array(16, -16, 16, 12, -12, 12, -12, -16)
+0:0/4 = 4
+0:0/4/transpose = true
+0:0/4/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/4/physics_layer_0/angular_velocity = 0.0
+0:0/4/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 16, -16, -12, 12, -12, 12, 16)
+0:0/5 = 5
+0:0/5/flip_h = true
+0:0/5/transpose = true
+0:0/5/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/5/physics_layer_0/angular_velocity = 0.0
+0:0/5/physics_layer_0/polygon_0/points = PackedVector2Array(16, 16, 16, -12, -12, -12, -12, 16)
+0:0/6 = 6
+0:0/6/flip_v = true
+0:0/6/transpose = true
+0:0/6/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/6/physics_layer_0/angular_velocity = 0.0
+0:0/6/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 12, 12, 12, 12, -16)
+0:0/7 = 7
+0:0/7/flip_h = true
+0:0/7/flip_v = true
+0:0/7/transpose = true
+0:0/7/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/7/physics_layer_0/angular_velocity = 0.0
+0:0/7/physics_layer_0/polygon_0/points = PackedVector2Array(16, -16, 16, 12, -12, 12, -12, -16)
+
+[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_hfgct"]
+texture = ExtResource("1")
+margins = Vector2i(0, 32)
+texture_region_size = Vector2i(32, 32)
+0:0/next_alternative_id = 8
+0:0/0 = 0
+0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/0/physics_layer_0/angular_velocity = 0.0
+0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
+0:0/1 = 1
+0:0/1/flip_h = true
+0:0/1/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/1/physics_layer_0/angular_velocity = 0.0
+0:0/1/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
+0:0/2 = 2
+0:0/2/flip_v = true
+0:0/2/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/2/physics_layer_0/angular_velocity = 0.0
+0:0/2/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
+0:0/3 = 3
+0:0/3/flip_h = true
+0:0/3/flip_v = true
+0:0/3/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/3/physics_layer_0/angular_velocity = 0.0
+0:0/3/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
+0:0/4 = 4
+0:0/4/transpose = true
+0:0/4/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/4/physics_layer_0/angular_velocity = 0.0
+0:0/4/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
+0:0/5 = 5
+0:0/5/flip_h = true
+0:0/5/transpose = true
+0:0/5/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/5/physics_layer_0/angular_velocity = 0.0
+0:0/5/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
+0:0/6 = 6
+0:0/6/flip_v = true
+0:0/6/transpose = true
+0:0/6/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/6/physics_layer_0/angular_velocity = 0.0
+0:0/6/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
+0:0/7 = 7
+0:0/7/flip_h = true
+0:0/7/flip_v = true
+0:0/7/transpose = true
+0:0/7/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/7/physics_layer_0/angular_velocity = 0.0
+0:0/7/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
+
+[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_7xlxp"]
+texture = ExtResource("1")
+margins = Vector2i(192, 32)
+texture_region_size = Vector2i(32, 32)
+0:0/next_alternative_id = 8
+0:0/0 = 0
+0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/0/physics_layer_0/angular_velocity = 0.0
+0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
+0:0/1 = 1
+0:0/1/flip_h = true
+0:0/1/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/1/physics_layer_0/angular_velocity = 0.0
+0:0/1/physics_layer_0/polygon_0/points = PackedVector2Array(16, -16, -16, -16, -16, 16, 16, 16)
+0:0/2 = 2
+0:0/2/flip_v = true
+0:0/2/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/2/physics_layer_0/angular_velocity = 0.0
+0:0/2/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 16, 16, 16, 16, -16, -16, -16)
+0:0/3 = 3
+0:0/3/flip_h = true
+0:0/3/flip_v = true
+0:0/3/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/3/physics_layer_0/angular_velocity = 0.0
+0:0/3/physics_layer_0/polygon_0/points = PackedVector2Array(16, 16, -16, 16, -16, -16, 16, -16)
+0:0/4 = 4
+0:0/4/transpose = true
+0:0/4/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/4/physics_layer_0/angular_velocity = 0.0
+0:0/4/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
+0:0/5 = 5
+0:0/5/flip_h = true
+0:0/5/transpose = true
+0:0/5/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/5/physics_layer_0/angular_velocity = 0.0
+0:0/5/physics_layer_0/polygon_0/points = PackedVector2Array(16, -16, -16, -16, -16, 16, 16, 16)
+0:0/6 = 6
+0:0/6/flip_v = true
+0:0/6/transpose = true
+0:0/6/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/6/physics_layer_0/angular_velocity = 0.0
+0:0/6/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 16, 16, 16, 16, -16, -16, -16)
+0:0/7 = 7
+0:0/7/flip_h = true
+0:0/7/flip_v = true
+0:0/7/transpose = true
+0:0/7/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/7/physics_layer_0/angular_velocity = 0.0
+0:0/7/physics_layer_0/polygon_0/points = PackedVector2Array(16, 16, -16, 16, -16, -16, 16, -16)
+
+[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_64p8q"]
+texture = ExtResource("1")
+margins = Vector2i(64, 32)
+texture_region_size = Vector2i(32, 96)
+0:0/next_alternative_id = 8
+0:0/0 = 0
+0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/0/physics_layer_0/angular_velocity = 0.0
+0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -10, 16, 22, 16, 48, -16, 48)
+0:0/1 = 1
+0:0/1/flip_h = true
+0:0/1/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/1/physics_layer_0/angular_velocity = 0.0
+0:0/1/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 22, 16, -10, 16, 48, -16, 48)
+0:0/2 = 2
+0:0/2/flip_v = true
+0:0/2/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/2/physics_layer_0/angular_velocity = 0.0
+0:0/2/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -48, 16, -48, 16, -22, -16, 10)
+0:0/3 = 3
+0:0/3/flip_h = true
+0:0/3/flip_v = true
+0:0/3/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/3/physics_layer_0/angular_velocity = 0.0
+0:0/3/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -48, 16, -48, 16, 10, -16, -22)
+0:0/4 = 4
+0:0/4/transpose = true
+0:0/4/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/4/physics_layer_0/angular_velocity = 0.0
+0:0/4/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -28, 16, 4, 16, 32, -16, 32)
+0:0/5 = 5
+0:0/5/flip_h = true
+0:0/5/transpose = true
+0:0/5/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/5/physics_layer_0/angular_velocity = 0.0
+0:0/5/physics_layer_0/polygon_0/points = PackedVector2Array(16, -28, -16, 4, -16, 32, 16, 32)
+0:0/6 = 6
+0:0/6/flip_v = true
+0:0/6/transpose = true
+0:0/6/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/6/physics_layer_0/angular_velocity = 0.0
+0:0/6/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 28, 16, -4, 16, -32, -16, -32)
+0:0/7 = 7
+0:0/7/flip_h = true
+0:0/7/flip_v = true
+0:0/7/transpose = true
+0:0/7/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/7/physics_layer_0/angular_velocity = 0.0
+0:0/7/physics_layer_0/polygon_0/points = PackedVector2Array(16, 28, -16, -4, -16, -32, 16, -32)
+
+[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_bgjgk"]
+texture = ExtResource("1")
+margins = Vector2i(224, 32)
+texture_region_size = Vector2i(32, 32)
+0:0/next_alternative_id = 8
+0:0/0 = 0
+0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/0/physics_layer_0/angular_velocity = 0.0
+0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 16, -16, -16, 12, -16, 12, 16)
+0:0/1 = 1
+0:0/1/flip_h = true
+0:0/1/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/1/physics_layer_0/angular_velocity = 0.0
+0:0/1/physics_layer_0/polygon_0/points = PackedVector2Array(16, 16, 16, -16, -12, -16, -12, 16)
+0:0/2 = 2
+0:0/2/flip_v = true
+0:0/2/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/2/physics_layer_0/angular_velocity = 0.0
+0:0/2/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 12, 16, 12, -16)
+0:0/3 = 3
+0:0/3/flip_h = true
+0:0/3/flip_v = true
+0:0/3/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/3/physics_layer_0/angular_velocity = 0.0
+0:0/3/physics_layer_0/polygon_0/points = PackedVector2Array(16, -16, 16, 16, -12, 16, -12, -16)
+0:0/4 = 4
+0:0/4/transpose = true
+0:0/4/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/4/physics_layer_0/angular_velocity = 0.0
+0:0/4/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 16, -16, -16, 12, -16, 12, 16)
+0:0/5 = 5
+0:0/5/flip_h = true
+0:0/5/transpose = true
+0:0/5/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/5/physics_layer_0/angular_velocity = 0.0
+0:0/5/physics_layer_0/polygon_0/points = PackedVector2Array(16, 16, 16, -16, -12, -16, -12, 16)
+0:0/6 = 6
+0:0/6/flip_v = true
+0:0/6/transpose = true
+0:0/6/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/6/physics_layer_0/angular_velocity = 0.0
+0:0/6/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 12, 16, 12, -16)
+0:0/7 = 7
+0:0/7/flip_h = true
+0:0/7/flip_v = true
+0:0/7/transpose = true
+0:0/7/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/7/physics_layer_0/angular_velocity = 0.0
+0:0/7/physics_layer_0/polygon_0/points = PackedVector2Array(16, -16, 16, 16, -12, 16, -12, -16)
+
+[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_uq55q"]
+texture = ExtResource("1")
+margins = Vector2i(64, 0)
+texture_region_size = Vector2i(32, 32)
+0:0/next_alternative_id = 8
+0:0/0 = 0
+0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/0/physics_layer_0/angular_velocity = 0.0
+0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -12, 16, -12, 16, 12, -16, 12)
+0:0/1 = 1
+0:0/1/flip_h = true
+0:0/1/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/1/physics_layer_0/angular_velocity = 0.0
+0:0/1/physics_layer_0/polygon_0/points = PackedVector2Array(16, -12, -16, -12, -16, 12, 16, 12)
+0:0/2 = 2
+0:0/2/flip_v = true
+0:0/2/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/2/physics_layer_0/angular_velocity = 0.0
+0:0/2/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 12, 16, 12, 16, -12, -16, -12)
+0:0/3 = 3
+0:0/3/flip_h = true
+0:0/3/flip_v = true
+0:0/3/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/3/physics_layer_0/angular_velocity = 0.0
+0:0/3/physics_layer_0/polygon_0/points = PackedVector2Array(16, 12, -16, 12, -16, -12, 16, -12)
+0:0/4 = 4
+0:0/4/transpose = true
+0:0/4/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/4/physics_layer_0/angular_velocity = 0.0
+0:0/4/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -12, 16, -12, 16, 12, -16, 12)
+0:0/5 = 5
+0:0/5/flip_h = true
+0:0/5/transpose = true
+0:0/5/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/5/physics_layer_0/angular_velocity = 0.0
+0:0/5/physics_layer_0/polygon_0/points = PackedVector2Array(16, -12, -16, -12, -16, 12, 16, 12)
+0:0/6 = 6
+0:0/6/flip_v = true
+0:0/6/transpose = true
+0:0/6/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/6/physics_layer_0/angular_velocity = 0.0
+0:0/6/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 12, 16, 12, 16, -12, -16, -12)
+0:0/7 = 7
+0:0/7/flip_h = true
+0:0/7/flip_v = true
+0:0/7/transpose = true
+0:0/7/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/7/physics_layer_0/angular_velocity = 0.0
+0:0/7/physics_layer_0/polygon_0/points = PackedVector2Array(16, 12, -16, 12, -16, -12, 16, -12)
+
+[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_l5dh6"]
+texture = ExtResource("1")
+margins = Vector2i(96, 0)
+texture_region_size = Vector2i(32, 32)
+0:0/next_alternative_id = 8
+0:0/0 = 0
+0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/0/physics_layer_0/angular_velocity = 0.0
+0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -12, 12, -12, 12, 12, -16, 12)
+0:0/1 = 1
+0:0/1/flip_h = true
+0:0/1/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/1/physics_layer_0/angular_velocity = 0.0
+0:0/1/physics_layer_0/polygon_0/points = PackedVector2Array(16, -12, -12, -12, -12, 12, 16, 12)
+0:0/2 = 2
+0:0/2/flip_v = true
+0:0/2/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/2/physics_layer_0/angular_velocity = 0.0
+0:0/2/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 12, 12, 12, 12, -12, -16, -12)
+0:0/3 = 3
+0:0/3/flip_h = true
+0:0/3/flip_v = true
+0:0/3/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/3/physics_layer_0/angular_velocity = 0.0
+0:0/3/physics_layer_0/polygon_0/points = PackedVector2Array(16, 12, -12, 12, -12, -12, 16, -12)
+0:0/4 = 4
+0:0/4/transpose = true
+0:0/4/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/4/physics_layer_0/angular_velocity = 0.0
+0:0/4/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -12, 12, -12, 12, 12, -16, 12)
+0:0/5 = 5
+0:0/5/flip_h = true
+0:0/5/transpose = true
+0:0/5/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/5/physics_layer_0/angular_velocity = 0.0
+0:0/5/physics_layer_0/polygon_0/points = PackedVector2Array(16, -12, -12, -12, -12, 12, 16, 12)
+0:0/6 = 6
+0:0/6/flip_v = true
+0:0/6/transpose = true
+0:0/6/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/6/physics_layer_0/angular_velocity = 0.0
+0:0/6/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 12, 12, 12, 12, -12, -16, -12)
+0:0/7 = 7
+0:0/7/flip_h = true
+0:0/7/flip_v = true
+0:0/7/transpose = true
+0:0/7/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/7/physics_layer_0/angular_velocity = 0.0
+0:0/7/physics_layer_0/polygon_0/points = PackedVector2Array(16, 12, -12, 12, -12, -12, 16, -12)
+
+[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_w6c8t"]
+texture = ExtResource("1")
+margins = Vector2i(32, 32)
+texture_region_size = Vector2i(32, 32)
+0:0/next_alternative_id = 8
+0:0/0 = 0
+0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/0/physics_layer_0/angular_velocity = 0.0
+0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 16, -16, -16, 12, -16, 12, 16)
+0:0/1 = 1
+0:0/1/flip_h = true
+0:0/1/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/1/physics_layer_0/angular_velocity = 0.0
+0:0/1/physics_layer_0/polygon_0/points = PackedVector2Array(16, 16, 16, -16, -12, -16, -12, 16)
+0:0/2 = 2
+0:0/2/flip_v = true
+0:0/2/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/2/physics_layer_0/angular_velocity = 0.0
+0:0/2/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 12, 16, 12, -16)
+0:0/3 = 3
+0:0/3/flip_h = true
+0:0/3/flip_v = true
+0:0/3/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/3/physics_layer_0/angular_velocity = 0.0
+0:0/3/physics_layer_0/polygon_0/points = PackedVector2Array(16, -16, 16, 16, -12, 16, -12, -16)
+0:0/4 = 4
+0:0/4/transpose = true
+0:0/4/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/4/physics_layer_0/angular_velocity = 0.0
+0:0/4/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 16, -16, -16, 12, -16, 12, 16)
+0:0/5 = 5
+0:0/5/flip_h = true
+0:0/5/transpose = true
+0:0/5/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/5/physics_layer_0/angular_velocity = 0.0
+0:0/5/physics_layer_0/polygon_0/points = PackedVector2Array(16, 16, 16, -16, -12, -16, -12, 16)
+0:0/6 = 6
+0:0/6/flip_v = true
+0:0/6/transpose = true
+0:0/6/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/6/physics_layer_0/angular_velocity = 0.0
+0:0/6/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 12, 16, 12, -16)
+0:0/7 = 7
+0:0/7/flip_h = true
+0:0/7/flip_v = true
+0:0/7/transpose = true
+0:0/7/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/7/physics_layer_0/angular_velocity = 0.0
+0:0/7/physics_layer_0/polygon_0/points = PackedVector2Array(16, -16, 16, 16, -12, 16, -12, -16)
+
+[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_05nbk"]
+texture = ExtResource("1")
+margins = Vector2i(160, 64)
+texture_region_size = Vector2i(96, 32)
+0:0/next_alternative_id = 8
+0:0/0 = 0
+0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/0/physics_layer_0/angular_velocity = 0.0
+0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-48, 16, -48, -16, -20, -16, -20, 16)
+0:0/1 = 1
+0:0/1/flip_h = true
+0:0/1/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/1/physics_layer_0/angular_velocity = 0.0
+0:0/1/physics_layer_0/polygon_0/points = PackedVector2Array(48, 16, 48, -16, 20, -16.5, 20, 16)
+0:0/2 = 2
+0:0/2/flip_v = true
+0:0/2/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/2/physics_layer_0/angular_velocity = 0.0
+0:0/2/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -16, -32, 16, -4, 16, -4, -16)
+0:0/3 = 3
+0:0/3/flip_h = true
+0:0/3/flip_v = true
+0:0/3/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/3/physics_layer_0/angular_velocity = 0.0
+0:0/3/physics_layer_0/polygon_0/points = PackedVector2Array(32, -16, 32, 16, 4, 16, 4, -16)
+0:0/4 = 4
+0:0/4/transpose = true
+0:0/4/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/4/physics_layer_0/angular_velocity = 0.0
+0:0/4/physics_layer_0/polygon_0/points = PackedVector2Array(-32, 16, -32, -16, -4, -16, -4, 16)
+0:0/5 = 5
+0:0/5/flip_h = true
+0:0/5/transpose = true
+0:0/5/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/5/physics_layer_0/angular_velocity = 0.0
+0:0/5/physics_layer_0/polygon_0/points = PackedVector2Array(32, 16, 32, -16, 4, -16, 4, 16)
+0:0/6 = 6
+0:0/6/flip_v = true
+0:0/6/transpose = true
+0:0/6/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/6/physics_layer_0/angular_velocity = 0.0
+0:0/6/physics_layer_0/polygon_0/points = PackedVector2Array(-32, -16, -32, 16, -4, 16, -4, -16)
+0:0/7 = 7
+0:0/7/flip_h = true
+0:0/7/flip_v = true
+0:0/7/transpose = true
+0:0/7/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/7/physics_layer_0/angular_velocity = 0.0
+0:0/7/physics_layer_0/polygon_0/points = PackedVector2Array(32, -16, 32, 16, 4, 16, 4, -16)
+
+[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_ee0gv"]
+texture = ExtResource("1")
+margins = Vector2i(32, 64)
+texture_region_size = Vector2i(32, 32)
+0:0/next_alternative_id = 8
+0:0/0 = 0
+0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/0/physics_layer_0/angular_velocity = 0.0
+0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 16, -16, -16, 12, -16, 16, -12, 16, 16)
+0:0/1 = 1
+0:0/1/flip_h = true
+0:0/1/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/1/physics_layer_0/angular_velocity = 0.0
+0:0/1/physics_layer_0/polygon_0/points = PackedVector2Array(16, 16, 16, -16, -12, -16, -16, -12, -16, 16)
+0:0/2 = 2
+0:0/2/flip_v = true
+0:0/2/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/2/physics_layer_0/angular_velocity = 0.0
+0:0/2/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 12, 16, 16, 12, 16, -16)
+0:0/3 = 3
+0:0/3/flip_h = true
+0:0/3/flip_v = true
+0:0/3/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/3/physics_layer_0/angular_velocity = 0.0
+0:0/3/physics_layer_0/polygon_0/points = PackedVector2Array(16, -16, 16, 16, -12, 16, -16, 12, -16, -16)
+0:0/4 = 4
+0:0/4/transpose = true
+0:0/4/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/4/physics_layer_0/angular_velocity = 0.0
+0:0/4/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 16, -16, -16, 12, -16, 16, -12, 16, 16)
+0:0/5 = 5
+0:0/5/flip_h = true
+0:0/5/transpose = true
+0:0/5/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/5/physics_layer_0/angular_velocity = 0.0
+0:0/5/physics_layer_0/polygon_0/points = PackedVector2Array(16, 16, 16, -16, -12, -16, -16, -12, -16, 16)
+0:0/6 = 6
+0:0/6/flip_v = true
+0:0/6/transpose = true
+0:0/6/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/6/physics_layer_0/angular_velocity = 0.0
+0:0/6/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 12, 16, 16, 12, 16, -16)
+0:0/7 = 7
+0:0/7/flip_h = true
+0:0/7/flip_v = true
+0:0/7/transpose = true
+0:0/7/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/7/physics_layer_0/angular_velocity = 0.0
+0:0/7/physics_layer_0/polygon_0/points = PackedVector2Array(16, -16, 16, 16, -12, 16, -16, 12, -16, -16)
+
+[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_lnu6d"]
+texture = ExtResource("1")
+margins = Vector2i(96, 96)
+texture_region_size = Vector2i(32, 32)
+0:0/next_alternative_id = 8
+0:0/0 = 0
+0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/0/physics_layer_0/angular_velocity = 0.0
+0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 16, -16, -12, 16, -12, 16, 16)
+0:0/1 = 1
+0:0/1/flip_h = true
+0:0/1/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/1/physics_layer_0/angular_velocity = 0.0
+0:0/1/physics_layer_0/polygon_0/points = PackedVector2Array(16, 16, 16, -12, -16, -12, -16, 16)
+0:0/2 = 2
+0:0/2/flip_v = true
+0:0/2/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/2/physics_layer_0/angular_velocity = 0.0
+0:0/2/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 12, 16, 12, 16, -16)
+0:0/3 = 3
+0:0/3/flip_h = true
+0:0/3/flip_v = true
+0:0/3/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/3/physics_layer_0/angular_velocity = 0.0
+0:0/3/physics_layer_0/polygon_0/points = PackedVector2Array(16, -16, 16, 12, -16, 12, -16, -16)
+0:0/4 = 4
+0:0/4/transpose = true
+0:0/4/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/4/physics_layer_0/angular_velocity = 0.0
+0:0/4/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 16, -16, -12, 16, -12, 16, 16)
+0:0/5 = 5
+0:0/5/flip_h = true
+0:0/5/transpose = true
+0:0/5/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/5/physics_layer_0/angular_velocity = 0.0
+0:0/5/physics_layer_0/polygon_0/points = PackedVector2Array(16, 16, 16, -12, -16, -12, -16, 16)
+0:0/6 = 6
+0:0/6/flip_v = true
+0:0/6/transpose = true
+0:0/6/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/6/physics_layer_0/angular_velocity = 0.0
+0:0/6/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 12, 16, 12, 16, -16)
+0:0/7 = 7
+0:0/7/flip_h = true
+0:0/7/flip_v = true
+0:0/7/transpose = true
+0:0/7/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/7/physics_layer_0/angular_velocity = 0.0
+0:0/7/physics_layer_0/polygon_0/points = PackedVector2Array(16, -16, 16, 12, -16, 12, -16, -16)
+
+[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_8javq"]
+texture = ExtResource("1")
+margins = Vector2i(128, 96)
+texture_region_size = Vector2i(32, 32)
+0:0/next_alternative_id = 8
+0:0/0 = 0
+0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/0/physics_layer_0/angular_velocity = 0.0
+0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 16, -16, -12, 16, -12, 16, 16)
+0:0/1 = 1
+0:0/1/flip_h = true
+0:0/1/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/1/physics_layer_0/angular_velocity = 0.0
+0:0/1/physics_layer_0/polygon_0/points = PackedVector2Array(16, 16, 16, -12, -16, -12, -16, 16)
+0:0/2 = 2
+0:0/2/flip_v = true
+0:0/2/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/2/physics_layer_0/angular_velocity = 0.0
+0:0/2/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 12, 16, 12, 16, -16)
+0:0/3 = 3
+0:0/3/flip_h = true
+0:0/3/flip_v = true
+0:0/3/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/3/physics_layer_0/angular_velocity = 0.0
+0:0/3/physics_layer_0/polygon_0/points = PackedVector2Array(16, -16, 16, 12, -16, 12, -16, -16)
+0:0/4 = 4
+0:0/4/transpose = true
+0:0/4/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/4/physics_layer_0/angular_velocity = 0.0
+0:0/4/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 16, -16, -12, 16, -12, 16, 16)
+0:0/5 = 5
+0:0/5/flip_h = true
+0:0/5/transpose = true
+0:0/5/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/5/physics_layer_0/angular_velocity = 0.0
+0:0/5/physics_layer_0/polygon_0/points = PackedVector2Array(16, 16, 16, -12, -16, -12, -16, 16)
+0:0/6 = 6
+0:0/6/flip_v = true
+0:0/6/transpose = true
+0:0/6/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/6/physics_layer_0/angular_velocity = 0.0
+0:0/6/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 12, 16, 12, 16, -16)
+0:0/7 = 7
+0:0/7/flip_h = true
+0:0/7/flip_v = true
+0:0/7/transpose = true
+0:0/7/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/7/physics_layer_0/angular_velocity = 0.0
+0:0/7/physics_layer_0/polygon_0/points = PackedVector2Array(16, -16, 16, 12, -16, 12, -16, -16)
+
+[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_8pchj"]
+texture = ExtResource("1")
+margins = Vector2i(128, 64)
+texture_region_size = Vector2i(32, 32)
+0:0/next_alternative_id = 8
+0:0/0 = 0
+0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/0/physics_layer_0/angular_velocity = 0.0
+0:0/1 = 1
+0:0/1/flip_h = true
+0:0/1/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/1/physics_layer_0/angular_velocity = 0.0
+0:0/2 = 2
+0:0/2/flip_v = true
+0:0/2/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/2/physics_layer_0/angular_velocity = 0.0
+0:0/3 = 3
+0:0/3/flip_h = true
+0:0/3/flip_v = true
+0:0/3/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/3/physics_layer_0/angular_velocity = 0.0
+0:0/4 = 4
+0:0/4/transpose = true
+0:0/4/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/4/physics_layer_0/angular_velocity = 0.0
+0:0/5 = 5
+0:0/5/flip_h = true
+0:0/5/transpose = true
+0:0/5/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/5/physics_layer_0/angular_velocity = 0.0
+0:0/6 = 6
+0:0/6/flip_v = true
+0:0/6/transpose = true
+0:0/6/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/6/physics_layer_0/angular_velocity = 0.0
+0:0/7 = 7
+0:0/7/flip_h = true
+0:0/7/flip_v = true
+0:0/7/transpose = true
+0:0/7/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/7/physics_layer_0/angular_velocity = 0.0
+
+[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_s315k"]
+texture = ExtResource("1")
+margins = Vector2i(128, 32)
+texture_region_size = Vector2i(32, 32)
+0:0/next_alternative_id = 8
+0:0/0 = 0
+0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/0/physics_layer_0/angular_velocity = 0.0
+0:0/1 = 1
+0:0/1/flip_h = true
+0:0/1/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/1/physics_layer_0/angular_velocity = 0.0
+0:0/2 = 2
+0:0/2/flip_v = true
+0:0/2/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/2/physics_layer_0/angular_velocity = 0.0
+0:0/3 = 3
+0:0/3/flip_h = true
+0:0/3/flip_v = true
+0:0/3/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/3/physics_layer_0/angular_velocity = 0.0
+0:0/4 = 4
+0:0/4/transpose = true
+0:0/4/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/4/physics_layer_0/angular_velocity = 0.0
+0:0/5 = 5
+0:0/5/flip_h = true
+0:0/5/transpose = true
+0:0/5/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/5/physics_layer_0/angular_velocity = 0.0
+0:0/6 = 6
+0:0/6/flip_v = true
+0:0/6/transpose = true
+0:0/6/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/6/physics_layer_0/angular_velocity = 0.0
+0:0/7 = 7
+0:0/7/flip_h = true
+0:0/7/flip_v = true
+0:0/7/transpose = true
+0:0/7/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/7/physics_layer_0/angular_velocity = 0.0
+
+[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_cnnsu"]
+texture = ExtResource("1")
+margins = Vector2i(128, 0)
+texture_region_size = Vector2i(32, 32)
+0:0/next_alternative_id = 8
+0:0/0 = 0
+0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/0/physics_layer_0/angular_velocity = 0.0
+0:0/1 = 1
+0:0/1/flip_h = true
+0:0/1/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/1/physics_layer_0/angular_velocity = 0.0
+0:0/2 = 2
+0:0/2/flip_v = true
+0:0/2/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/2/physics_layer_0/angular_velocity = 0.0
+0:0/3 = 3
+0:0/3/flip_h = true
+0:0/3/flip_v = true
+0:0/3/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/3/physics_layer_0/angular_velocity = 0.0
+0:0/4 = 4
+0:0/4/transpose = true
+0:0/4/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/4/physics_layer_0/angular_velocity = 0.0
+0:0/5 = 5
+0:0/5/flip_h = true
+0:0/5/transpose = true
+0:0/5/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/5/physics_layer_0/angular_velocity = 0.0
+0:0/6 = 6
+0:0/6/flip_v = true
+0:0/6/transpose = true
+0:0/6/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/6/physics_layer_0/angular_velocity = 0.0
+0:0/7 = 7
+0:0/7/flip_h = true
+0:0/7/flip_v = true
+0:0/7/transpose = true
+0:0/7/physics_layer_0/linear_velocity = Vector2(0, 0)
+0:0/7/physics_layer_0/angular_velocity = 0.0
+
+[resource]
+tile_size = Vector2i(32, 32)
+physics_layer_0/collision_layer = 1
+sources/0 = SubResource("TileSetAtlasSource_va8am")
+sources/1 = SubResource("TileSetAtlasSource_dri2i")
+sources/2 = SubResource("TileSetAtlasSource_w6c8t")
+sources/3 = SubResource("TileSetAtlasSource_05nbk")
+sources/4 = SubResource("TileSetAtlasSource_ee0gv")
+sources/5 = SubResource("TileSetAtlasSource_lnu6d")
+sources/6 = SubResource("TileSetAtlasSource_8javq")
+sources/7 = SubResource("TileSetAtlasSource_8pchj")
+sources/8 = SubResource("TileSetAtlasSource_s315k")
+sources/9 = SubResource("TileSetAtlasSource_cnnsu")
+sources/10 = SubResource("TileSetAtlasSource_hfgct")
+sources/11 = SubResource("TileSetAtlasSource_7xlxp")
+sources/12 = SubResource("TileSetAtlasSource_64p8q")
+sources/13 = SubResource("TileSetAtlasSource_bgjgk")
+sources/14 = SubResource("TileSetAtlasSource_uq55q")
+sources/15 = SubResource("TileSetAtlasSource_l5dh6")

+ 0 - 0
2d/physics_platformer/TilesetEdit.tscn → 2d/physics_platformer/tileset_edit.tscn


Some files were not shown because too many files changed in this diff