Procházet zdrojové kódy

Port demos with remade art assets to Godot 4 (#922)

This re-ports the following demos to Godot 4 following their latest `3.x` versions:

- 2D Navigation with AStarGrid2D
- 2D JRPG Demo
- 2D Isometric Game
- 2D Platformer

Some tweaks have also been made in the process, such as split screen players
having different colors in the 2D Platformer demo.

Co-authored-by: Nonparoxysmic <[email protected]>
Hugo Locurcio před 1 rokem
rodič
revize
4d01a2678f
100 změnil soubory, kde provedl 3759 přidání a 562 odebrání
  1. 6 2
      2d/isometric/README.md
  2. binární
      2d/isometric/decorations/banner.png
  3. 4 4
      2d/isometric/decorations/banner.png.import
  4. binární
      2d/isometric/decorations/bone_pile_1.png
  5. 34 0
      2d/isometric/decorations/bone_pile_1.png.import
  6. 20 0
      2d/isometric/decorations/bone_pile_1.tscn
  7. binární
      2d/isometric/decorations/bone_pile_2.png
  8. 34 0
      2d/isometric/decorations/bone_pile_2.png.import
  9. 20 0
      2d/isometric/decorations/bone_pile_2.tscn
  10. binární
      2d/isometric/decorations/candle.png
  11. 4 4
      2d/isometric/decorations/candle.png.import
  12. 131 0
      2d/isometric/decorations/candle.tscn
  13. binární
      2d/isometric/decorations/coin_pile.png
  14. 34 0
      2d/isometric/decorations/coin_pile.png.import
  15. 20 0
      2d/isometric/decorations/coin_pile.tscn
  16. binární
      2d/isometric/decorations/crow_looking.png
  17. 34 0
      2d/isometric/decorations/crow_looking.png.import
  18. binární
      2d/isometric/decorations/crow_sleep.png
  19. 34 0
      2d/isometric/decorations/crow_sleep.png.import
  20. binární
      2d/isometric/decorations/drape_1.png
  21. 34 0
      2d/isometric/decorations/drape_1.png.import
  22. binární
      2d/isometric/decorations/fire.png
  23. 4 4
      2d/isometric/decorations/fire.png.import
  24. binární
      2d/isometric/decorations/glow.png
  25. 4 4
      2d/isometric/decorations/glow.png.import
  26. 9 0
      2d/isometric/decorations/internal_shadow.tscn
  27. binární
      2d/isometric/decorations/looking.psd
  28. binární
      2d/isometric/decorations/paw_prints.png
  29. 34 0
      2d/isometric/decorations/paw_prints.png.import
  30. binární
      2d/isometric/decorations/rug_1.png
  31. 4 4
      2d/isometric/decorations/rug_1.png.import
  32. binární
      2d/isometric/decorations/shadow_gradient.png
  33. 34 0
      2d/isometric/decorations/shadow_gradient.png.import
  34. binární
      2d/isometric/decorations/sparkle.png
  35. 34 0
      2d/isometric/decorations/sparkle.png.import
  36. binární
      2d/isometric/decorations/vase_1.png
  37. 4 4
      2d/isometric/decorations/vase_1.png.import
  38. 20 0
      2d/isometric/decorations/vase_1.tscn
  39. binární
      2d/isometric/decorations/vase_2.png
  40. 34 0
      2d/isometric/decorations/vase_2.png.import
  41. 21 0
      2d/isometric/decorations/vase_2.tscn
  42. binární
      2d/isometric/decorations/wall_skull.png
  43. 34 0
      2d/isometric/decorations/wall_skull.png.import
  44. 427 3
      2d/isometric/dungeon.tscn
  45. binární
      2d/isometric/icon.webp
  46. 1 1
      2d/isometric/icon.webp.import
  47. binární
      2d/isometric/isotiles.png
  48. binární
      2d/isometric/merged_tiles.png
  49. 56 0
      2d/isometric/player/goblin.gd
  50. binární
      2d/isometric/player/goblin.png
  51. 34 0
      2d/isometric/player/goblin.png.import
  52. 1925 0
      2d/isometric/player/goblin.tscn
  53. 29 13
      2d/isometric/project.godot
  54. binární
      2d/isometric/screenshots/isometric.png
  55. binární
      2d/isometric/screenshots/isometric.webp
  56. 0 226
      2d/isometric/tileset.tres
  57. binární
      2d/isometric/tileset/isotiles.png
  58. 4 4
      2d/isometric/tileset/isotiles.png.import
  59. 248 0
      2d/isometric/tileset/tileset.tres
  60. 60 0
      2d/isometric/tileset/tileset_edit.tscn
  61. 0 53
      2d/isometric/tileset_edit.tscn
  62. 0 13
      2d/isometric/troll.gd
  63. binární
      2d/isometric/troll.png
  64. 0 27
      2d/isometric/troll.tscn
  65. 1 1
      2d/navigation_astar/README.md
  66. 27 6
      2d/navigation_astar/game.tscn
  67. binární
      2d/navigation_astar/icon.webp
  68. 1 1
      2d/navigation_astar/icon.webp.import
  69. 7 5
      2d/navigation_astar/pathfind_astar.gd
  70. 7 4
      2d/navigation_astar/project.godot
  71. binární
      2d/navigation_astar/screenshots/nav_astar.png
  72. binární
      2d/navigation_astar/screenshots/navigation_astar.webp
  73. binární
      2d/navigation_astar/sprites/character.png
  74. 1 1
      2d/navigation_astar/sprites/character.png.import
  75. binární
      2d/navigation_astar/sprites/obstacle.png
  76. binární
      2d/navigation_astar/sprites/path_end.png
  77. binární
      2d/navigation_astar/sprites/path_start.png
  78. 0 34
      2d/navigation_astar/sprites/path_start.png.import
  79. binární
      2d/navigation_astar/sprites/space.png
  80. 4 4
      2d/navigation_astar/sprites/space.png.import
  81. binární
      2d/navigation_astar/sprites/sparkle.png
  82. 34 0
      2d/navigation_astar/sprites/sparkle.png.import
  83. 0 26
      2d/navigation_astar/tileset.tres
  84. 15 0
      2d/navigation_astar/tileset/tileset.tres
  85. binární
      2d/navigation_astar/tileset/tilesheet.png
  86. 34 0
      2d/navigation_astar/tileset/tilesheet.png.import
  87. 19 16
      2d/platformer/README.md
  88. 4 0
      2d/platformer/default_bus_layout.tres
  89. 3 3
      2d/platformer/enemy/enemy.gd
  90. 63 51
      2d/platformer/enemy/enemy.tscn
  91. binární
      2d/platformer/enemy/enemy.webp
  92. 1 1
      2d/platformer/enemy/enemy.webp.import
  93. 1 1
      2d/platformer/enemy/explode.wav.import
  94. 1 1
      2d/platformer/enemy/hit.wav.import
  95. 3 6
      2d/platformer/game_singleplayer.tscn
  96. 16 9
      2d/platformer/game_splitscreen.tscn
  97. 81 24
      2d/platformer/gui/coins_counter.tscn
  98. 5 0
      2d/platformer/gui/kenney_mini_square.tres
  99. 1 1
      2d/platformer/gui/kenney_mini_square.ttf.import
  100. 1 1
      2d/platformer/gui/theme.tres

+ 6 - 2
2d/isometric/README.md

@@ -7,7 +7,7 @@ as well as be occluded when standing in front or behind them.
 
 Language: GDScript
 
-Renderer: GLES 2
+Renderer: Compatibility
 
 Check out this demo on the asset library: https://godotengine.org/asset-library/asset/112
 
@@ -21,6 +21,10 @@ and [`CollisionPolygon2D`](https://docs.godotengine.org/en/latest/classes/class_
 at their base. The player also has a collider at its base,
 which makes the player collide with the level.
 
+2D lighting effects are achieved using a mixture of PointLight2D nodes (which provide real-time shadows)
+and pre-placed Polygon2Ds with sprites. To provide additional ambient shading, the goblin also has a blob
+shadow below its feet (a Sprite2D with a texture).
+
 ## Screenshots
 
-![Screenshot](screenshots/isometric.png)
+![Screenshot](screenshots/isometric.webp)

binární
2d/isometric/decorations/banner.png


+ 4 - 4
2d/platformer/level/cloud_1.webp.import → 2d/isometric/decorations/banner.png.import

@@ -2,16 +2,16 @@
 
 importer="texture"
 type="CompressedTexture2D"
-uid="uid://b4n7s65t0qoep"
-path="res://.godot/imported/cloud_1.webp-d4440f8a56714fd63d83c7074d20ace3.ctex"
+uid="uid://bycat883fu7q2"
+path="res://.godot/imported/banner.png-45264389ab2131df9b78c5ec3b246773.ctex"
 metadata={
 "vram_texture": false
 }
 
 [deps]
 
-source_file="res://level/cloud_1.webp"
-dest_files=["res://.godot/imported/cloud_1.webp-d4440f8a56714fd63d83c7074d20ace3.ctex"]
+source_file="res://decorations/banner.png"
+dest_files=["res://.godot/imported/banner.png-45264389ab2131df9b78c5ec3b246773.ctex"]
 
 [params]
 

binární
2d/isometric/decorations/bone_pile_1.png


+ 34 - 0
2d/isometric/decorations/bone_pile_1.png.import

@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dpxv7d5d7hm33"
+path="res://.godot/imported/bone_pile_1.png-72c582c4f31012bb8009120719983b0c.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://decorations/bone_pile_1.png"
+dest_files=["res://.godot/imported/bone_pile_1.png-72c582c4f31012bb8009120719983b0c.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1

+ 20 - 0
2d/isometric/decorations/bone_pile_1.tscn

@@ -0,0 +1,20 @@
+[gd_scene load_steps=3 format=2]
+
+[ext_resource path="res://decorations/bone_pile_1.png" type="Texture2D" id=1]
+
+[sub_resource type="CapsuleShape2D" id=1]
+radius = 18.0
+height = 28.0
+
+[node name="bone_pile" type="Node2D"]
+
+[node name="StaticBody2D" type="StaticBody2D" parent="."]
+
+[node name="Sprite2D" type="Sprite2D" parent="StaticBody2D"]
+position = Vector2( 0, -14 )
+texture = ExtResource( 1 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="StaticBody2D"]
+position = Vector2( 0, -15 )
+rotation = 1.5708
+shape = SubResource( 1 )

binární
2d/isometric/decorations/bone_pile_2.png


+ 34 - 0
2d/isometric/decorations/bone_pile_2.png.import

@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://wxpdcei7yeuk"
+path="res://.godot/imported/bone_pile_2.png-f448133711e0ebea56f9e49e956ac902.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://decorations/bone_pile_2.png"
+dest_files=["res://.godot/imported/bone_pile_2.png-f448133711e0ebea56f9e49e956ac902.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1

+ 20 - 0
2d/isometric/decorations/bone_pile_2.tscn

@@ -0,0 +1,20 @@
+[gd_scene load_steps=3 format=2]
+
+[ext_resource path="res://decorations/bone_pile_2.png" type="Texture2D" id=1]
+
+[sub_resource type="CapsuleShape2D" id=1]
+radius = 13.0
+height = 26.0001
+
+[node name="bone_pile" type="Node2D"]
+
+[node name="Sprite2D" type="Sprite2D" parent="."]
+position = Vector2( 0, -13 )
+texture = ExtResource( 1 )
+
+[node name="StaticBody2D" type="StaticBody2D" parent="."]
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="StaticBody2D"]
+position = Vector2( 0, -13 )
+rotation = 1.5708
+shape = SubResource( 1 )

binární
2d/isometric/decorations/candle.png


+ 4 - 4
2d/platformer/level/cloud_2.webp.import → 2d/isometric/decorations/candle.png.import

@@ -2,16 +2,16 @@
 
 importer="texture"
 type="CompressedTexture2D"
-uid="uid://cubkvnu4fdwki"
-path="res://.godot/imported/cloud_2.webp-6870de4e2ed6536e37af4c22aa731ad1.ctex"
+uid="uid://bkae3n748i0ow"
+path="res://.godot/imported/candle.png-223de51ae9e8ec99121079382498836e.ctex"
 metadata={
 "vram_texture": false
 }
 
 [deps]
 
-source_file="res://level/cloud_2.webp"
-dest_files=["res://.godot/imported/cloud_2.webp-6870de4e2ed6536e37af4c22aa731ad1.ctex"]
+source_file="res://decorations/candle.png"
+dest_files=["res://.godot/imported/candle.png-223de51ae9e8ec99121079382498836e.ctex"]
 
 [params]
 

+ 131 - 0
2d/isometric/decorations/candle.tscn

@@ -0,0 +1,131 @@
+[gd_scene load_steps=14 format=2]
+
+[ext_resource path="res://decorations/sparkle.png" type="Texture2D" id=1]
+[ext_resource path="res://decorations/candle.png" type="Texture2D" id=2]
+[ext_resource path="res://decorations/fire.png" type="Texture2D" id=3]
+[ext_resource path="res://decorations/glow.png" type="Texture2D" id=4]
+
+[sub_resource type="CanvasItemMaterial" id=1]
+particles_animation = true
+particles_anim_h_frames = 11
+particles_anim_v_frames = 1
+particles_anim_loop = false
+
+[sub_resource type="Gradient" id=2]
+offsets = PackedFloat32Array( 0, 0.625698, 1 )
+colors = PackedColorArray( 1, 0.584314, 0, 1, 1, 0.84063, 0.226563, 1, 1, 0.584314, 0, 1 )
+
+[sub_resource type="CanvasItemMaterial" id=3]
+blend_mode = 1
+particles_animation = true
+particles_anim_h_frames = 8
+particles_anim_v_frames = 1
+particles_anim_loop = false
+
+[sub_resource type="Curve" id=4]
+max_value = 0.3
+_data = [ Vector2( 0, 0 ), 0.0, 1.36377, 0, 0, Vector2( 0.262376, 0.188182 ), 0.41974, 0.41974, 0, 0, Vector2( 1, 0.0295454 ), -1.06101, 0.0, 0, 0 ]
+
+[sub_resource type="Gradient" id=5]
+offsets = PackedFloat32Array( 0, 0.435754, 1 )
+colors = PackedColorArray( 1, 0.351563, 0, 1, 0.895996, 0.745333, 0.230999, 1, 1, 0.426842, 0.0234375, 1 )
+
+[sub_resource type="Gradient" id=12]
+offsets = PackedFloat32Array( 0, 0.100559, 0.234637, 0.480447, 0.603352, 1 )
+colors = PackedColorArray( 0.714844, 0.714844, 0.714844, 1, 0.382813, 0.382813, 0.382813, 1, 0.601563, 0.601563, 0.601563, 1, 0.229687, 0.229687, 0.229687, 1, 0.0197581, 0.0197581, 0.0197581, 1, 0, 0, 0, 1 )
+
+[sub_resource type="GradientTexture2D" id=9]
+gradient = SubResource( 12 )
+width = 128
+height = 128
+fill = 1
+fill_from = Vector2( 0.5, 0.5 )
+fill_to = Vector2( 0, 0 )
+
+[sub_resource type="Gradient" id=13]
+offsets = PackedFloat32Array( 0.0111732, 0.843575 )
+colors = PackedColorArray( 0.648926, 0.648926, 0.648926, 1, 0, 0, 0, 1 )
+
+[sub_resource type="GradientTexture2D" id=10]
+gradient = SubResource( 13 )
+width = 800
+height = 500
+fill = 1
+fill_from = Vector2( 0.5, 0.5 )
+
+[node name="Node2D" type="Node2D"]
+
+[node name="Sprite2D" type="Sprite2D" parent="."]
+light_mask = 128
+position = Vector2( 0, -11 )
+texture = ExtResource( 2 )
+
+[node name="glow" type="CPUParticles2D" parent="Sprite2D"]
+modulate = Color( 1, 0.360784, 0.113725, 1 )
+light_mask = 128
+position = Vector2( -13, -33.244 )
+scale = Vector2( 0.3, 0.5 )
+amount = 1
+lifetime = 0.8
+texture = ExtResource( 4 )
+gravity = Vector2( 0, 0 )
+
+[node name="Fire" type="CPUParticles2D" parent="Sprite2D"]
+light_mask = 128
+material = SubResource( 1 )
+position = Vector2( -13, -35 )
+scale = Vector2( 0.6, 0.6 )
+amount = 1
+lifetime = 0.8
+texture = ExtResource( 3 )
+gravity = Vector2( 0, 0 )
+color_ramp = SubResource( 2 )
+anim_speed = 1.0
+
+[node name="Sparkle" type="CPUParticles2D" parent="Sprite2D"]
+light_mask = 128
+material = SubResource( 3 )
+position = Vector2( -13, -35 )
+scale = Vector2( 0.6, 0.6 )
+amount = 3
+texture = ExtResource( 1 )
+emission_shape = 1
+emission_sphere_radius = 8.0
+gravity = Vector2( 0, -80 )
+angular_velocity = 1.0
+tangential_accel = 49.54
+scale_amount_curve = SubResource( 4 )
+color_ramp = SubResource( 5 )
+anim_speed = 1.0
+
+[node name="flow front" type="CPUParticles2D" parent="Sprite2D"]
+modulate = Color( 0.94902, 1, 0, 1 )
+light_mask = 128
+position = Vector2( -13, -28.689 )
+scale = Vector2( 0.25, 0.25 )
+amount = 1
+lifetime = 0.8
+texture = ExtResource( 4 )
+gravity = Vector2( 0, 0 )
+
+[node name="Light2D2" type="PointLight2D" parent="."]
+light_mask = 2
+position = Vector2( -15, -49 )
+texture = SubResource( 9 )
+color = Color( 1, 0.466667, 0.0352941, 1 )
+energy = 2.0
+range_height = 450.9
+range_item_cull_mask = 145
+shadow_buffer_size = 512
+shadow_gradient_length = 30.0
+shadow_item_cull_mask = 145
+
+[node name="PointLight2D" type="PointLight2D" parent="."]
+light_mask = 2
+texture = SubResource( 10 )
+color = Color( 0.709804, 0.388235, 0.313726, 1 )
+range_height = 901.9
+range_item_cull_mask = 17
+shadow_enabled = true
+shadow_gradient_length = 20.0
+shadow_item_cull_mask = 17

binární
2d/isometric/decorations/coin_pile.png


+ 34 - 0
2d/isometric/decorations/coin_pile.png.import

@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b6sjbdj350qkj"
+path="res://.godot/imported/coin_pile.png-e6c4ef8bf22301fe805244aafb152afe.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://decorations/coin_pile.png"
+dest_files=["res://.godot/imported/coin_pile.png-e6c4ef8bf22301fe805244aafb152afe.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1

+ 20 - 0
2d/isometric/decorations/coin_pile.tscn

@@ -0,0 +1,20 @@
+[gd_scene load_steps=3 format=2]
+
+[ext_resource path="res://decorations/coin_pile.png" type="Texture2D" id=1]
+
+[sub_resource type="CapsuleShape2D" id=1]
+radius = 12.0
+height = 38.0
+
+[node name="coin_pile" type="Node2D"]
+
+[node name="StaticBody2D" type="StaticBody2D" parent="."]
+
+[node name="Sprite2D" type="Sprite2D" parent="StaticBody2D"]
+position = Vector2( 0, -23 )
+texture = ExtResource( 1 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="StaticBody2D"]
+position = Vector2( 0, -13 )
+rotation = 1.5708
+shape = SubResource( 1 )

binární
2d/isometric/decorations/crow_looking.png


+ 34 - 0
2d/isometric/decorations/crow_looking.png.import

@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dami7imxtk2iq"
+path="res://.godot/imported/crow_looking.png-21ce662085fe50bb572e6cecb19ea02a.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://decorations/crow_looking.png"
+dest_files=["res://.godot/imported/crow_looking.png-21ce662085fe50bb572e6cecb19ea02a.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1

binární
2d/isometric/decorations/crow_sleep.png


+ 34 - 0
2d/isometric/decorations/crow_sleep.png.import

@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://d3j0qnogdctw4"
+path="res://.godot/imported/crow_sleep.png-8118ad8761e95d588250a6deae9ca9c0.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://decorations/crow_sleep.png"
+dest_files=["res://.godot/imported/crow_sleep.png-8118ad8761e95d588250a6deae9ca9c0.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1

binární
2d/isometric/decorations/drape_1.png


+ 34 - 0
2d/isometric/decorations/drape_1.png.import

@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dahfdmuvra5we"
+path="res://.godot/imported/drape_1.png-4cc207f7e61e16248cb4322ecca80e49.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://decorations/drape_1.png"
+dest_files=["res://.godot/imported/drape_1.png-4cc207f7e61e16248cb4322ecca80e49.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1

binární
2d/isometric/decorations/fire.png


+ 4 - 4
2d/isometric/troll.png.import → 2d/isometric/decorations/fire.png.import

@@ -2,16 +2,16 @@
 
 importer="texture"
 type="CompressedTexture2D"
-uid="uid://b8fv8swublbqq"
-path="res://.godot/imported/troll.png-78efc50bfccaa17f54d40cfea3eef5f5.ctex"
+uid="uid://bfa7cvk3m65n3"
+path="res://.godot/imported/fire.png-3d46874d6317d8fad2d37ee8071d140d.ctex"
 metadata={
 "vram_texture": false
 }
 
 [deps]
 
-source_file="res://troll.png"
-dest_files=["res://.godot/imported/troll.png-78efc50bfccaa17f54d40cfea3eef5f5.ctex"]
+source_file="res://decorations/fire.png"
+dest_files=["res://.godot/imported/fire.png-3d46874d6317d8fad2d37ee8071d140d.ctex"]
 
 [params]
 

binární
2d/isometric/decorations/glow.png


+ 4 - 4
2d/platformer/level/sky.webp.import → 2d/isometric/decorations/glow.png.import

@@ -2,16 +2,16 @@
 
 importer="texture"
 type="CompressedTexture2D"
-uid="uid://cnxf4hsvrcgka"
-path="res://.godot/imported/sky.webp-378e3d4469ee1943579600be36d5a9f5.ctex"
+uid="uid://cginrtmcplrec"
+path="res://.godot/imported/glow.png-412cb028114e1a11dcd8adb3e27078d4.ctex"
 metadata={
 "vram_texture": false
 }
 
 [deps]
 
-source_file="res://level/sky.webp"
-dest_files=["res://.godot/imported/sky.webp-378e3d4469ee1943579600be36d5a9f5.ctex"]
+source_file="res://decorations/glow.png"
+dest_files=["res://.godot/imported/glow.png-412cb028114e1a11dcd8adb3e27078d4.ctex"]
 
 [params]
 

+ 9 - 0
2d/isometric/decorations/internal_shadow.tscn

@@ -0,0 +1,9 @@
+[gd_scene load_steps=2 format=2]
+
+[ext_resource path="res://decorations/shadow_gradient.png" type="Texture2D" id=1]
+
+[node name="InternalShadow" type="Polygon2D"]
+color = Color( 0.0705882, 0.0705882, 0.266667, 0.85098 )
+texture = ExtResource( 1 )
+polygon = PackedVector2Array( -92, -289, -94, 1, 128, -1, 121, -295 )
+uv = PackedVector2Array( -2, -1, -2, 292, 264, 291, 261, -2 )

binární
2d/isometric/decorations/looking.psd


binární
2d/isometric/decorations/paw_prints.png


+ 34 - 0
2d/isometric/decorations/paw_prints.png.import

@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dmqbp4e43sm1t"
+path="res://.godot/imported/paw_prints.png-f99788aaeccec00607d299cbda1deba3.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://decorations/paw_prints.png"
+dest_files=["res://.godot/imported/paw_prints.png-f99788aaeccec00607d299cbda1deba3.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1

binární
2d/isometric/decorations/rug_1.png


+ 4 - 4
2d/platformer/player/player.webp.import → 2d/isometric/decorations/rug_1.png.import

@@ -2,16 +2,16 @@
 
 importer="texture"
 type="CompressedTexture2D"
-uid="uid://go76jbr7e1px"
-path="res://.godot/imported/player.webp-f8efd9c2246a95708b9c4853ed21513e.ctex"
+uid="uid://bqugyxfkeyt7x"
+path="res://.godot/imported/rug_1.png-73bb18740fb0416ff279c3e2e040e1e3.ctex"
 metadata={
 "vram_texture": false
 }
 
 [deps]
 
-source_file="res://player/player.webp"
-dest_files=["res://.godot/imported/player.webp-f8efd9c2246a95708b9c4853ed21513e.ctex"]
+source_file="res://decorations/rug_1.png"
+dest_files=["res://.godot/imported/rug_1.png-73bb18740fb0416ff279c3e2e040e1e3.ctex"]
 
 [params]
 

binární
2d/isometric/decorations/shadow_gradient.png


+ 34 - 0
2d/isometric/decorations/shadow_gradient.png.import

@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cmxo4k7h2nl7h"
+path="res://.godot/imported/shadow_gradient.png-ada77e271da2569a07ee8c308bf8f891.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://decorations/shadow_gradient.png"
+dest_files=["res://.godot/imported/shadow_gradient.png-ada77e271da2569a07ee8c308bf8f891.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1

binární
2d/isometric/decorations/sparkle.png


+ 34 - 0
2d/isometric/decorations/sparkle.png.import

@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bs6uc40vmpmhd"
+path="res://.godot/imported/sparkle.png-19a635cf744f1090fe6b7df22aa07aa4.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://decorations/sparkle.png"
+dest_files=["res://.godot/imported/sparkle.png-19a635cf744f1090fe6b7df22aa07aa4.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1

binární
2d/isometric/decorations/vase_1.png


+ 4 - 4
2d/platformer/level/cloud_3.webp.import → 2d/isometric/decorations/vase_1.png.import

@@ -2,16 +2,16 @@
 
 importer="texture"
 type="CompressedTexture2D"
-uid="uid://5tho6j8r4eam"
-path="res://.godot/imported/cloud_3.webp-a303ee6af47d3df137be263a98a9fa7d.ctex"
+uid="uid://qqvwu82wedp2"
+path="res://.godot/imported/vase_1.png-926d438e092a6711354055578c6046bd.ctex"
 metadata={
 "vram_texture": false
 }
 
 [deps]
 
-source_file="res://level/cloud_3.webp"
-dest_files=["res://.godot/imported/cloud_3.webp-a303ee6af47d3df137be263a98a9fa7d.ctex"]
+source_file="res://decorations/vase_1.png"
+dest_files=["res://.godot/imported/vase_1.png-926d438e092a6711354055578c6046bd.ctex"]
 
 [params]
 

+ 20 - 0
2d/isometric/decorations/vase_1.tscn

@@ -0,0 +1,20 @@
+[gd_scene load_steps=3 format=3 uid="uid://dxxtyefaa4rtn"]
+
+[ext_resource type="Texture2D" uid="uid://qqvwu82wedp2" path="res://decorations/vase_1.png" id="1"]
+
+[sub_resource type="CapsuleShape2D" id="1"]
+radius = 9.0
+
+[node name="Vase1" type="Node2D"]
+y_sort_enabled = true
+
+[node name="StaticBody2D" type="StaticBody2D" parent="."]
+
+[node name="Sprite2D" type="Sprite2D" parent="StaticBody2D"]
+position = Vector2(0, -29)
+texture = ExtResource("1")
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="StaticBody2D"]
+position = Vector2(0, -9)
+rotation = 1.5708
+shape = SubResource("1")

binární
2d/isometric/decorations/vase_2.png


+ 34 - 0
2d/isometric/decorations/vase_2.png.import

@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cfl2km5k5pbgd"
+path="res://.godot/imported/vase_2.png-d6cca4a3647dd9b8a230cb201e6f4d32.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://decorations/vase_2.png"
+dest_files=["res://.godot/imported/vase_2.png-d6cca4a3647dd9b8a230cb201e6f4d32.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1

+ 21 - 0
2d/isometric/decorations/vase_2.tscn

@@ -0,0 +1,21 @@
+[gd_scene load_steps=3 format=3 uid="uid://ccxtgas16pmio"]
+
+[ext_resource type="Texture2D" uid="uid://cfl2km5k5pbgd" path="res://decorations/vase_2.png" id="1"]
+
+[sub_resource type="CapsuleShape2D" id="1"]
+radius = 9.0
+height = 18.0
+
+[node name="vase2" type="Node2D"]
+y_sort_enabled = true
+
+[node name="Area2D" type="StaticBody2D" parent="."]
+
+[node name="Sprite2D" type="Sprite2D" parent="Area2D"]
+position = Vector2(0, -20)
+texture = ExtResource("1")
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"]
+position = Vector2(0, -8)
+rotation = 1.5708
+shape = SubResource("1")

binární
2d/isometric/decorations/wall_skull.png


+ 34 - 0
2d/isometric/decorations/wall_skull.png.import

@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cy8biel27i5i7"
+path="res://.godot/imported/wall_skull.png-b65fc438ee51c09cef1ea57aa5c7d6b2.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://decorations/wall_skull.png"
+dest_files=["res://.godot/imported/wall_skull.png-b65fc438ee51c09cef1ea57aa5c7d6b2.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 427 - 3
2d/isometric/dungeon.tscn


binární
2d/isometric/icon.webp


+ 1 - 1
2d/isometric/icon.webp.import

@@ -2,7 +2,7 @@
 
 importer="texture"
 type="CompressedTexture2D"
-uid="uid://brwp8bimc75uu"
+uid="uid://dwrfxefhjkitp"
 path="res://.godot/imported/icon.webp-e94f9a68b0f625a567a797079e4d325f.ctex"
 metadata={
 "vram_texture": false

binární
2d/isometric/isotiles.png


binární
2d/isometric/merged_tiles.png


+ 56 - 0
2d/isometric/player/goblin.gd

@@ -0,0 +1,56 @@
+extends CharacterBody2D
+
+const MOTION_SPEED = 160 # Pixels/second.
+
+var last_direction = Vector2(1, 0)
+
+var anim_directions = {
+	"idle": [ # list of [animation name, horizontal flip]
+		["side_right_idle", false],
+		["45front_right_idle", false],
+		["front_idle", false],
+		["45front_left_idle", false],
+		["side_left_idle", false],
+		["45back_left_idle", false],
+		["back_idle", false],
+		["45back_right_idle", false],
+	],
+
+	"walk": [
+		["side_right_walk", false],
+		["45front_right_walk", false],
+		["front_walk", false],
+		["45front_left_walk", false],
+		["side_left_walk", false],
+		["45back_left_walk", false],
+		["back_walk", false],
+		["45back_right_walk", false],
+	],
+}
+
+
+func _physics_process(_delta):
+	var motion = Vector2()
+	motion.x = Input.get_action_strength("move_right") - Input.get_action_strength("move_left")
+	motion.y = Input.get_action_strength("move_down") - Input.get_action_strength("move_up")
+	motion.y /= 2
+	motion = motion.normalized() * MOTION_SPEED
+	#warning-ignore:return_value_discarded
+	set_velocity(motion)
+	move_and_slide()
+	var dir = velocity
+
+	if dir.length() > 0:
+		last_direction = dir
+		update_animation("walk")
+	else:
+		update_animation("idle")
+
+
+func update_animation(anim_set):
+
+	var angle = rad_to_deg(last_direction.angle()) + 22.5
+	var slice_dir = floor(angle / 45)
+
+	$Sprite2D.play(anim_directions[anim_set][slice_dir][0])
+	$Sprite2D.flip_h = anim_directions[anim_set][slice_dir][1]

binární
2d/isometric/player/goblin.png


+ 34 - 0
2d/isometric/player/goblin.png.import

@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dpwpop61vufvt"
+path="res://.godot/imported/goblin.png-32452b37152c86975cc3bde34afb02b5.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://player/goblin.png"
+dest_files=["res://.godot/imported/goblin.png-32452b37152c86975cc3bde34afb02b5.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=1.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1

+ 1925 - 0
2d/isometric/player/goblin.tscn

@@ -0,0 +1,1925 @@
+[gd_scene load_steps=264 format=3 uid="uid://bqpkxht3mx8l8"]
+
+[ext_resource type="Texture2D" uid="uid://dpwpop61vufvt" path="res://player/goblin.png" id="1"]
+[ext_resource type="Script" path="res://player/goblin.gd" id="2"]
+
+[sub_resource type="Gradient" id="662"]
+offsets = PackedFloat32Array(0.00558659, 0.441341, 0.659218)
+colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0)
+
+[sub_resource type="GradientTexture2D" id="663"]
+gradient = SubResource("662")
+fill = 1
+fill_from = Vector2(0.5, 0.5)
+
+[sub_resource type="AtlasTexture" id="261"]
+atlas = ExtResource("1")
+region = Rect2(0, 768, 128, 128)
+
+[sub_resource type="AtlasTexture" id="262"]
+atlas = ExtResource("1")
+region = Rect2(128, 768, 128, 128)
+
+[sub_resource type="AtlasTexture" id="263"]
+atlas = ExtResource("1")
+region = Rect2(256, 768, 128, 128)
+
+[sub_resource type="AtlasTexture" id="264"]
+atlas = ExtResource("1")
+region = Rect2(384, 768, 128, 128)
+
+[sub_resource type="AtlasTexture" id="265"]
+atlas = ExtResource("1")
+region = Rect2(512, 768, 128, 128)
+
+[sub_resource type="AtlasTexture" id="266"]
+atlas = ExtResource("1")
+region = Rect2(640, 768, 128, 128)
+
+[sub_resource type="AtlasTexture" id="267"]
+atlas = ExtResource("1")
+region = Rect2(768, 768, 128, 128)
+
+[sub_resource type="AtlasTexture" id="268"]
+atlas = ExtResource("1")
+region = Rect2(896, 768, 128, 128)
+
+[sub_resource type="AtlasTexture" id="269"]
+atlas = ExtResource("1")
+region = Rect2(1024, 768, 128, 128)
+
+[sub_resource type="AtlasTexture" id="270"]
+atlas = ExtResource("1")
+region = Rect2(1152, 768, 128, 128)
+
+[sub_resource type="AtlasTexture" id="271"]
+atlas = ExtResource("1")
+region = Rect2(1280, 768, 128, 128)
+
+[sub_resource type="AtlasTexture" id="272"]
+atlas = ExtResource("1")
+region = Rect2(1408, 768, 128, 128)
+
+[sub_resource type="AtlasTexture" id="273"]
+atlas = ExtResource("1")
+region = Rect2(1536, 768, 128, 128)
+
+[sub_resource type="AtlasTexture" id="274"]
+atlas = ExtResource("1")
+region = Rect2(1664, 768, 128, 128)
+
+[sub_resource type="AtlasTexture" id="275"]
+atlas = ExtResource("1")
+region = Rect2(1792, 768, 128, 128)
+
+[sub_resource type="AtlasTexture" id="276"]
+atlas = ExtResource("1")
+region = Rect2(1920, 768, 128, 128)
+
+[sub_resource type="AtlasTexture" id="277"]
+atlas = ExtResource("1")
+region = Rect2(0, 896, 128, 128)
+
+[sub_resource type="AtlasTexture" id="278"]
+atlas = ExtResource("1")
+region = Rect2(128, 896, 128, 128)
+
+[sub_resource type="AtlasTexture" id="279"]
+atlas = ExtResource("1")
+region = Rect2(256, 896, 128, 128)
+
+[sub_resource type="AtlasTexture" id="280"]
+atlas = ExtResource("1")
+region = Rect2(384, 896, 128, 128)
+
+[sub_resource type="AtlasTexture" id="281"]
+atlas = ExtResource("1")
+region = Rect2(512, 896, 128, 128)
+
+[sub_resource type="AtlasTexture" id="282"]
+atlas = ExtResource("1")
+region = Rect2(640, 896, 128, 128)
+
+[sub_resource type="AtlasTexture" id="283"]
+atlas = ExtResource("1")
+region = Rect2(768, 896, 128, 128)
+
+[sub_resource type="AtlasTexture" id="284"]
+atlas = ExtResource("1")
+region = Rect2(896, 896, 128, 128)
+
+[sub_resource type="AtlasTexture" id="285"]
+atlas = ExtResource("1")
+region = Rect2(1024, 896, 128, 128)
+
+[sub_resource type="AtlasTexture" id="286"]
+atlas = ExtResource("1")
+region = Rect2(1152, 896, 128, 128)
+
+[sub_resource type="AtlasTexture" id="287"]
+atlas = ExtResource("1")
+region = Rect2(1280, 896, 128, 128)
+
+[sub_resource type="AtlasTexture" id="288"]
+atlas = ExtResource("1")
+region = Rect2(1408, 896, 128, 128)
+
+[sub_resource type="AtlasTexture" id="289"]
+atlas = ExtResource("1")
+region = Rect2(1536, 896, 128, 128)
+
+[sub_resource type="AtlasTexture" id="290"]
+atlas = ExtResource("1")
+region = Rect2(1664, 896, 128, 128)
+
+[sub_resource type="AtlasTexture" id="291"]
+atlas = ExtResource("1")
+region = Rect2(1792, 896, 128, 128)
+
+[sub_resource type="AtlasTexture" id="292"]
+atlas = ExtResource("1")
+region = Rect2(1920, 896, 128, 128)
+
+[sub_resource type="AtlasTexture" id="293"]
+atlas = ExtResource("1")
+region = Rect2(0, 1280, 128, 128)
+
+[sub_resource type="AtlasTexture" id="294"]
+atlas = ExtResource("1")
+region = Rect2(128, 1280, 128, 128)
+
+[sub_resource type="AtlasTexture" id="295"]
+atlas = ExtResource("1")
+region = Rect2(256, 1280, 128, 128)
+
+[sub_resource type="AtlasTexture" id="296"]
+atlas = ExtResource("1")
+region = Rect2(384, 1280, 128, 128)
+
+[sub_resource type="AtlasTexture" id="297"]
+atlas = ExtResource("1")
+region = Rect2(512, 1280, 128, 128)
+
+[sub_resource type="AtlasTexture" id="298"]
+atlas = ExtResource("1")
+region = Rect2(640, 1280, 128, 128)
+
+[sub_resource type="AtlasTexture" id="299"]
+atlas = ExtResource("1")
+region = Rect2(768, 1280, 128, 128)
+
+[sub_resource type="AtlasTexture" id="300"]
+atlas = ExtResource("1")
+region = Rect2(896, 1280, 128, 128)
+
+[sub_resource type="AtlasTexture" id="301"]
+atlas = ExtResource("1")
+region = Rect2(1024, 1280, 128, 128)
+
+[sub_resource type="AtlasTexture" id="302"]
+atlas = ExtResource("1")
+region = Rect2(1152, 1280, 128, 128)
+
+[sub_resource type="AtlasTexture" id="303"]
+atlas = ExtResource("1")
+region = Rect2(1280, 1280, 128, 128)
+
+[sub_resource type="AtlasTexture" id="304"]
+atlas = ExtResource("1")
+region = Rect2(1408, 1280, 128, 128)
+
+[sub_resource type="AtlasTexture" id="305"]
+atlas = ExtResource("1")
+region = Rect2(1536, 1280, 128, 128)
+
+[sub_resource type="AtlasTexture" id="306"]
+atlas = ExtResource("1")
+region = Rect2(1664, 1280, 128, 128)
+
+[sub_resource type="AtlasTexture" id="307"]
+atlas = ExtResource("1")
+region = Rect2(1792, 1280, 128, 128)
+
+[sub_resource type="AtlasTexture" id="308"]
+atlas = ExtResource("1")
+region = Rect2(1920, 1280, 128, 128)
+
+[sub_resource type="AtlasTexture" id="309"]
+atlas = ExtResource("1")
+region = Rect2(0, 1408, 128, 128)
+
+[sub_resource type="AtlasTexture" id="310"]
+atlas = ExtResource("1")
+region = Rect2(128, 1408, 128, 128)
+
+[sub_resource type="AtlasTexture" id="311"]
+atlas = ExtResource("1")
+region = Rect2(256, 1408, 128, 128)
+
+[sub_resource type="AtlasTexture" id="312"]
+atlas = ExtResource("1")
+region = Rect2(384, 1408, 128, 128)
+
+[sub_resource type="AtlasTexture" id="313"]
+atlas = ExtResource("1")
+region = Rect2(512, 1408, 128, 128)
+
+[sub_resource type="AtlasTexture" id="314"]
+atlas = ExtResource("1")
+region = Rect2(640, 1408, 128, 128)
+
+[sub_resource type="AtlasTexture" id="315"]
+atlas = ExtResource("1")
+region = Rect2(768, 1408, 128, 128)
+
+[sub_resource type="AtlasTexture" id="316"]
+atlas = ExtResource("1")
+region = Rect2(896, 1408, 128, 128)
+
+[sub_resource type="AtlasTexture" id="317"]
+atlas = ExtResource("1")
+region = Rect2(1024, 1408, 128, 128)
+
+[sub_resource type="AtlasTexture" id="318"]
+atlas = ExtResource("1")
+region = Rect2(1152, 1408, 128, 128)
+
+[sub_resource type="AtlasTexture" id="319"]
+atlas = ExtResource("1")
+region = Rect2(1280, 1408, 128, 128)
+
+[sub_resource type="AtlasTexture" id="320"]
+atlas = ExtResource("1")
+region = Rect2(1408, 1408, 128, 128)
+
+[sub_resource type="AtlasTexture" id="321"]
+atlas = ExtResource("1")
+region = Rect2(1536, 1408, 128, 128)
+
+[sub_resource type="AtlasTexture" id="322"]
+atlas = ExtResource("1")
+region = Rect2(1664, 1408, 128, 128)
+
+[sub_resource type="AtlasTexture" id="323"]
+atlas = ExtResource("1")
+region = Rect2(1792, 1408, 128, 128)
+
+[sub_resource type="AtlasTexture" id="324"]
+atlas = ExtResource("1")
+region = Rect2(1920, 1408, 128, 128)
+
+[sub_resource type="AtlasTexture" id="325"]
+atlas = ExtResource("1")
+region = Rect2(0, 256, 128, 128)
+
+[sub_resource type="AtlasTexture" id="326"]
+atlas = ExtResource("1")
+region = Rect2(128, 256, 128, 128)
+
+[sub_resource type="AtlasTexture" id="327"]
+atlas = ExtResource("1")
+region = Rect2(256, 256, 128, 128)
+
+[sub_resource type="AtlasTexture" id="328"]
+atlas = ExtResource("1")
+region = Rect2(384, 256, 128, 128)
+
+[sub_resource type="AtlasTexture" id="329"]
+atlas = ExtResource("1")
+region = Rect2(512, 256, 128, 128)
+
+[sub_resource type="AtlasTexture" id="330"]
+atlas = ExtResource("1")
+region = Rect2(640, 256, 128, 128)
+
+[sub_resource type="AtlasTexture" id="331"]
+atlas = ExtResource("1")
+region = Rect2(768, 256, 128, 128)
+
+[sub_resource type="AtlasTexture" id="332"]
+atlas = ExtResource("1")
+region = Rect2(896, 256, 128, 128)
+
+[sub_resource type="AtlasTexture" id="333"]
+atlas = ExtResource("1")
+region = Rect2(1024, 256, 128, 128)
+
+[sub_resource type="AtlasTexture" id="334"]
+atlas = ExtResource("1")
+region = Rect2(1152, 256, 128, 128)
+
+[sub_resource type="AtlasTexture" id="335"]
+atlas = ExtResource("1")
+region = Rect2(1280, 256, 128, 128)
+
+[sub_resource type="AtlasTexture" id="336"]
+atlas = ExtResource("1")
+region = Rect2(1408, 256, 128, 128)
+
+[sub_resource type="AtlasTexture" id="337"]
+atlas = ExtResource("1")
+region = Rect2(1536, 256, 128, 128)
+
+[sub_resource type="AtlasTexture" id="338"]
+atlas = ExtResource("1")
+region = Rect2(1664, 256, 128, 128)
+
+[sub_resource type="AtlasTexture" id="339"]
+atlas = ExtResource("1")
+region = Rect2(1792, 256, 128, 128)
+
+[sub_resource type="AtlasTexture" id="340"]
+atlas = ExtResource("1")
+region = Rect2(1920, 256, 128, 128)
+
+[sub_resource type="AtlasTexture" id="341"]
+atlas = ExtResource("1")
+region = Rect2(0, 384, 128, 128)
+
+[sub_resource type="AtlasTexture" id="342"]
+atlas = ExtResource("1")
+region = Rect2(128, 384, 128, 128)
+
+[sub_resource type="AtlasTexture" id="343"]
+atlas = ExtResource("1")
+region = Rect2(256, 384, 128, 128)
+
+[sub_resource type="AtlasTexture" id="344"]
+atlas = ExtResource("1")
+region = Rect2(384, 384, 128, 128)
+
+[sub_resource type="AtlasTexture" id="345"]
+atlas = ExtResource("1")
+region = Rect2(512, 384, 128, 128)
+
+[sub_resource type="AtlasTexture" id="346"]
+atlas = ExtResource("1")
+region = Rect2(640, 384, 128, 128)
+
+[sub_resource type="AtlasTexture" id="347"]
+atlas = ExtResource("1")
+region = Rect2(768, 384, 128, 128)
+
+[sub_resource type="AtlasTexture" id="348"]
+atlas = ExtResource("1")
+region = Rect2(896, 384, 128, 128)
+
+[sub_resource type="AtlasTexture" id="349"]
+atlas = ExtResource("1")
+region = Rect2(1024, 384, 128, 128)
+
+[sub_resource type="AtlasTexture" id="350"]
+atlas = ExtResource("1")
+region = Rect2(1152, 384, 128, 128)
+
+[sub_resource type="AtlasTexture" id="351"]
+atlas = ExtResource("1")
+region = Rect2(1280, 384, 128, 128)
+
+[sub_resource type="AtlasTexture" id="352"]
+atlas = ExtResource("1")
+region = Rect2(1408, 384, 128, 128)
+
+[sub_resource type="AtlasTexture" id="353"]
+atlas = ExtResource("1")
+region = Rect2(1536, 384, 128, 128)
+
+[sub_resource type="AtlasTexture" id="354"]
+atlas = ExtResource("1")
+region = Rect2(1664, 384, 128, 128)
+
+[sub_resource type="AtlasTexture" id="355"]
+atlas = ExtResource("1")
+region = Rect2(1792, 384, 128, 128)
+
+[sub_resource type="AtlasTexture" id="356"]
+atlas = ExtResource("1")
+region = Rect2(1920, 384, 128, 128)
+
+[sub_resource type="AtlasTexture" id="357"]
+atlas = ExtResource("1")
+region = Rect2(0, 1792, 128, 128)
+
+[sub_resource type="AtlasTexture" id="358"]
+atlas = ExtResource("1")
+region = Rect2(128, 1792, 128, 128)
+
+[sub_resource type="AtlasTexture" id="359"]
+atlas = ExtResource("1")
+region = Rect2(256, 1792, 128, 128)
+
+[sub_resource type="AtlasTexture" id="360"]
+atlas = ExtResource("1")
+region = Rect2(384, 1792, 128, 128)
+
+[sub_resource type="AtlasTexture" id="361"]
+atlas = ExtResource("1")
+region = Rect2(512, 1792, 128, 128)
+
+[sub_resource type="AtlasTexture" id="362"]
+atlas = ExtResource("1")
+region = Rect2(640, 1792, 128, 128)
+
+[sub_resource type="AtlasTexture" id="363"]
+atlas = ExtResource("1")
+region = Rect2(768, 1792, 128, 128)
+
+[sub_resource type="AtlasTexture" id="364"]
+atlas = ExtResource("1")
+region = Rect2(896, 1792, 128, 128)
+
+[sub_resource type="AtlasTexture" id="365"]
+atlas = ExtResource("1")
+region = Rect2(1024, 1792, 128, 128)
+
+[sub_resource type="AtlasTexture" id="366"]
+atlas = ExtResource("1")
+region = Rect2(1152, 1792, 128, 128)
+
+[sub_resource type="AtlasTexture" id="367"]
+atlas = ExtResource("1")
+region = Rect2(1280, 1792, 128, 128)
+
+[sub_resource type="AtlasTexture" id="368"]
+atlas = ExtResource("1")
+region = Rect2(1408, 1792, 128, 128)
+
+[sub_resource type="AtlasTexture" id="369"]
+atlas = ExtResource("1")
+region = Rect2(1536, 1792, 128, 128)
+
+[sub_resource type="AtlasTexture" id="370"]
+atlas = ExtResource("1")
+region = Rect2(1664, 1792, 128, 128)
+
+[sub_resource type="AtlasTexture" id="371"]
+atlas = ExtResource("1")
+region = Rect2(1792, 1792, 128, 128)
+
+[sub_resource type="AtlasTexture" id="372"]
+atlas = ExtResource("1")
+region = Rect2(1920, 1792, 128, 128)
+
+[sub_resource type="AtlasTexture" id="373"]
+atlas = ExtResource("1")
+region = Rect2(0, 1920, 128, 128)
+
+[sub_resource type="AtlasTexture" id="374"]
+atlas = ExtResource("1")
+region = Rect2(128, 1920, 128, 128)
+
+[sub_resource type="AtlasTexture" id="375"]
+atlas = ExtResource("1")
+region = Rect2(256, 1920, 128, 128)
+
+[sub_resource type="AtlasTexture" id="376"]
+atlas = ExtResource("1")
+region = Rect2(384, 1920, 128, 128)
+
+[sub_resource type="AtlasTexture" id="377"]
+atlas = ExtResource("1")
+region = Rect2(512, 1920, 128, 128)
+
+[sub_resource type="AtlasTexture" id="378"]
+atlas = ExtResource("1")
+region = Rect2(640, 1920, 128, 128)
+
+[sub_resource type="AtlasTexture" id="379"]
+atlas = ExtResource("1")
+region = Rect2(768, 1920, 128, 128)
+
+[sub_resource type="AtlasTexture" id="380"]
+atlas = ExtResource("1")
+region = Rect2(896, 1920, 128, 128)
+
+[sub_resource type="AtlasTexture" id="381"]
+atlas = ExtResource("1")
+region = Rect2(1024, 1920, 128, 128)
+
+[sub_resource type="AtlasTexture" id="382"]
+atlas = ExtResource("1")
+region = Rect2(1152, 1920, 128, 128)
+
+[sub_resource type="AtlasTexture" id="383"]
+atlas = ExtResource("1")
+region = Rect2(1280, 1920, 128, 128)
+
+[sub_resource type="AtlasTexture" id="384"]
+atlas = ExtResource("1")
+region = Rect2(1408, 1920, 128, 128)
+
+[sub_resource type="AtlasTexture" id="385"]
+atlas = ExtResource("1")
+region = Rect2(1536, 1920, 128, 128)
+
+[sub_resource type="AtlasTexture" id="386"]
+atlas = ExtResource("1")
+region = Rect2(1664, 1920, 128, 128)
+
+[sub_resource type="AtlasTexture" id="387"]
+atlas = ExtResource("1")
+region = Rect2(1792, 1920, 128, 128)
+
+[sub_resource type="AtlasTexture" id="388"]
+atlas = ExtResource("1")
+region = Rect2(1920, 1920, 128, 128)
+
+[sub_resource type="AtlasTexture" id="597"]
+atlas = ExtResource("1")
+region = Rect2(0, 1024, 128, 128)
+
+[sub_resource type="AtlasTexture" id="598"]
+atlas = ExtResource("1")
+region = Rect2(128, 1024, 128, 128)
+
+[sub_resource type="AtlasTexture" id="599"]
+atlas = ExtResource("1")
+region = Rect2(256, 1024, 128, 128)
+
+[sub_resource type="AtlasTexture" id="600"]
+atlas = ExtResource("1")
+region = Rect2(384, 1024, 128, 128)
+
+[sub_resource type="AtlasTexture" id="601"]
+atlas = ExtResource("1")
+region = Rect2(512, 1024, 128, 128)
+
+[sub_resource type="AtlasTexture" id="602"]
+atlas = ExtResource("1")
+region = Rect2(640, 1024, 128, 128)
+
+[sub_resource type="AtlasTexture" id="603"]
+atlas = ExtResource("1")
+region = Rect2(768, 1024, 128, 128)
+
+[sub_resource type="AtlasTexture" id="604"]
+atlas = ExtResource("1")
+region = Rect2(896, 1024, 128, 128)
+
+[sub_resource type="AtlasTexture" id="605"]
+atlas = ExtResource("1")
+region = Rect2(1024, 1024, 128, 128)
+
+[sub_resource type="AtlasTexture" id="606"]
+atlas = ExtResource("1")
+region = Rect2(1152, 1024, 128, 128)
+
+[sub_resource type="AtlasTexture" id="607"]
+atlas = ExtResource("1")
+region = Rect2(1280, 1024, 128, 128)
+
+[sub_resource type="AtlasTexture" id="608"]
+atlas = ExtResource("1")
+region = Rect2(1408, 1024, 128, 128)
+
+[sub_resource type="AtlasTexture" id="609"]
+atlas = ExtResource("1")
+region = Rect2(1536, 1024, 128, 128)
+
+[sub_resource type="AtlasTexture" id="610"]
+atlas = ExtResource("1")
+region = Rect2(1664, 1024, 128, 128)
+
+[sub_resource type="AtlasTexture" id="611"]
+atlas = ExtResource("1")
+region = Rect2(1792, 1024, 128, 128)
+
+[sub_resource type="AtlasTexture" id="612"]
+atlas = ExtResource("1")
+region = Rect2(1920, 1024, 128, 128)
+
+[sub_resource type="AtlasTexture" id="613"]
+atlas = ExtResource("1")
+region = Rect2(0, 1152, 128, 128)
+
+[sub_resource type="AtlasTexture" id="614"]
+atlas = ExtResource("1")
+region = Rect2(128, 1152, 128, 128)
+
+[sub_resource type="AtlasTexture" id="615"]
+atlas = ExtResource("1")
+region = Rect2(256, 1152, 128, 128)
+
+[sub_resource type="AtlasTexture" id="616"]
+atlas = ExtResource("1")
+region = Rect2(384, 1152, 128, 128)
+
+[sub_resource type="AtlasTexture" id="617"]
+atlas = ExtResource("1")
+region = Rect2(512, 1152, 128, 128)
+
+[sub_resource type="AtlasTexture" id="618"]
+atlas = ExtResource("1")
+region = Rect2(640, 1152, 128, 128)
+
+[sub_resource type="AtlasTexture" id="619"]
+atlas = ExtResource("1")
+region = Rect2(768, 1152, 128, 128)
+
+[sub_resource type="AtlasTexture" id="620"]
+atlas = ExtResource("1")
+region = Rect2(896, 1152, 128, 128)
+
+[sub_resource type="AtlasTexture" id="621"]
+atlas = ExtResource("1")
+region = Rect2(1024, 1152, 128, 128)
+
+[sub_resource type="AtlasTexture" id="622"]
+atlas = ExtResource("1")
+region = Rect2(1152, 1152, 128, 128)
+
+[sub_resource type="AtlasTexture" id="623"]
+atlas = ExtResource("1")
+region = Rect2(1280, 1152, 128, 128)
+
+[sub_resource type="AtlasTexture" id="624"]
+atlas = ExtResource("1")
+region = Rect2(1408, 1152, 128, 128)
+
+[sub_resource type="AtlasTexture" id="625"]
+atlas = ExtResource("1")
+region = Rect2(1536, 1152, 128, 128)
+
+[sub_resource type="AtlasTexture" id="626"]
+atlas = ExtResource("1")
+region = Rect2(1664, 1152, 128, 128)
+
+[sub_resource type="AtlasTexture" id="627"]
+atlas = ExtResource("1")
+region = Rect2(1792, 1152, 128, 128)
+
+[sub_resource type="AtlasTexture" id="628"]
+atlas = ExtResource("1")
+region = Rect2(1920, 1152, 128, 128)
+
+[sub_resource type="AtlasTexture" id="629"]
+atlas = ExtResource("1")
+region = Rect2(0, 0, 128, 128)
+
+[sub_resource type="AtlasTexture" id="630"]
+atlas = ExtResource("1")
+region = Rect2(128, 0, 128, 128)
+
+[sub_resource type="AtlasTexture" id="631"]
+atlas = ExtResource("1")
+region = Rect2(256, 0, 128, 128)
+
+[sub_resource type="AtlasTexture" id="632"]
+atlas = ExtResource("1")
+region = Rect2(384, 0, 128, 128)
+
+[sub_resource type="AtlasTexture" id="633"]
+atlas = ExtResource("1")
+region = Rect2(512, 0, 128, 128)
+
+[sub_resource type="AtlasTexture" id="634"]
+atlas = ExtResource("1")
+region = Rect2(640, 0, 128, 128)
+
+[sub_resource type="AtlasTexture" id="635"]
+atlas = ExtResource("1")
+region = Rect2(768, 0, 128, 128)
+
+[sub_resource type="AtlasTexture" id="636"]
+atlas = ExtResource("1")
+region = Rect2(896, 0, 128, 128)
+
+[sub_resource type="AtlasTexture" id="637"]
+atlas = ExtResource("1")
+region = Rect2(1024, 0, 128, 128)
+
+[sub_resource type="AtlasTexture" id="638"]
+atlas = ExtResource("1")
+region = Rect2(1152, 0, 128, 128)
+
+[sub_resource type="AtlasTexture" id="639"]
+atlas = ExtResource("1")
+region = Rect2(1280, 0, 128, 128)
+
+[sub_resource type="AtlasTexture" id="640"]
+atlas = ExtResource("1")
+region = Rect2(1408, 0, 128, 128)
+
+[sub_resource type="AtlasTexture" id="641"]
+atlas = ExtResource("1")
+region = Rect2(1536, 0, 128, 128)
+
+[sub_resource type="AtlasTexture" id="642"]
+atlas = ExtResource("1")
+region = Rect2(1664, 0, 128, 128)
+
+[sub_resource type="AtlasTexture" id="643"]
+atlas = ExtResource("1")
+region = Rect2(1792, 0, 128, 128)
+
+[sub_resource type="AtlasTexture" id="644"]
+atlas = ExtResource("1")
+region = Rect2(1920, 0, 128, 128)
+
+[sub_resource type="AtlasTexture" id="645"]
+atlas = ExtResource("1")
+region = Rect2(0, 128, 128, 128)
+
+[sub_resource type="AtlasTexture" id="646"]
+atlas = ExtResource("1")
+region = Rect2(128, 128, 128, 128)
+
+[sub_resource type="AtlasTexture" id="647"]
+atlas = ExtResource("1")
+region = Rect2(256, 128, 128, 128)
+
+[sub_resource type="AtlasTexture" id="648"]
+atlas = ExtResource("1")
+region = Rect2(384, 128, 128, 128)
+
+[sub_resource type="AtlasTexture" id="649"]
+atlas = ExtResource("1")
+region = Rect2(512, 128, 128, 128)
+
+[sub_resource type="AtlasTexture" id="650"]
+atlas = ExtResource("1")
+region = Rect2(640, 128, 128, 128)
+
+[sub_resource type="AtlasTexture" id="651"]
+atlas = ExtResource("1")
+region = Rect2(768, 128, 128, 128)
+
+[sub_resource type="AtlasTexture" id="652"]
+atlas = ExtResource("1")
+region = Rect2(896, 128, 128, 128)
+
+[sub_resource type="AtlasTexture" id="653"]
+atlas = ExtResource("1")
+region = Rect2(1024, 128, 128, 128)
+
+[sub_resource type="AtlasTexture" id="654"]
+atlas = ExtResource("1")
+region = Rect2(1152, 128, 128, 128)
+
+[sub_resource type="AtlasTexture" id="655"]
+atlas = ExtResource("1")
+region = Rect2(1280, 128, 128, 128)
+
+[sub_resource type="AtlasTexture" id="656"]
+atlas = ExtResource("1")
+region = Rect2(1408, 128, 128, 128)
+
+[sub_resource type="AtlasTexture" id="657"]
+atlas = ExtResource("1")
+region = Rect2(1536, 128, 128, 128)
+
+[sub_resource type="AtlasTexture" id="658"]
+atlas = ExtResource("1")
+region = Rect2(1664, 128, 128, 128)
+
+[sub_resource type="AtlasTexture" id="659"]
+atlas = ExtResource("1")
+region = Rect2(1792, 128, 128, 128)
+
+[sub_resource type="AtlasTexture" id="660"]
+atlas = ExtResource("1")
+region = Rect2(1920, 128, 128, 128)
+
+[sub_resource type="AtlasTexture" id="453"]
+atlas = ExtResource("1")
+region = Rect2(0, 512, 128, 128)
+
+[sub_resource type="AtlasTexture" id="454"]
+atlas = ExtResource("1")
+region = Rect2(128, 512, 128, 128)
+
+[sub_resource type="AtlasTexture" id="455"]
+atlas = ExtResource("1")
+region = Rect2(256, 512, 128, 128)
+
+[sub_resource type="AtlasTexture" id="456"]
+atlas = ExtResource("1")
+region = Rect2(384, 512, 128, 128)
+
+[sub_resource type="AtlasTexture" id="457"]
+atlas = ExtResource("1")
+region = Rect2(512, 512, 128, 128)
+
+[sub_resource type="AtlasTexture" id="458"]
+atlas = ExtResource("1")
+region = Rect2(640, 512, 128, 128)
+
+[sub_resource type="AtlasTexture" id="459"]
+atlas = ExtResource("1")
+region = Rect2(768, 512, 128, 128)
+
+[sub_resource type="AtlasTexture" id="460"]
+atlas = ExtResource("1")
+region = Rect2(896, 512, 128, 128)
+
+[sub_resource type="AtlasTexture" id="461"]
+atlas = ExtResource("1")
+region = Rect2(1024, 512, 128, 128)
+
+[sub_resource type="AtlasTexture" id="462"]
+atlas = ExtResource("1")
+region = Rect2(1152, 512, 128, 128)
+
+[sub_resource type="AtlasTexture" id="463"]
+atlas = ExtResource("1")
+region = Rect2(1280, 512, 128, 128)
+
+[sub_resource type="AtlasTexture" id="464"]
+atlas = ExtResource("1")
+region = Rect2(1408, 512, 128, 128)
+
+[sub_resource type="AtlasTexture" id="465"]
+atlas = ExtResource("1")
+region = Rect2(1536, 512, 128, 128)
+
+[sub_resource type="AtlasTexture" id="466"]
+atlas = ExtResource("1")
+region = Rect2(1664, 512, 128, 128)
+
+[sub_resource type="AtlasTexture" id="467"]
+atlas = ExtResource("1")
+region = Rect2(1792, 512, 128, 128)
+
+[sub_resource type="AtlasTexture" id="468"]
+atlas = ExtResource("1")
+region = Rect2(1920, 512, 128, 128)
+
+[sub_resource type="AtlasTexture" id="517"]
+atlas = ExtResource("1")
+region = Rect2(0, 640, 128, 128)
+
+[sub_resource type="AtlasTexture" id="518"]
+atlas = ExtResource("1")
+region = Rect2(128, 640, 128, 128)
+
+[sub_resource type="AtlasTexture" id="519"]
+atlas = ExtResource("1")
+region = Rect2(256, 640, 128, 128)
+
+[sub_resource type="AtlasTexture" id="520"]
+atlas = ExtResource("1")
+region = Rect2(384, 640, 128, 128)
+
+[sub_resource type="AtlasTexture" id="521"]
+atlas = ExtResource("1")
+region = Rect2(512, 640, 128, 128)
+
+[sub_resource type="AtlasTexture" id="522"]
+atlas = ExtResource("1")
+region = Rect2(640, 640, 128, 128)
+
+[sub_resource type="AtlasTexture" id="523"]
+atlas = ExtResource("1")
+region = Rect2(768, 640, 128, 128)
+
+[sub_resource type="AtlasTexture" id="524"]
+atlas = ExtResource("1")
+region = Rect2(896, 640, 128, 128)
+
+[sub_resource type="AtlasTexture" id="525"]
+atlas = ExtResource("1")
+region = Rect2(1024, 640, 128, 128)
+
+[sub_resource type="AtlasTexture" id="526"]
+atlas = ExtResource("1")
+region = Rect2(1152, 640, 128, 128)
+
+[sub_resource type="AtlasTexture" id="527"]
+atlas = ExtResource("1")
+region = Rect2(1280, 640, 128, 128)
+
+[sub_resource type="AtlasTexture" id="528"]
+atlas = ExtResource("1")
+region = Rect2(1408, 640, 128, 128)
+
+[sub_resource type="AtlasTexture" id="529"]
+atlas = ExtResource("1")
+region = Rect2(1536, 640, 128, 128)
+
+[sub_resource type="AtlasTexture" id="530"]
+atlas = ExtResource("1")
+region = Rect2(1664, 640, 128, 128)
+
+[sub_resource type="AtlasTexture" id="531"]
+atlas = ExtResource("1")
+region = Rect2(1792, 640, 128, 128)
+
+[sub_resource type="AtlasTexture" id="532"]
+atlas = ExtResource("1")
+region = Rect2(1920, 640, 128, 128)
+
+[sub_resource type="AtlasTexture" id="485"]
+atlas = ExtResource("1")
+region = Rect2(0, 1536, 128, 128)
+
+[sub_resource type="AtlasTexture" id="486"]
+atlas = ExtResource("1")
+region = Rect2(128, 1536, 128, 128)
+
+[sub_resource type="AtlasTexture" id="487"]
+atlas = ExtResource("1")
+region = Rect2(256, 1536, 128, 128)
+
+[sub_resource type="AtlasTexture" id="488"]
+atlas = ExtResource("1")
+region = Rect2(384, 1536, 128, 128)
+
+[sub_resource type="AtlasTexture" id="489"]
+atlas = ExtResource("1")
+region = Rect2(512, 1536, 128, 128)
+
+[sub_resource type="AtlasTexture" id="490"]
+atlas = ExtResource("1")
+region = Rect2(640, 1536, 128, 128)
+
+[sub_resource type="AtlasTexture" id="491"]
+atlas = ExtResource("1")
+region = Rect2(768, 1536, 128, 128)
+
+[sub_resource type="AtlasTexture" id="492"]
+atlas = ExtResource("1")
+region = Rect2(896, 1536, 128, 128)
+
+[sub_resource type="AtlasTexture" id="493"]
+atlas = ExtResource("1")
+region = Rect2(1024, 1536, 128, 128)
+
+[sub_resource type="AtlasTexture" id="494"]
+atlas = ExtResource("1")
+region = Rect2(1152, 1536, 128, 128)
+
+[sub_resource type="AtlasTexture" id="495"]
+atlas = ExtResource("1")
+region = Rect2(1280, 1536, 128, 128)
+
+[sub_resource type="AtlasTexture" id="496"]
+atlas = ExtResource("1")
+region = Rect2(1408, 1536, 128, 128)
+
+[sub_resource type="AtlasTexture" id="497"]
+atlas = ExtResource("1")
+region = Rect2(1536, 1536, 128, 128)
+
+[sub_resource type="AtlasTexture" id="498"]
+atlas = ExtResource("1")
+region = Rect2(1664, 1536, 128, 128)
+
+[sub_resource type="AtlasTexture" id="499"]
+atlas = ExtResource("1")
+region = Rect2(1792, 1536, 128, 128)
+
+[sub_resource type="AtlasTexture" id="500"]
+atlas = ExtResource("1")
+region = Rect2(1920, 1536, 128, 128)
+
+[sub_resource type="AtlasTexture" id="501"]
+atlas = ExtResource("1")
+region = Rect2(0, 1664, 128, 128)
+
+[sub_resource type="AtlasTexture" id="502"]
+atlas = ExtResource("1")
+region = Rect2(128, 1664, 128, 128)
+
+[sub_resource type="AtlasTexture" id="503"]
+atlas = ExtResource("1")
+region = Rect2(256, 1664, 128, 128)
+
+[sub_resource type="AtlasTexture" id="504"]
+atlas = ExtResource("1")
+region = Rect2(384, 1664, 128, 128)
+
+[sub_resource type="AtlasTexture" id="505"]
+atlas = ExtResource("1")
+region = Rect2(512, 1664, 128, 128)
+
+[sub_resource type="AtlasTexture" id="506"]
+atlas = ExtResource("1")
+region = Rect2(640, 1664, 128, 128)
+
+[sub_resource type="AtlasTexture" id="507"]
+atlas = ExtResource("1")
+region = Rect2(768, 1664, 128, 128)
+
+[sub_resource type="AtlasTexture" id="508"]
+atlas = ExtResource("1")
+region = Rect2(896, 1664, 128, 128)
+
+[sub_resource type="AtlasTexture" id="509"]
+atlas = ExtResource("1")
+region = Rect2(1024, 1664, 128, 128)
+
+[sub_resource type="AtlasTexture" id="510"]
+atlas = ExtResource("1")
+region = Rect2(1152, 1664, 128, 128)
+
+[sub_resource type="AtlasTexture" id="511"]
+atlas = ExtResource("1")
+region = Rect2(1280, 1664, 128, 128)
+
+[sub_resource type="AtlasTexture" id="512"]
+atlas = ExtResource("1")
+region = Rect2(1408, 1664, 128, 128)
+
+[sub_resource type="AtlasTexture" id="513"]
+atlas = ExtResource("1")
+region = Rect2(1536, 1664, 128, 128)
+
+[sub_resource type="AtlasTexture" id="514"]
+atlas = ExtResource("1")
+region = Rect2(1664, 1664, 128, 128)
+
+[sub_resource type="AtlasTexture" id="515"]
+atlas = ExtResource("1")
+region = Rect2(1792, 1664, 128, 128)
+
+[sub_resource type="AtlasTexture" id="516"]
+atlas = ExtResource("1")
+region = Rect2(1920, 1664, 128, 128)
+
+[sub_resource type="SpriteFrames" id="260"]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("261")
+}, {
+"duration": 1.0,
+"texture": SubResource("262")
+}, {
+"duration": 1.0,
+"texture": SubResource("263")
+}, {
+"duration": 1.0,
+"texture": SubResource("264")
+}, {
+"duration": 1.0,
+"texture": SubResource("265")
+}, {
+"duration": 1.0,
+"texture": SubResource("266")
+}, {
+"duration": 1.0,
+"texture": SubResource("267")
+}, {
+"duration": 1.0,
+"texture": SubResource("268")
+}, {
+"duration": 1.0,
+"texture": SubResource("269")
+}, {
+"duration": 1.0,
+"texture": SubResource("270")
+}, {
+"duration": 1.0,
+"texture": SubResource("271")
+}, {
+"duration": 1.0,
+"texture": SubResource("272")
+}, {
+"duration": 1.0,
+"texture": SubResource("273")
+}, {
+"duration": 1.0,
+"texture": SubResource("274")
+}, {
+"duration": 1.0,
+"texture": SubResource("275")
+}, {
+"duration": 1.0,
+"texture": SubResource("276")
+}],
+"loop": true,
+"name": &"45back_left_idle",
+"speed": 24.0
+}, {
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("277")
+}, {
+"duration": 1.0,
+"texture": SubResource("278")
+}, {
+"duration": 1.0,
+"texture": SubResource("279")
+}, {
+"duration": 1.0,
+"texture": SubResource("280")
+}, {
+"duration": 1.0,
+"texture": SubResource("281")
+}, {
+"duration": 1.0,
+"texture": SubResource("282")
+}, {
+"duration": 1.0,
+"texture": SubResource("283")
+}, {
+"duration": 1.0,
+"texture": SubResource("284")
+}, {
+"duration": 1.0,
+"texture": SubResource("285")
+}, {
+"duration": 1.0,
+"texture": SubResource("286")
+}, {
+"duration": 1.0,
+"texture": SubResource("287")
+}, {
+"duration": 1.0,
+"texture": SubResource("288")
+}, {
+"duration": 1.0,
+"texture": SubResource("289")
+}, {
+"duration": 1.0,
+"texture": SubResource("290")
+}, {
+"duration": 1.0,
+"texture": SubResource("291")
+}, {
+"duration": 1.0,
+"texture": SubResource("292")
+}],
+"loop": true,
+"name": &"45back_left_walk",
+"speed": 24.0
+}, {
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("293")
+}, {
+"duration": 1.0,
+"texture": SubResource("294")
+}, {
+"duration": 1.0,
+"texture": SubResource("295")
+}, {
+"duration": 1.0,
+"texture": SubResource("296")
+}, {
+"duration": 1.0,
+"texture": SubResource("297")
+}, {
+"duration": 1.0,
+"texture": SubResource("298")
+}, {
+"duration": 1.0,
+"texture": SubResource("299")
+}, {
+"duration": 1.0,
+"texture": SubResource("300")
+}, {
+"duration": 1.0,
+"texture": SubResource("301")
+}, {
+"duration": 1.0,
+"texture": SubResource("302")
+}, {
+"duration": 1.0,
+"texture": SubResource("303")
+}, {
+"duration": 1.0,
+"texture": SubResource("304")
+}, {
+"duration": 1.0,
+"texture": SubResource("305")
+}, {
+"duration": 1.0,
+"texture": SubResource("306")
+}, {
+"duration": 1.0,
+"texture": SubResource("307")
+}, {
+"duration": 1.0,
+"texture": SubResource("308")
+}],
+"loop": true,
+"name": &"45back_right_idle",
+"speed": 24.0
+}, {
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("309")
+}, {
+"duration": 1.0,
+"texture": SubResource("310")
+}, {
+"duration": 1.0,
+"texture": SubResource("311")
+}, {
+"duration": 1.0,
+"texture": SubResource("312")
+}, {
+"duration": 1.0,
+"texture": SubResource("313")
+}, {
+"duration": 1.0,
+"texture": SubResource("314")
+}, {
+"duration": 1.0,
+"texture": SubResource("315")
+}, {
+"duration": 1.0,
+"texture": SubResource("316")
+}, {
+"duration": 1.0,
+"texture": SubResource("317")
+}, {
+"duration": 1.0,
+"texture": SubResource("318")
+}, {
+"duration": 1.0,
+"texture": SubResource("319")
+}, {
+"duration": 1.0,
+"texture": SubResource("320")
+}, {
+"duration": 1.0,
+"texture": SubResource("321")
+}, {
+"duration": 1.0,
+"texture": SubResource("322")
+}, {
+"duration": 1.0,
+"texture": SubResource("323")
+}, {
+"duration": 1.0,
+"texture": SubResource("324")
+}],
+"loop": true,
+"name": &"45back_right_walk",
+"speed": 24.0
+}, {
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("325")
+}, {
+"duration": 1.0,
+"texture": SubResource("326")
+}, {
+"duration": 1.0,
+"texture": SubResource("327")
+}, {
+"duration": 1.0,
+"texture": SubResource("328")
+}, {
+"duration": 1.0,
+"texture": SubResource("329")
+}, {
+"duration": 1.0,
+"texture": SubResource("330")
+}, {
+"duration": 1.0,
+"texture": SubResource("331")
+}, {
+"duration": 1.0,
+"texture": SubResource("332")
+}, {
+"duration": 1.0,
+"texture": SubResource("333")
+}, {
+"duration": 1.0,
+"texture": SubResource("334")
+}, {
+"duration": 1.0,
+"texture": SubResource("335")
+}, {
+"duration": 1.0,
+"texture": SubResource("336")
+}, {
+"duration": 1.0,
+"texture": SubResource("337")
+}, {
+"duration": 1.0,
+"texture": SubResource("338")
+}, {
+"duration": 1.0,
+"texture": SubResource("339")
+}, {
+"duration": 1.0,
+"texture": SubResource("340")
+}],
+"loop": true,
+"name": &"45front_left_idle",
+"speed": 24.0
+}, {
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("341")
+}, {
+"duration": 1.0,
+"texture": SubResource("342")
+}, {
+"duration": 1.0,
+"texture": SubResource("343")
+}, {
+"duration": 1.0,
+"texture": SubResource("344")
+}, {
+"duration": 1.0,
+"texture": SubResource("345")
+}, {
+"duration": 1.0,
+"texture": SubResource("346")
+}, {
+"duration": 1.0,
+"texture": SubResource("347")
+}, {
+"duration": 1.0,
+"texture": SubResource("348")
+}, {
+"duration": 1.0,
+"texture": SubResource("349")
+}, {
+"duration": 1.0,
+"texture": SubResource("350")
+}, {
+"duration": 1.0,
+"texture": SubResource("351")
+}, {
+"duration": 1.0,
+"texture": SubResource("352")
+}, {
+"duration": 1.0,
+"texture": SubResource("353")
+}, {
+"duration": 1.0,
+"texture": SubResource("354")
+}, {
+"duration": 1.0,
+"texture": SubResource("355")
+}, {
+"duration": 1.0,
+"texture": SubResource("356")
+}],
+"loop": true,
+"name": &"45front_left_walk",
+"speed": 24.0
+}, {
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("357")
+}, {
+"duration": 1.0,
+"texture": SubResource("358")
+}, {
+"duration": 1.0,
+"texture": SubResource("359")
+}, {
+"duration": 1.0,
+"texture": SubResource("360")
+}, {
+"duration": 1.0,
+"texture": SubResource("361")
+}, {
+"duration": 1.0,
+"texture": SubResource("362")
+}, {
+"duration": 1.0,
+"texture": SubResource("363")
+}, {
+"duration": 1.0,
+"texture": SubResource("364")
+}, {
+"duration": 1.0,
+"texture": SubResource("365")
+}, {
+"duration": 1.0,
+"texture": SubResource("366")
+}, {
+"duration": 1.0,
+"texture": SubResource("367")
+}, {
+"duration": 1.0,
+"texture": SubResource("368")
+}, {
+"duration": 1.0,
+"texture": SubResource("369")
+}, {
+"duration": 1.0,
+"texture": SubResource("370")
+}, {
+"duration": 1.0,
+"texture": SubResource("371")
+}, {
+"duration": 1.0,
+"texture": SubResource("372")
+}],
+"loop": true,
+"name": &"45front_right_idle",
+"speed": 24.0
+}, {
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("373")
+}, {
+"duration": 1.0,
+"texture": SubResource("374")
+}, {
+"duration": 1.0,
+"texture": SubResource("375")
+}, {
+"duration": 1.0,
+"texture": SubResource("376")
+}, {
+"duration": 1.0,
+"texture": SubResource("377")
+}, {
+"duration": 1.0,
+"texture": SubResource("378")
+}, {
+"duration": 1.0,
+"texture": SubResource("379")
+}, {
+"duration": 1.0,
+"texture": SubResource("380")
+}, {
+"duration": 1.0,
+"texture": SubResource("381")
+}, {
+"duration": 1.0,
+"texture": SubResource("382")
+}, {
+"duration": 1.0,
+"texture": SubResource("383")
+}, {
+"duration": 1.0,
+"texture": SubResource("384")
+}, {
+"duration": 1.0,
+"texture": SubResource("385")
+}, {
+"duration": 1.0,
+"texture": SubResource("386")
+}, {
+"duration": 1.0,
+"texture": SubResource("387")
+}, {
+"duration": 1.0,
+"texture": SubResource("388")
+}],
+"loop": true,
+"name": &"45front_right_walk",
+"speed": 24.0
+}, {
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("597")
+}, {
+"duration": 1.0,
+"texture": SubResource("598")
+}, {
+"duration": 1.0,
+"texture": SubResource("599")
+}, {
+"duration": 1.0,
+"texture": SubResource("600")
+}, {
+"duration": 1.0,
+"texture": SubResource("601")
+}, {
+"duration": 1.0,
+"texture": SubResource("602")
+}, {
+"duration": 1.0,
+"texture": SubResource("603")
+}, {
+"duration": 1.0,
+"texture": SubResource("604")
+}, {
+"duration": 1.0,
+"texture": SubResource("605")
+}, {
+"duration": 1.0,
+"texture": SubResource("606")
+}, {
+"duration": 1.0,
+"texture": SubResource("607")
+}, {
+"duration": 1.0,
+"texture": SubResource("608")
+}, {
+"duration": 1.0,
+"texture": SubResource("609")
+}, {
+"duration": 1.0,
+"texture": SubResource("610")
+}, {
+"duration": 1.0,
+"texture": SubResource("611")
+}, {
+"duration": 1.0,
+"texture": SubResource("612")
+}],
+"loop": true,
+"name": &"back_idle",
+"speed": 24.0
+}, {
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("613")
+}, {
+"duration": 1.0,
+"texture": SubResource("614")
+}, {
+"duration": 1.0,
+"texture": SubResource("615")
+}, {
+"duration": 1.0,
+"texture": SubResource("616")
+}, {
+"duration": 1.0,
+"texture": SubResource("617")
+}, {
+"duration": 1.0,
+"texture": SubResource("618")
+}, {
+"duration": 1.0,
+"texture": SubResource("619")
+}, {
+"duration": 1.0,
+"texture": SubResource("620")
+}, {
+"duration": 1.0,
+"texture": SubResource("621")
+}, {
+"duration": 1.0,
+"texture": SubResource("622")
+}, {
+"duration": 1.0,
+"texture": SubResource("623")
+}, {
+"duration": 1.0,
+"texture": SubResource("624")
+}, {
+"duration": 1.0,
+"texture": SubResource("625")
+}, {
+"duration": 1.0,
+"texture": SubResource("626")
+}, {
+"duration": 1.0,
+"texture": SubResource("627")
+}, {
+"duration": 1.0,
+"texture": SubResource("628")
+}],
+"loop": true,
+"name": &"back_walk",
+"speed": 24.0
+}, {
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("629")
+}, {
+"duration": 1.0,
+"texture": SubResource("630")
+}, {
+"duration": 1.0,
+"texture": SubResource("631")
+}, {
+"duration": 1.0,
+"texture": SubResource("632")
+}, {
+"duration": 1.0,
+"texture": SubResource("633")
+}, {
+"duration": 1.0,
+"texture": SubResource("634")
+}, {
+"duration": 1.0,
+"texture": SubResource("635")
+}, {
+"duration": 1.0,
+"texture": SubResource("636")
+}, {
+"duration": 1.0,
+"texture": SubResource("637")
+}, {
+"duration": 1.0,
+"texture": SubResource("638")
+}, {
+"duration": 1.0,
+"texture": SubResource("639")
+}, {
+"duration": 1.0,
+"texture": SubResource("640")
+}, {
+"duration": 1.0,
+"texture": SubResource("641")
+}, {
+"duration": 1.0,
+"texture": SubResource("642")
+}, {
+"duration": 1.0,
+"texture": SubResource("643")
+}, {
+"duration": 1.0,
+"texture": SubResource("644")
+}],
+"loop": true,
+"name": &"front_idle",
+"speed": 24.0
+}, {
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("645")
+}, {
+"duration": 1.0,
+"texture": SubResource("646")
+}, {
+"duration": 1.0,
+"texture": SubResource("647")
+}, {
+"duration": 1.0,
+"texture": SubResource("648")
+}, {
+"duration": 1.0,
+"texture": SubResource("649")
+}, {
+"duration": 1.0,
+"texture": SubResource("650")
+}, {
+"duration": 1.0,
+"texture": SubResource("651")
+}, {
+"duration": 1.0,
+"texture": SubResource("652")
+}, {
+"duration": 1.0,
+"texture": SubResource("653")
+}, {
+"duration": 1.0,
+"texture": SubResource("654")
+}, {
+"duration": 1.0,
+"texture": SubResource("655")
+}, {
+"duration": 1.0,
+"texture": SubResource("656")
+}, {
+"duration": 1.0,
+"texture": SubResource("657")
+}, {
+"duration": 1.0,
+"texture": SubResource("658")
+}, {
+"duration": 1.0,
+"texture": SubResource("659")
+}, {
+"duration": 1.0,
+"texture": SubResource("660")
+}],
+"loop": true,
+"name": &"front_walk",
+"speed": 24.0
+}, {
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("453")
+}, {
+"duration": 1.0,
+"texture": SubResource("454")
+}, {
+"duration": 1.0,
+"texture": SubResource("455")
+}, {
+"duration": 1.0,
+"texture": SubResource("456")
+}, {
+"duration": 1.0,
+"texture": SubResource("457")
+}, {
+"duration": 1.0,
+"texture": SubResource("458")
+}, {
+"duration": 1.0,
+"texture": SubResource("459")
+}, {
+"duration": 1.0,
+"texture": SubResource("460")
+}, {
+"duration": 1.0,
+"texture": SubResource("461")
+}, {
+"duration": 1.0,
+"texture": SubResource("462")
+}, {
+"duration": 1.0,
+"texture": SubResource("463")
+}, {
+"duration": 1.0,
+"texture": SubResource("464")
+}, {
+"duration": 1.0,
+"texture": SubResource("465")
+}, {
+"duration": 1.0,
+"texture": SubResource("466")
+}, {
+"duration": 1.0,
+"texture": SubResource("467")
+}, {
+"duration": 1.0,
+"texture": SubResource("468")
+}],
+"loop": true,
+"name": &"side_left_idle",
+"speed": 24.0
+}, {
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("517")
+}, {
+"duration": 1.0,
+"texture": SubResource("518")
+}, {
+"duration": 1.0,
+"texture": SubResource("519")
+}, {
+"duration": 1.0,
+"texture": SubResource("520")
+}, {
+"duration": 1.0,
+"texture": SubResource("521")
+}, {
+"duration": 1.0,
+"texture": SubResource("522")
+}, {
+"duration": 1.0,
+"texture": SubResource("523")
+}, {
+"duration": 1.0,
+"texture": SubResource("524")
+}, {
+"duration": 1.0,
+"texture": SubResource("525")
+}, {
+"duration": 1.0,
+"texture": SubResource("526")
+}, {
+"duration": 1.0,
+"texture": SubResource("527")
+}, {
+"duration": 1.0,
+"texture": SubResource("528")
+}, {
+"duration": 1.0,
+"texture": SubResource("529")
+}, {
+"duration": 1.0,
+"texture": SubResource("530")
+}, {
+"duration": 1.0,
+"texture": SubResource("531")
+}, {
+"duration": 1.0,
+"texture": SubResource("532")
+}],
+"loop": true,
+"name": &"side_left_walk",
+"speed": 24.0
+}, {
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("485")
+}, {
+"duration": 1.0,
+"texture": SubResource("486")
+}, {
+"duration": 1.0,
+"texture": SubResource("487")
+}, {
+"duration": 1.0,
+"texture": SubResource("488")
+}, {
+"duration": 1.0,
+"texture": SubResource("489")
+}, {
+"duration": 1.0,
+"texture": SubResource("490")
+}, {
+"duration": 1.0,
+"texture": SubResource("491")
+}, {
+"duration": 1.0,
+"texture": SubResource("492")
+}, {
+"duration": 1.0,
+"texture": SubResource("493")
+}, {
+"duration": 1.0,
+"texture": SubResource("494")
+}, {
+"duration": 1.0,
+"texture": SubResource("495")
+}, {
+"duration": 1.0,
+"texture": SubResource("496")
+}, {
+"duration": 1.0,
+"texture": SubResource("497")
+}, {
+"duration": 1.0,
+"texture": SubResource("498")
+}, {
+"duration": 1.0,
+"texture": SubResource("499")
+}, {
+"duration": 1.0,
+"texture": SubResource("500")
+}],
+"loop": true,
+"name": &"side_right_idle",
+"speed": 24.0
+}, {
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("501")
+}, {
+"duration": 1.0,
+"texture": SubResource("502")
+}, {
+"duration": 1.0,
+"texture": SubResource("503")
+}, {
+"duration": 1.0,
+"texture": SubResource("504")
+}, {
+"duration": 1.0,
+"texture": SubResource("505")
+}, {
+"duration": 1.0,
+"texture": SubResource("506")
+}, {
+"duration": 1.0,
+"texture": SubResource("507")
+}, {
+"duration": 1.0,
+"texture": SubResource("508")
+}, {
+"duration": 1.0,
+"texture": SubResource("509")
+}, {
+"duration": 1.0,
+"texture": SubResource("510")
+}, {
+"duration": 1.0,
+"texture": SubResource("511")
+}, {
+"duration": 1.0,
+"texture": SubResource("512")
+}, {
+"duration": 1.0,
+"texture": SubResource("513")
+}, {
+"duration": 1.0,
+"texture": SubResource("514")
+}, {
+"duration": 1.0,
+"texture": SubResource("515")
+}, {
+"duration": 1.0,
+"texture": SubResource("516")
+}],
+"loop": true,
+"name": &"side_right_walk",
+"speed": 24.0
+}]
+
+[sub_resource type="CapsuleShape2D" id="1"]
+radius = 7.0
+height = 14.0
+
+[sub_resource type="OccluderPolygon2D" id="661"]
+polygon = PackedVector2Array(16.25, 18.75, 18.75, 36.25, 15, 38.75, 6.25, 42.5, -5, 42.5, -13.75, 41.25, -18.75, 37.5, -15, 20)
+
+[node name="Goblin" type="CharacterBody2D"]
+script = ExtResource("2")
+
+[node name="Shadow" type="Sprite2D" parent="."]
+modulate = Color(0.129412, 0.0745098, 0.192157, 0.647059)
+position = Vector2(0, -0.406251)
+scale = Vector2(0.78125, 0.362305)
+texture = SubResource("663")
+
+[node name="Sprite2D" type="AnimatedSprite2D" parent="."]
+position = Vector2(0, -35)
+scale = Vector2(0.8, 0.8)
+sprite_frames = SubResource("260")
+animation = &"front_idle"
+frame = 8
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
+position = Vector2(0, -7)
+rotation = 1.5708
+shape = SubResource("1")
+
+[node name="Camera2D" type="Camera2D" parent="."]
+
+[node name="LightOccluder2D" type="LightOccluder2D" parent="."]
+visible = false
+light_mask = 16
+position = Vector2(0, -31)
+scale = Vector2(0.8, 0.8)
+occluder = SubResource("661")

+ 29 - 13
2d/isometric/project.godot

@@ -25,38 +25,47 @@ config/icon="res://icon.webp"
 window/stretch/mode="canvas_items"
 window/stretch/aspect="expand"
 
+[gdnative]
+
+singletons=[]
+
+[image_loader]
+
+filter=false
+gen_mipmaps=false
+
 [input]
 
 move_down={
 "deadzone": 0.5,
-"events": [Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":13,"pressure":0.0,"pressed":false,"script":null)
-, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":1.0,"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":4194322,"physical_keycode":0,"key_label":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":0,"physical_keycode":83,"key_label":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":0,"physical_keycode":4194322,"key_label":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":13,"pressure":0.0,"pressed":false,"script":null)
+, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":1.0,"script":null)
 ]
 }
 move_left={
 "deadzone": 0.5,
-"events": [Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":14,"pressure":0.0,"pressed":false,"script":null)
-, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":-1.0,"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":4194319,"physical_keycode":0,"key_label":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":0,"physical_keycode":65,"key_label":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":0,"physical_keycode":4194319,"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(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":-1.0,"script":null)
 ]
 }
 move_right={
 "deadzone": 0.5,
-"events": [Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":15,"pressure":0.0,"pressed":false,"script":null)
-, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":1.0,"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":4194321,"physical_keycode":0,"key_label":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":0,"physical_keycode":68,"key_label":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":0,"physical_keycode":4194321,"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(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":1.0,"script":null)
 ]
 }
 move_up={
 "deadzone": 0.5,
-"events": [Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":12,"pressure":0.0,"pressed":false,"script":null)
-, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":-1.0,"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":4194320,"physical_keycode":0,"key_label":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":0,"physical_keycode":87,"key_label":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":0,"physical_keycode":4194320,"key_label":0,"unicode":0,"echo":false,"script":null)
+, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":12,"pressure":0.0,"pressed":false,"script":null)
+, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":-1.0,"script":null)
 ]
 }
 
@@ -64,6 +73,13 @@ move_up={
 
 common/physics_ticks_per_second=120
 
+[rasterizer]
+
+use_pixel_snap=true
+
 [rendering]
 
-environment/defaults/default_clear_color=Color(0.03, 0.082, 0.15, 1)
+renderer/rendering_method="gl_compatibility"
+environment/defaults/default_clear_color=Color(0.0784314, 0.105882, 0.145098, 1)
+quality/driver/driver_name="GLES2"
+vram_compression/import_etc=true

binární
2d/isometric/screenshots/isometric.png


binární
2d/isometric/screenshots/isometric.webp


+ 0 - 226
2d/isometric/tileset.tres

@@ -1,226 +0,0 @@
-[gd_resource type="TileSet" load_steps=3 format=3 uid="uid://r7h8te85l3bx"]
-
-[ext_resource type="Texture2D" uid="uid://cxppwax2lq3dh" path="res://merged_tiles.png" id="2_6vaqu"]
-
-[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_832dk"]
-texture = ExtResource("2_6vaqu")
-texture_region_size = Vector2i(140, 140)
-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
-1:0/next_alternative_id = 8
-1:0/0 = 0
-1:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-1:0/0/physics_layer_0/angular_velocity = 0.0
-1:0/1 = 1
-1:0/1/flip_h = true
-1:0/1/physics_layer_0/linear_velocity = Vector2(0, 0)
-1:0/1/physics_layer_0/angular_velocity = 0.0
-1:0/2 = 2
-1:0/2/flip_v = true
-1:0/2/physics_layer_0/linear_velocity = Vector2(0, 0)
-1:0/2/physics_layer_0/angular_velocity = 0.0
-1:0/3 = 3
-1:0/3/flip_h = true
-1:0/3/flip_v = true
-1:0/3/physics_layer_0/linear_velocity = Vector2(0, 0)
-1:0/3/physics_layer_0/angular_velocity = 0.0
-1:0/4 = 4
-1:0/4/transpose = true
-1:0/4/physics_layer_0/linear_velocity = Vector2(0, 0)
-1:0/4/physics_layer_0/angular_velocity = 0.0
-1:0/5 = 5
-1:0/5/flip_h = true
-1:0/5/transpose = true
-1:0/5/physics_layer_0/linear_velocity = Vector2(0, 0)
-1:0/5/physics_layer_0/angular_velocity = 0.0
-1:0/6 = 6
-1:0/6/flip_v = true
-1:0/6/transpose = true
-1:0/6/physics_layer_0/linear_velocity = Vector2(0, 0)
-1:0/6/physics_layer_0/angular_velocity = 0.0
-1:0/7 = 7
-1:0/7/flip_h = true
-1:0/7/flip_v = true
-1:0/7/transpose = true
-1:0/7/physics_layer_0/linear_velocity = Vector2(0, 0)
-1:0/7/physics_layer_0/angular_velocity = 0.0
-2:0/next_alternative_id = 8
-2:0/0 = 0
-2:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-2:0/0/physics_layer_0/angular_velocity = 0.0
-2:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-1.5, -2.5, -65, 32, -3, 64.5, 62, 31)
-2:0/1 = 1
-2:0/1/flip_h = true
-2:0/1/physics_layer_0/linear_velocity = Vector2(0, 0)
-2:0/1/physics_layer_0/angular_velocity = 0.0
-2:0/1/physics_layer_0/polygon_0/points = PackedVector2Array(70, 38, 134, 70, 70, 102, 6, 70)
-2:0/2 = 2
-2:0/2/flip_v = true
-2:0/2/physics_layer_0/linear_velocity = Vector2(0, 0)
-2:0/2/physics_layer_0/angular_velocity = 0.0
-2:0/2/physics_layer_0/polygon_0/points = PackedVector2Array(70, 38, 134, 70, 70, 102, 6, 70)
-2:0/3 = 3
-2:0/3/flip_h = true
-2:0/3/flip_v = true
-2:0/3/physics_layer_0/linear_velocity = Vector2(0, 0)
-2:0/3/physics_layer_0/angular_velocity = 0.0
-2:0/3/physics_layer_0/polygon_0/points = PackedVector2Array(70, 38, 134, 70, 70, 102, 6, 70)
-2:0/4 = 4
-2:0/4/transpose = true
-2:0/4/physics_layer_0/linear_velocity = Vector2(0, 0)
-2:0/4/physics_layer_0/angular_velocity = 0.0
-2:0/4/physics_layer_0/polygon_0/points = PackedVector2Array(70, 38, 134, 70, 70, 102, 6, 70)
-2:0/5 = 5
-2:0/5/flip_h = true
-2:0/5/transpose = true
-2:0/5/physics_layer_0/linear_velocity = Vector2(0, 0)
-2:0/5/physics_layer_0/angular_velocity = 0.0
-2:0/5/physics_layer_0/polygon_0/points = PackedVector2Array(70, 38, 134, 70, 70, 102, 6, 70)
-2:0/6 = 6
-2:0/6/flip_v = true
-2:0/6/transpose = true
-2:0/6/physics_layer_0/linear_velocity = Vector2(0, 0)
-2:0/6/physics_layer_0/angular_velocity = 0.0
-2:0/6/physics_layer_0/polygon_0/points = PackedVector2Array(70, 38, 134, 70, 70, 102, 6, 70)
-2:0/7 = 7
-2:0/7/flip_h = true
-2:0/7/flip_v = true
-2:0/7/transpose = true
-2:0/7/physics_layer_0/linear_velocity = Vector2(0, 0)
-2:0/7/physics_layer_0/angular_velocity = 0.0
-2:0/7/physics_layer_0/polygon_0/points = PackedVector2Array(70, 38, 134, 70, 70, 102, 6, 70)
-3:0/next_alternative_id = 8
-3:0/0 = 0
-3:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-3:0/0/physics_layer_0/angular_velocity = 0.0
-3:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(3, 8.5, -13, 12.5, -22, 25.5, -18, 38.5, 2.5, 44, 23, 40, 27, 26, 19, 13)
-3:0/1 = 1
-3:0/1/flip_h = true
-3:0/1/physics_layer_0/linear_velocity = Vector2(0, 0)
-3:0/1/physics_layer_0/angular_velocity = 0.0
-3:0/1/physics_layer_0/polygon_0/points = PackedVector2Array(5.5, 35.5, 19.5, 25.5, 39.5, 25.5, 53.5, 35.5, 53.5, 49.5, 39.5, 59.5, 19.5, 59.5, 5.5, 49.5)
-3:0/2 = 2
-3:0/2/flip_v = true
-3:0/2/physics_layer_0/linear_velocity = Vector2(0, 0)
-3:0/2/physics_layer_0/angular_velocity = 0.0
-3:0/2/physics_layer_0/polygon_0/points = PackedVector2Array(5.5, 35.5, 19.5, 25.5, 39.5, 25.5, 53.5, 35.5, 53.5, 49.5, 39.5, 59.5, 19.5, 59.5, 5.5, 49.5)
-3:0/3 = 3
-3:0/3/flip_h = true
-3:0/3/flip_v = true
-3:0/3/physics_layer_0/linear_velocity = Vector2(0, 0)
-3:0/3/physics_layer_0/angular_velocity = 0.0
-3:0/3/physics_layer_0/polygon_0/points = PackedVector2Array(5.5, 35.5, 19.5, 25.5, 39.5, 25.5, 53.5, 35.5, 53.5, 49.5, 39.5, 59.5, 19.5, 59.5, 5.5, 49.5)
-3:0/4 = 4
-3:0/4/transpose = true
-3:0/4/physics_layer_0/linear_velocity = Vector2(0, 0)
-3:0/4/physics_layer_0/angular_velocity = 0.0
-3:0/4/physics_layer_0/polygon_0/points = PackedVector2Array(5.5, 35.5, 19.5, 25.5, 39.5, 25.5, 53.5, 35.5, 53.5, 49.5, 39.5, 59.5, 19.5, 59.5, 5.5, 49.5)
-3:0/5 = 5
-3:0/5/flip_h = true
-3:0/5/transpose = true
-3:0/5/physics_layer_0/linear_velocity = Vector2(0, 0)
-3:0/5/physics_layer_0/angular_velocity = 0.0
-3:0/5/physics_layer_0/polygon_0/points = PackedVector2Array(5.5, 35.5, 19.5, 25.5, 39.5, 25.5, 53.5, 35.5, 53.5, 49.5, 39.5, 59.5, 19.5, 59.5, 5.5, 49.5)
-3:0/6 = 6
-3:0/6/flip_v = true
-3:0/6/transpose = true
-3:0/6/physics_layer_0/linear_velocity = Vector2(0, 0)
-3:0/6/physics_layer_0/angular_velocity = 0.0
-3:0/6/physics_layer_0/polygon_0/points = PackedVector2Array(5.5, 35.5, 19.5, 25.5, 39.5, 25.5, 53.5, 35.5, 53.5, 49.5, 39.5, 59.5, 19.5, 59.5, 5.5, 49.5)
-3:0/7 = 7
-3:0/7/flip_h = true
-3:0/7/flip_v = true
-3:0/7/transpose = true
-3:0/7/physics_layer_0/linear_velocity = Vector2(0, 0)
-3:0/7/physics_layer_0/angular_velocity = 0.0
-3:0/7/physics_layer_0/polygon_0/points = PackedVector2Array(5.5, 35.5, 19.5, 25.5, 39.5, 25.5, 53.5, 35.5, 53.5, 49.5, 39.5, 59.5, 19.5, 59.5, 5.5, 49.5)
-4:0/next_alternative_id = 8
-4:0/0 = 0
-4:0/0/y_sort_origin = -16
-4:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
-4:0/0/physics_layer_0/angular_velocity = 0.0
-4:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(26, 8.5, 42.5, 19.5, -25, 51, -41, 42)
-4:0/1 = 1
-4:0/1/flip_h = true
-4:0/1/y_sort_origin = -16
-4:0/1/physics_layer_0/linear_velocity = Vector2(0, 0)
-4:0/1/physics_layer_0/angular_velocity = 0.0
-4:0/1/physics_layer_0/polygon_0/points = PackedVector2Array(-26, 8.5, -42.5, 19.5, 25, 51, 41, 42)
-4:0/2 = 2
-4:0/2/flip_v = true
-4:0/2/physics_layer_0/linear_velocity = Vector2(0, 0)
-4:0/2/physics_layer_0/angular_velocity = 0.0
-4:0/2/physics_layer_0/polygon_0/points = PackedVector2Array(2.5, 71, 66.5, 39, 82.5, 47, 18.5, 79)
-4:0/3 = 3
-4:0/3/flip_h = true
-4:0/3/flip_v = true
-4:0/3/physics_layer_0/linear_velocity = Vector2(0, 0)
-4:0/3/physics_layer_0/angular_velocity = 0.0
-4:0/3/physics_layer_0/polygon_0/points = PackedVector2Array(2.5, 71, 66.5, 39, 82.5, 47, 18.5, 79)
-4:0/4 = 4
-4:0/4/transpose = true
-4:0/4/physics_layer_0/linear_velocity = Vector2(0, 0)
-4:0/4/physics_layer_0/angular_velocity = 0.0
-4:0/4/physics_layer_0/polygon_0/points = PackedVector2Array(2.5, 71, 66.5, 39, 82.5, 47, 18.5, 79)
-4:0/5 = 5
-4:0/5/flip_h = true
-4:0/5/transpose = true
-4:0/5/physics_layer_0/linear_velocity = Vector2(0, 0)
-4:0/5/physics_layer_0/angular_velocity = 0.0
-4:0/5/physics_layer_0/polygon_0/points = PackedVector2Array(2.5, 71, 66.5, 39, 82.5, 47, 18.5, 79)
-4:0/6 = 6
-4:0/6/flip_v = true
-4:0/6/transpose = true
-4:0/6/physics_layer_0/linear_velocity = Vector2(0, 0)
-4:0/6/physics_layer_0/angular_velocity = 0.0
-4:0/6/physics_layer_0/polygon_0/points = PackedVector2Array(2.5, 71, 66.5, 39, 82.5, 47, 18.5, 79)
-4:0/7 = 7
-4:0/7/flip_h = true
-4:0/7/flip_v = true
-4:0/7/transpose = true
-4:0/7/physics_layer_0/linear_velocity = Vector2(0, 0)
-4:0/7/physics_layer_0/angular_velocity = 0.0
-4:0/7/physics_layer_0/polygon_0/points = PackedVector2Array(2.5, 71, 66.5, 39, 82.5, 47, 18.5, 79)
-
-[resource]
-tile_shape = 1
-tile_layout = 5
-tile_size = Vector2i(128, 64)
-physics_layer_0/collision_layer = 1
-sources/5 = SubResource("TileSetAtlasSource_832dk")
-tile_proxies/coords_level = [[5, Vector2i(1, 0)], [5, Vector2i(1, 1)], [5, Vector2i(2, 0)], [5, Vector2i(1, 0)]]

binární
2d/isometric/tileset/isotiles.png


+ 4 - 4
2d/navigation_astar/sprites/obstacle.png.import → 2d/isometric/tileset/isotiles.png.import

@@ -2,16 +2,16 @@
 
 importer="texture"
 type="CompressedTexture2D"
-uid="uid://bo5d4p1el52ir"
-path="res://.godot/imported/obstacle.png-0258c5f5ce65bfa0dd8610adeb784f54.ctex"
+uid="uid://dup8jrb6ajapx"
+path="res://.godot/imported/isotiles.png-525cf6639aba62989bb423b9cdb9e1f3.ctex"
 metadata={
 "vram_texture": false
 }
 
 [deps]
 
-source_file="res://sprites/obstacle.png"
-dest_files=["res://.godot/imported/obstacle.png-0258c5f5ce65bfa0dd8610adeb784f54.ctex"]
+source_file="res://tileset/isotiles.png"
+dest_files=["res://.godot/imported/isotiles.png-525cf6639aba62989bb423b9cdb9e1f3.ctex"]
 
 [params]
 

+ 248 - 0
2d/isometric/tileset/tileset.tres

@@ -0,0 +1,248 @@
+[gd_resource type="TileSet" load_steps=7 format=3 uid="uid://ceswxvl27cesm"]
+
+[ext_resource type="Texture2D" uid="uid://dup8jrb6ajapx" path="res://tileset/isotiles.png" id="1"]
+
+[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_s3w07"]
+texture = ExtResource("1")
+margins = Vector2i(28, 75)
+texture_region_size = Vector2i(135, 105)
+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_fa1vh"]
+texture = ExtResource("1")
+margins = Vector2i(221, 75)
+texture_region_size = Vector2i(135, 105)
+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_xpb3e"]
+texture = ExtResource("1")
+margins = Vector2i(28, 220)
+texture_region_size = Vector2i(140, 140)
+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(-2, -2, 62, 30, -2, 62, -66, 30)
+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(2, -2, -62, 30, 2, 62, 66, 30)
+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(-2, 2, 62, -30, -2, -62, -66, -30)
+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(2, 2, -62, -30, 2, -62, 66, -30)
+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(-2, -2, 62, 30, -2.00001, 62, -66, 30)
+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(2, -2, -62, 30, 1.99999, 62, 66, 30)
+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(-2, 2, 62, -30, -1.99999, -62, -66, -30)
+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(2, 2, -62, -30, 2.00001, -62, 66, -30)
+
+[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_aki5c"]
+texture = ExtResource("1")
+margins = Vector2i(259, 241)
+texture_region_size = Vector2i(55, 95)
+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(-22.5, 19.5, -10.5, 11.5, 13.5, 11.5, 25.5, 19.5, 25.5, 35.5, 13.5, 43.5, -6.5, 43.5, -22.5, 35.5)
+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(22.5, 19.5, 10.5, 11.5, -13.5, 11.5, -25.5, 19.5, -25.5, 35.5, -13.5, 43.5, 6.5, 43.5, 22.5, 35.5)
+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(-22.5, -19.5, -10.5, -11.5, 13.5, -11.5, 25.5, -19.5, 25.5, -35.5, 13.5, -43.5, -6.5, -43.5, -22.5, -35.5)
+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(22.5, -19.5, 10.5, -11.5, -13.5, -11.5, -25.5, -19.5, -25.5, -35.5, -13.5, -43.5, 6.5, -43.5, 22.5, -35.5)
+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(-22.5, 19.5, -10.5, 11.5, 13.5, 11.5, 25.5, 19.5, 25.5, 35.5, 13.5, 43.5, -6.5, 43.5, -22.5, 35.5)
+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(22.5, 19.5, 10.5, 11.5, -13.5, 11.5, -25.5, 19.5, -25.5, 35.5, -13.5, 43.5, 6.5, 43.5, 22.5, 35.5)
+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(-22.5, -19.5, -10.5, -11.5, 13.5, -11.5, 25.5, -19.5, 25.5, -35.5, 13.5, -43.5, -6.5, -43.5, -22.5, -35.5)
+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(22.5, -19.5, 10.5, -11.5, -13.5, -11.5, -25.5, -19.5, -25.5, -35.5, -13.5, -43.5, 6.5, -43.5, 22.5, -35.5)
+
+[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_ec70s"]
+texture = ExtResource("1")
+margins = Vector2i(54, 426)
+texture_region_size = Vector2i(85, 110)
+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(-40.5, 31, 39.5, -9, 39.5, 15, -40.5, 55)
+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(40.5, 31, -39.5, -9, -39.5, 15, 40.5, 55)
+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(-40.5, -31, 39.5, 9, 39.5, -15, -40.5, -55)
+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(40.5, -31, -39.5, 9, -39.5, -15, 40.5, -55)
+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(-40.5, 31, 39.5, -9, 39.5, 15, -40.5, 55)
+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(40.5, 31, -39.5, -9, -39.5, 15, 40.5, 55)
+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(-40.5, -31, 39.5, 9, 39.5, -15, -40.5, -55)
+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(40.5, -31, -39.5, 9, -39.5, -15, 40.5, -55)
+
+[resource]
+tile_shape = 1
+tile_layout = 5
+tile_size = Vector2i(128, 64)
+physics_layer_0/collision_layer = 1
+sources/0 = SubResource("TileSetAtlasSource_s3w07")
+sources/1 = SubResource("TileSetAtlasSource_fa1vh")
+sources/2 = SubResource("TileSetAtlasSource_xpb3e")
+sources/3 = SubResource("TileSetAtlasSource_aki5c")
+sources/4 = SubResource("TileSetAtlasSource_ec70s")

+ 60 - 0
2d/isometric/tileset/tileset_edit.tscn

@@ -0,0 +1,60 @@
+[gd_scene load_steps=3 format=2]
+
+[ext_resource path="res://tileset/isotiles.png" type="Texture2D" id=1]
+
+[sub_resource type="OccluderPolygon2D" id=2]
+polygon = PackedVector2Array( 0, -100, -67, -68, -66, 0, -1, 33, 66, -2, 64, -67 )
+
+[node name="TilesetEdit" type="Node2D"]
+
+[node name="Base" type="Sprite2D" parent="."]
+texture = ExtResource( 1 )
+region_enabled = true
+region_rect = Rect2( 28, 75, 135, 105 )
+
+[node name="Base2" type="Sprite2D" parent="."]
+position = Vector2( 200, 0 )
+texture = ExtResource( 1 )
+region_enabled = true
+region_rect = Rect2( 221, 75, 135, 105 )
+
+[node name="Wall" type="Sprite2D" parent="."]
+position = Vector2( 400, 0 )
+texture = ExtResource( 1 )
+offset = Vector2( 0, -32 )
+region_enabled = true
+region_rect = Rect2( 28, 220, 140, 140 )
+
+[node name="StaticBody2D" type="StaticBody2D" parent="Wall"]
+
+[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Wall/StaticBody2D"]
+polygon = PackedVector2Array( -64, 0, 0, 32, 64, 0, 0, -32 )
+
+[node name="LightOccluder2D" type="LightOccluder2D" parent="Wall"]
+visible = false
+occluder = SubResource( 2 )
+
+[node name="Column" type="Sprite2D" parent="."]
+position = Vector2( 600, 0 )
+texture = ExtResource( 1 )
+offset = Vector2( 0, -32 )
+region_enabled = true
+region_rect = Rect2( 259, 241, 55, 95 )
+
+[node name="StaticBody2D" type="StaticBody2D" parent="Column"]
+
+[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Column/StaticBody2D"]
+position = Vector2( 2, 0 )
+polygon = PackedVector2Array( -27, 7, -14, 20, 16, 20, 28, 4, 24, -12, 10, -22, -10, -22, -24, -12 )
+
+[node name="Door1" type="Sprite2D" parent="."]
+position = Vector2( 800, 0 )
+texture = ExtResource( 1 )
+offset = Vector2( 0, -25 )
+region_enabled = true
+region_rect = Rect2( 54, 426, 85, 110 )
+
+[node name="StaticBody2D" type="StaticBody2D" parent="Door1"]
+
+[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Door1/StaticBody2D"]
+polygon = PackedVector2Array( -24, 24, 40, -8, 24, -16, -40, 16 )

+ 0 - 53
2d/isometric/tileset_edit.tscn

@@ -1,53 +0,0 @@
-[gd_scene load_steps=2 format=2]
-
-[ext_resource path="res://isotiles.png" type="Texture2D" id=1]
-
-[node name="TilesetEdit" type="Node2D"]
-
-[node name="Base" type="Sprite2D" parent="."]
-texture = ExtResource( 1 )
-region_enabled = true
-region_rect = Rect2(28, 75, 135, 105)
-
-[node name="Base2" type="Sprite2D" parent="."]
-position = Vector2(200, 0)
-texture = ExtResource( 1 )
-region_enabled = true
-region_rect = Rect2(221, 75, 135, 105)
-
-[node name="Wall" type="Sprite2D" parent="."]
-position = Vector2(400, 0)
-texture = ExtResource( 1 )
-offset = Vector2(0, -32)
-region_enabled = true
-region_rect = Rect2(28, 220, 140, 140)
-
-[node name="StaticBody2D" type="StaticBody2D" parent="Wall"]
-
-[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Wall/StaticBody2D"]
-polygon = PackedVector2Array(-64, 0, 0, 32, 64, 0, 0, -32)
-
-[node name="Column" type="Sprite2D" parent="."]
-position = Vector2(600, 0)
-texture = ExtResource( 1 )
-offset = Vector2(0, -32)
-region_enabled = true
-region_rect = Rect2(259, 241, 55, 95)
-
-[node name="StaticBody2D" type="StaticBody2D" parent="Column"]
-
-[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Column/StaticBody2D"]
-position = Vector2(2, 0)
-polygon = PackedVector2Array(-24, 2, -10, 12, 10, 12, 24, 2, 24, -12, 10, -22, -10, -22, -24, -12)
-
-[node name="Door1" type="Sprite2D" parent="."]
-position = Vector2(800, 0)
-texture = ExtResource( 1 )
-offset = Vector2(0, -25)
-region_enabled = true
-region_rect = Rect2(54, 426, 85, 110)
-
-[node name="StaticBody2D" type="StaticBody2D" parent="Door1"]
-
-[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Door1/StaticBody2D"]
-polygon = PackedVector2Array(-24, 24, 40, -8, 24, -16, -40, 16)

+ 0 - 13
2d/isometric/troll.gd

@@ -1,13 +0,0 @@
-extends CharacterBody2D
-
-const MOTION_SPEED = 30 # Pixels/second.
-const FRICTION_FACTOR = 0.89
-
-func _physics_process(_delta):
-	var motion = Input.get_vector("move_left", "move_right", "move_up", "move_down")
-	# Make diagonal movement fit isometric tiles.
-	motion.y /= 2
-	velocity += motion.normalized() * MOTION_SPEED
-	# Apply friction.
-	velocity *= FRICTION_FACTOR
-	move_and_slide()

binární
2d/isometric/troll.png


+ 0 - 27
2d/isometric/troll.tscn

@@ -1,27 +0,0 @@
-[gd_scene load_steps=4 format=3 uid="uid://cvs6nhy4ydg0u"]
-
-[ext_resource type="Script" path="res://troll.gd" id="1"]
-[ext_resource type="Texture2D" uid="uid://b8fv8swublbqq" path="res://troll.png" id="2"]
-
-[sub_resource type="CircleShape2D" id="1"]
-radius = 16.0
-
-[node name="Troll" type="CharacterBody2D"]
-script = ExtResource("1")
-
-[node name="Shadow" type="Sprite2D" parent="."]
-modulate = Color(0, 0, 0, 0.501961)
-position = Vector2(-2, -30)
-scale = Vector2(1, 1)
-skew = 0.139626
-texture = ExtResource("2")
-
-[node name="Sprite2D" type="Sprite2D" parent="."]
-position = Vector2(-6, -30)
-texture = ExtResource("2")
-
-[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
-position = Vector2(0, -7.5)
-shape = SubResource("1")
-
-[node name="Camera2D" type="Camera2D" parent="."]

+ 1 - 1
2d/navigation_astar/README.md

@@ -11,4 +11,4 @@ Check out this demo on the asset library: https://godotengine.org/asset-library/
 
 ## Screenshots
 
-![Screenshot](screenshots/nav_astar.png)
+![Screenshot](screenshots/navigation_astar.webp)

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 27 - 6
2d/navigation_astar/game.tscn


binární
2d/navigation_astar/icon.webp


+ 1 - 1
2d/navigation_astar/icon.webp.import

@@ -2,7 +2,7 @@
 
 importer="texture"
 type="CompressedTexture2D"
-uid="uid://brwp8bimc75uu"
+uid="uid://cbh2ojuhwt3se"
 path="res://.godot/imported/icon.webp-e94f9a68b0f625a567a797079e4d325f.ctex"
 metadata={
 "vram_texture": false

+ 7 - 5
2d/navigation_astar/pathfind_astar.gd

@@ -2,9 +2,9 @@ extends TileMap
 
 enum Tile { OBSTACLE, START_POINT, END_POINT }
 
-const CELL_SIZE = Vector2(64, 64)
+const CELL_SIZE = Vector2i(64, 64)
 const BASE_LINE_WIDTH = 3.0
-const DRAW_COLOR = Color.WHITE
+const DRAW_COLOR = Color.WHITE * Color(1, 1, 1, 0.5)
 
 # The object for pathfinding on 2D grids.
 var _astar = AStarGrid2D.new()
@@ -14,7 +14,9 @@ var _end_point = Vector2i()
 var _path = PackedVector2Array()
 
 func _ready():
-	_astar.region = get_used_rect()
+	# Region should match the size of the playable area plus one (in tiles).
+	# In this demo, the playable area is 17×9 tiles, so the rect size is 18×10.
+	_astar.region = Rect2i(0, 0, 18, 10)
 	_astar.cell_size = CELL_SIZE
 	_astar.offset = CELL_SIZE * 0.5
 	_astar.default_compute_heuristic = AStarGrid2D.HEURISTIC_MANHATTAN
@@ -69,8 +71,8 @@ func find_path(local_start_point, local_end_point):
 	_path = _astar.get_point_path(_start_point, _end_point)
 
 	if not _path.is_empty():
-		set_cell(0, _start_point, Tile.START_POINT, Vector2i())
-		set_cell(0, _end_point, Tile.END_POINT, Vector2i())
+		set_cell(0, _start_point, 0, Vector2i(Tile.START_POINT, 0))
+		set_cell(0, _end_point, 0, Vector2i(Tile.END_POINT, 0))
 
 	# Redraw the lines and circles from the start to the end point.
 	queue_redraw()

+ 7 - 4
2d/navigation_astar/project.godot

@@ -25,17 +25,20 @@ window/stretch/aspect="expand"
 
 [input]
 
-move_to={
+teleport_to={
 "deadzone": 0.5,
-"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":1,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":1,"canceled":false,"pressed":true,"double_click":false,"script":null)
+"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"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":2,"canceled":false,"pressed":false,"double_click":false,"script":null)
 ]
 }
-teleport_to={
+move_to={
 "deadzone": 0.5,
-"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":true,"ctrl_pressed":false,"meta_pressed":false,"button_mask":1,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":1,"canceled":false,"pressed":true,"double_click":false,"script":null)
+"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"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,"canceled":false,"pressed":false,"double_click":false,"script":null)
 ]
 }
 
 [rendering]
 
 renderer/rendering_method="gl_compatibility"
+environment/defaults/default_clear_color=Color(0, 0.0627451, 0.247059, 1)
+quality/driver/driver_name="GLES2"
+vram_compression/import_etc=true

binární
2d/navigation_astar/screenshots/nav_astar.png


binární
2d/navigation_astar/screenshots/navigation_astar.webp


binární
2d/navigation_astar/sprites/character.png


+ 1 - 1
2d/navigation_astar/sprites/character.png.import

@@ -2,7 +2,7 @@
 
 importer="texture"
 type="CompressedTexture2D"
-uid="uid://bfedhloqga3jl"
+uid="uid://vsempfpeu7wr"
 path="res://.godot/imported/character.png-eb70ac48a5acf508c4b7740ea4ac4fae.ctex"
 metadata={
 "vram_texture": false

binární
2d/navigation_astar/sprites/obstacle.png


binární
2d/navigation_astar/sprites/path_end.png


binární
2d/navigation_astar/sprites/path_start.png


+ 0 - 34
2d/navigation_astar/sprites/path_start.png.import

@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://c57g2ow4p5dl3"
-path="res://.godot/imported/path_start.png-475bd0b469629aa8779d506c5134e5c2.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://sprites/path_start.png"
-dest_files=["res://.godot/imported/path_start.png-475bd0b469629aa8779d506c5134e5c2.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1

binární
2d/navigation_astar/sprites/space.png


+ 4 - 4
2d/role_playing_game/icon.webp.import → 2d/navigation_astar/sprites/space.png.import

@@ -2,16 +2,16 @@
 
 importer="texture"
 type="CompressedTexture2D"
-uid="uid://brwp8bimc75uu"
-path="res://.godot/imported/icon.webp-e94f9a68b0f625a567a797079e4d325f.ctex"
+uid="uid://baj4xukvf568b"
+path="res://.godot/imported/space.png-97c58c64ad84df3792f6a98aa7f4b875.ctex"
 metadata={
 "vram_texture": false
 }
 
 [deps]
 
-source_file="res://icon.webp"
-dest_files=["res://.godot/imported/icon.webp-e94f9a68b0f625a567a797079e4d325f.ctex"]
+source_file="res://sprites/space.png"
+dest_files=["res://.godot/imported/space.png-97c58c64ad84df3792f6a98aa7f4b875.ctex"]
 
 [params]
 

binární
2d/navigation_astar/sprites/sparkle.png


+ 34 - 0
2d/navigation_astar/sprites/sparkle.png.import

@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bjsmfha28ro00"
+path="res://.godot/imported/sparkle.png-3b8036349814d91f8265031bd47464fc.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://sprites/sparkle.png"
+dest_files=["res://.godot/imported/sparkle.png-3b8036349814d91f8265031bd47464fc.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1

+ 0 - 26
2d/navigation_astar/tileset.tres

@@ -1,26 +0,0 @@
-[gd_resource type="TileSet" load_steps=7 format=3 uid="uid://y111l4w24pml"]
-
-[ext_resource type="Texture2D" uid="uid://bo5d4p1el52ir" path="res://sprites/obstacle.png" id="1"]
-[ext_resource type="Texture2D" uid="uid://c57g2ow4p5dl3" path="res://sprites/path_start.png" id="2"]
-[ext_resource type="Texture2D" uid="uid://cy1dwnkhyigme" path="res://sprites/path_end.png" id="3"]
-
-[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_tol7a"]
-texture = ExtResource("1")
-texture_region_size = Vector2i(64, 64)
-0:0/0 = 0
-
-[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_gx51g"]
-texture = ExtResource("2")
-texture_region_size = Vector2i(64, 64)
-0:0/0 = 0
-
-[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_2sont"]
-texture = ExtResource("3")
-texture_region_size = Vector2i(64, 64)
-0:0/0 = 0
-
-[resource]
-tile_size = Vector2i(64, 64)
-sources/0 = SubResource("TileSetAtlasSource_tol7a")
-sources/1 = SubResource("TileSetAtlasSource_gx51g")
-sources/2 = SubResource("TileSetAtlasSource_2sont")

+ 15 - 0
2d/navigation_astar/tileset/tileset.tres

@@ -0,0 +1,15 @@
+[gd_resource type="TileSet" load_steps=3 format=3 uid="uid://f3wmg8detyai"]
+
+[ext_resource type="Texture2D" uid="uid://c11typow28mkc" path="res://tileset/tilesheet.png" id="1_th3tw"]
+
+[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_btc3f"]
+texture = ExtResource("1_th3tw")
+texture_region_size = Vector2i(64, 64)
+0:0/0 = 0
+1:0/0 = 0
+2:0/0 = 0
+
+[resource]
+tile_size = Vector2i(64, 64)
+sources/0 = SubResource("TileSetAtlasSource_btc3f")
+tile_proxies/coords_level = [[0, Vector2i(0, 0)], [4, Vector2i(0, 0)], [2, Vector2i(0, 0)], [4, Vector2i(1, 0)], [3, Vector2i(0, 0)], [4, Vector2i(2, 0)]]

binární
2d/navigation_astar/tileset/tilesheet.png


+ 34 - 0
2d/navigation_astar/tileset/tilesheet.png.import

@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c11typow28mkc"
+path="res://.godot/imported/tilesheet.png-da5dd43877b555026e31608aeb142d6c.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://tileset/tilesheet.png"
+dest_files=["res://.godot/imported/tilesheet.png-da5dd43877b555026e31608aeb142d6c.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1

+ 19 - 16
2d/platformer/README.md

@@ -1,42 +1,45 @@
 # 2D Platformer
 
-This demo is a pixel art 2D platformer with single-player
-and two player splitscreen multiplayer.
+This demo is a pixel art 2D platformer with graphics and sound.
 
-It demonstrates how to code characters and physics-based objects
+It shows you how to code characters and physics-based objects
 in a real game context. This is a relatively complete demo
 where the player can jump, walk on slopes, fire bullets,
-interact with enemies, and collect items. It contains one
-level. The player is invincible, unlike the enemies.
+interact with enemies, and more. It contains one closed
+level, and the player is invincible, unlike the enemies.
+
+You will find most of the demo’s content in the `level.tscn` scene.
+You can open it from the default `game.tscn` scene, or double
+click on `level.tscn` in the `src/level/` directory.
+
+We invite you to open the demo's GDScript files in the editor as
+they contain a lot of comments that explain how each class works.
 
 Language: GDScript
 
-Renderer: Forward Plus
+Renderer: GLES 2
 
 Check out this demo on the asset library: https://godotengine.org/asset-library/asset/120
 
 ## Features
 
-- Side-scrolling player controller using [`CharacterBody2D`](https://docs.godotengine.org/en/latest/classes/class_characterbody2d.html).
-	- Can walk smoothly up and down slopes.
-	- Can shoot, including while jumping.
-	- Has a double jump that provides a horizontal momentum boost.
+- Side-scrolling player controller using [`KinematicBody2D`](https://docs.godotengine.org/en/latest/classes/class_kinematicbody2d.html).
+    - Can walk on and snap to slopes.
+    - Can shoot, including while jumping.
 - Enemies that crawl on the floor and change direction when they encounter an obstacle.
 - Camera that stays within the level’s bounds.
-- Keyboard and gamepad control support.
+- Supports keyboard and gamepad controls.
 - Platforms that can move in any direction.
 - Gun that shoots bullets with rigid body (natural) physics.
 - Collectible coins.
-- Pausing and a pause menu.
+- Pause and pause menu.
 - Pixel art visuals.
 - Sound effects and music.
 
 ## Screenshots
 
-![Player shooting in the direction of an enemy](screenshots/shoot.webp)
-
-![The entire level layout viewed in the editor](screenshots/layout.webp)
+![2D Platformer](screenshots/platformer.webp)
 
 ## Music
 
-"Pompy" by Hubert Lamontagne (madbr) https://soundcloud.com/madbr/pompy
+[*Pompy*](https://soundcloud.com/madbr/pompy) by Hubert Lamontagne (madbr)

+ 4 - 0
2d/platformer/default_bus_layout.tres

@@ -0,0 +1,4 @@
+[gd_resource type="AudioBusLayout" format=3 uid="uid://cxpxlqmmdcbk2"]
+
+[resource]
+bus/0/volume_db = -11.9576

+ 3 - 3
2d/platformer/enemy/enemy.gd

@@ -6,7 +6,7 @@ enum State {
 	DEAD,
 }
 
-const WALK_SPEED = 100.0
+const WALK_SPEED = 22.0
 
 var _state := State.WALKING
 
@@ -33,9 +33,9 @@ func _physics_process(delta: float) -> void:
 	move_and_slide()
 
 	if velocity.x > 0.0:
-		sprite.scale.x = 1.0
+		sprite.scale.x = 0.8
 	elif velocity.x < 0.0:
-		sprite.scale.x = -1.0
+		sprite.scale.x = -0.8
 
 	var animation := get_new_animation()
 	if animation != animation_player.current_animation:

+ 63 - 51
2d/platformer/enemy/enemy.tscn

@@ -1,26 +1,26 @@
-[gd_scene load_steps=15 format=3 uid="uid://bd478yrtijbfn"]
+[gd_scene load_steps=15 format=3 uid="uid://6mtip3ruyn"]
 
-[ext_resource type="Texture2D" uid="uid://c2aisfmq85suf" path="res://player/bullet.webp" id="1"]
-[ext_resource type="AudioStream" uid="uid://bbxjxs8sms61b" path="res://enemy/explode.wav" id="2"]
-[ext_resource type="AudioStream" uid="uid://brtn51vs7jaet" path="res://enemy/hit.wav" id="3"]
-[ext_resource type="Texture2D" uid="uid://cdy6gikv8wka7" path="res://enemy/enemy.webp" id="4"]
+[ext_resource type="Texture2D" uid="uid://coj0d33vyyqx1" path="res://player/bullet.webp" id="1"]
+[ext_resource type="AudioStream" uid="uid://duwm7i44o75o2" path="res://enemy/explode.wav" id="2"]
+[ext_resource type="AudioStream" uid="uid://dm7wsawmylc7b" path="res://enemy/hit.wav" id="3"]
+[ext_resource type="Texture2D" uid="uid://bjjywmvba0sve" path="res://enemy/enemy.webp" id="4"]
 [ext_resource type="Script" path="res://enemy/enemy.gd" id="5"]
 
 [sub_resource type="CanvasItemMaterial" id="1"]
 
-[sub_resource type="Animation" id="Animation_67t2c"]
+[sub_resource type="Animation" id="8"]
 length = 0.001
 tracks/0/type = "value"
 tracks/0/imported = false
 tracks/0/enabled = true
-tracks/0/path = NodePath(".:collision_layer")
+tracks/0/path = NodePath("Explosion:scale_amount")
 tracks/0/interp = 1
 tracks/0/loop_wrap = true
 tracks/0/keys = {
 "times": PackedFloat32Array(0),
 "transitions": PackedFloat32Array(1),
-"update": 1,
-"values": [2]
+"update": 0,
+"values": [4.0]
 }
 tracks/1/type = "value"
 tracks/1/imported = false
@@ -31,44 +31,32 @@ tracks/1/loop_wrap = true
 tracks/1/keys = {
 "times": PackedFloat32Array(0),
 "transitions": PackedFloat32Array(1),
-"update": 1,
+"update": 0,
 "values": [0]
 }
 tracks/2/type = "value"
 tracks/2/imported = false
 tracks/2/enabled = true
-tracks/2/path = NodePath("Sprite2D:position")
+tracks/2/path = NodePath("Explosion:scale_amount_max")
 tracks/2/interp = 1
 tracks/2/loop_wrap = true
 tracks/2/keys = {
 "times": PackedFloat32Array(0),
 "transitions": PackedFloat32Array(1),
 "update": 0,
-"values": [Vector2(0, 0)]
+"values": [1.0]
 }
 tracks/3/type = "value"
 tracks/3/imported = false
 tracks/3/enabled = true
-tracks/3/path = NodePath("Sprite2D:rotation")
+tracks/3/path = NodePath(".:collision_layer")
 tracks/3/interp = 1
 tracks/3/loop_wrap = true
 tracks/3/keys = {
 "times": PackedFloat32Array(0),
 "transitions": PackedFloat32Array(1),
-"update": 0,
-"values": [0.0]
-}
-tracks/4/type = "value"
-tracks/4/imported = false
-tracks/4/enabled = true
-tracks/4/path = NodePath("Sprite2D:self_modulate")
-tracks/4/interp = 1
-tracks/4/loop_wrap = true
-tracks/4/keys = {
-"times": PackedFloat32Array(0),
-"transitions": PackedFloat32Array(1),
-"update": 0,
-"values": [Color(1, 1, 1, 1)]
+"update": 1,
+"values": [2]
 }
 
 [sub_resource type="Animation" id="2"]
@@ -105,7 +93,7 @@ tracks/2/path = NodePath("Sprite2D:self_modulate")
 tracks/2/interp = 1
 tracks/2/loop_wrap = true
 tracks/2/keys = {
-"times": PackedFloat32Array(0, 0.9, 1.3),
+"times": PackedFloat32Array(0, 0.5, 1.1),
 "transitions": PackedFloat32Array(1, 1, 1),
 "update": 0,
 "values": [Color(1, 1, 1, 1), Color(1, 1, 1, 1), Color(1, 1, 1, 0)]
@@ -117,7 +105,7 @@ tracks/3/path = NodePath("Explosion:emitting")
 tracks/3/interp = 1
 tracks/3/loop_wrap = true
 tracks/3/keys = {
-"times": PackedFloat32Array(0, 1),
+"times": PackedFloat32Array(0, 0.6),
 "transitions": PackedFloat32Array(1, 1),
 "update": 1,
 "values": [false, true]
@@ -141,7 +129,7 @@ tracks/5/path = NodePath("Explode:playing")
 tracks/5/interp = 1
 tracks/5/loop_wrap = true
 tracks/5/keys = {
-"times": PackedFloat32Array(0.8),
+"times": PackedFloat32Array(0.6),
 "transitions": PackedFloat32Array(1),
 "update": 1,
 "values": [true]
@@ -184,9 +172,34 @@ tracks/8/keys = {
 "update": 0,
 "values": [Vector2(0, 0), Vector2(0, -32), Vector2(0, 0)]
 }
+tracks/9/type = "value"
+tracks/9/imported = false
+tracks/9/enabled = true
+tracks/9/path = NodePath("Explosion:scale_amount_min")
+tracks/9/interp = 1
+tracks/9/loop_wrap = true
+tracks/9/keys = {
+"times": PackedFloat32Array(0.6, 1),
+"transitions": PackedFloat32Array(1, 1),
+"update": 0,
+"values": [1.0, 4.0]
+}
+tracks/10/type = "value"
+tracks/10/imported = false
+tracks/10/enabled = true
+tracks/10/path = NodePath("Explosion:scale_amount_max")
+tracks/10/interp = 1
+tracks/10/loop_wrap = true
+tracks/10/keys = {
+"times": PackedFloat32Array(0.6, 1),
+"transitions": PackedFloat32Array(1, 1),
+"update": 0,
+"values": [1.0, 4.0]
+}
 
 [sub_resource type="Animation" id="3"]
-length = 6.75
+length = 3.0
+loop_mode = 1
 step = 0.25
 tracks/0/type = "value"
 tracks/0/imported = false
@@ -195,15 +208,14 @@ tracks/0/path = NodePath("Sprite2D:frame")
 tracks/0/interp = 1
 tracks/0/loop_wrap = true
 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.333, 0.666, 0.999, 1.332, 1.665, 1.998, 2.331, 2.664, 2.997),
 "transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
 "update": 1,
 "values": [5, 6, 5, 6, 5, 6, 7, 6, 7, 5]
 }
 
 [sub_resource type="Animation" id="4"]
-length = 1.25
-step = 0.25
+loop_mode = 1
 tracks/0/type = "value"
 tracks/0/imported = false
 tracks/0/enabled = true
@@ -211,23 +223,23 @@ tracks/0/path = NodePath("Sprite2D:frame")
 tracks/0/interp = 1
 tracks/0/loop_wrap = true
 tracks/0/keys = {
-"times": PackedFloat32Array(0, 0.25, 0.5, 0.75, 1, 1.25),
-"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1),
+"times": PackedFloat32Array(0, 0.062475, 0.12495, 0.187425, 0.2499, 0.312375, 0.37485, 0.437325, 0.4998, 0.562275, 0.62475, 0.687225, 0.7497, 0.812175, 0.87465, 0.937125),
+"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
 "update": 1,
-"values": [0, 1, 2, 3, 4, 0]
+"values": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
 }
 
-[sub_resource type="AnimationLibrary" id="AnimationLibrary_nnb1f"]
+[sub_resource type="AnimationLibrary" id="AnimationLibrary_0kjfc"]
 _data = {
-"RESET": SubResource("Animation_67t2c"),
+"RESET": SubResource("8"),
 "destroy": SubResource("2"),
 "idle": SubResource("3"),
 "walk": SubResource("4")
 }
 
 [sub_resource type="CapsuleShape2D" id="5"]
-radius = 8.0
-height = 22.0
+radius = 18.0
+height = 50.0
 
 [sub_resource type="CanvasItemMaterial" id="6"]
 blend_mode = 1
@@ -238,31 +250,35 @@ colors = PackedColorArray(1, 1, 1, 1, 0, 0, 0, 1)
 
 [node name="Enemy" type="CharacterBody2D"]
 collision_layer = 2
-collision_mask = 26
-collision_priority = 2.0
+collision_mask = 24
 script = ExtResource("5")
 
 [node name="PlatformDetector" type="RayCast2D" parent="."]
 position = Vector2(0, 6)
+target_position = Vector2(0, 8)
 collision_mask = 8
 
 [node name="FloorDetectorLeft" type="RayCast2D" parent="."]
 position = Vector2(-15, -4)
+target_position = Vector2(0, 35)
 collision_mask = 24
 
 [node name="FloorDetectorRight" type="RayCast2D" parent="."]
 position = Vector2(15.5, -3)
+target_position = Vector2(0, 35)
 collision_mask = 24
 
 [node name="Sprite2D" type="Sprite2D" parent="."]
 material = SubResource("1")
+scale = Vector2(0.8, 0.8)
 texture = ExtResource("4")
 flip_h = true
 hframes = 8
+vframes = 2
 
 [node name="AnimationPlayer" type="AnimationPlayer" parent="."]
 libraries = {
-"": SubResource("AnimationLibrary_nnb1f")
+"": SubResource("AnimationLibrary_0kjfc")
 }
 
 [node name="CollisionShape2D" type="CollisionShape2D" parent="."]
@@ -277,17 +293,13 @@ amount = 32
 lifetime = 0.5
 one_shot = true
 speed_scale = 1.2
-explosiveness = 0.76
+explosiveness = 0.7
 draw_order = 215832976
 texture = ExtResource("1")
 emission_shape = 1
-emission_sphere_radius = 8.0
+emission_sphere_radius = 16.0
 spread = 180.0
-gravity = Vector2(0, 250)
-initial_velocity_min = 25.0
-initial_velocity_max = 80.0
-angular_velocity_max = 45.0
-scale_amount_max = 1.2
+gravity = Vector2(0, -250)
 color_ramp = SubResource("7")
 
 [node name="Hit" type="AudioStreamPlayer2D" parent="."]

binární
2d/platformer/enemy/enemy.webp


+ 1 - 1
2d/platformer/enemy/enemy.webp.import

@@ -2,7 +2,7 @@
 
 importer="texture"
 type="CompressedTexture2D"
-uid="uid://cdy6gikv8wka7"
+uid="uid://bjjywmvba0sve"
 path="res://.godot/imported/enemy.webp-c5e00d5c5f64233c41f70dc392999636.ctex"
 metadata={
 "vram_texture": false

+ 1 - 1
2d/platformer/enemy/explode.wav.import

@@ -2,7 +2,7 @@
 
 importer="wav"
 type="AudioStreamWAV"
-uid="uid://bbxjxs8sms61b"
+uid="uid://duwm7i44o75o2"
 path="res://.godot/imported/explode.wav-2389d0cf62710ef336bf397194eae82e.sample"
 
 [deps]

+ 1 - 1
2d/platformer/enemy/hit.wav.import

@@ -2,7 +2,7 @@
 
 importer="wav"
 type="AudioStreamWAV"
-uid="uid://brtn51vs7jaet"
+uid="uid://dm7wsawmylc7b"
 path="res://.godot/imported/hit.wav-02ea2b331eef4f150ed1e5cb9477122b.sample"
 
 [deps]

+ 3 - 6
2d/platformer/game_singleplayer.tscn

@@ -1,10 +1,9 @@
-[gd_scene load_steps=6 format=3 uid="uid://bf3wnwihk7ymg"]
+[gd_scene load_steps=5 format=3 uid="uid://bf3wnwihk7ymg"]
 
 [ext_resource type="Script" path="res://game.gd" id="2"]
-[ext_resource type="PackedScene" uid="uid://dr2p70jo7e4kn" path="res://level/level.tscn" id="3"]
-[ext_resource type="PackedScene" uid="uid://d0ni64ucb3ym2" path="res://player/player.tscn" id="4"]
+[ext_resource type="PackedScene" uid="uid://ctgumjaytuoch" path="res://level/level.tscn" id="3"]
+[ext_resource type="PackedScene" uid="uid://vh7pmputa7r3" path="res://player/player.tscn" id="4"]
 [ext_resource type="PackedScene" uid="uid://c7ai4bigaryci" path="res://gui/pause_menu_singleplayer.tscn" id="4_x6l06"]
-[ext_resource type="PackedScene" uid="uid://do7htx4sqmcnh" path="res://music.tscn" id="5_rkna2"]
 
 [node name="Game" type="Node"]
 process_mode = 3
@@ -20,6 +19,4 @@ layer = 100
 
 [node name="PauseMenu" parent="InterfaceLayer" instance=ExtResource("4_x6l06")]
 
-[node name="Music" parent="." instance=ExtResource("5_rkna2")]
-
 [connection signal="coin_collected" from="Level/Player" to="InterfaceLayer/PauseMenu" method="_on_coin_collected"]

+ 16 - 9
2d/platformer/game_splitscreen.tscn

@@ -1,11 +1,16 @@
-[gd_scene load_steps=7 format=3 uid="uid://2elur2m0il32"]
+[gd_scene load_steps=8 format=3 uid="uid://2elur2m0il32"]
 
 [ext_resource type="Script" path="res://game_splitscreen.gd" id="1_60qgt"]
 [ext_resource type="PackedScene" uid="uid://dggactv0aho4p" path="res://gui/pause_menu_splitscreen.tscn" id="2_xkexm"]
-[ext_resource type="PackedScene" uid="uid://dr2p70jo7e4kn" path="res://level/level.tscn" id="3_e0nyr"]
-[ext_resource type="PackedScene" uid="uid://d0ni64ucb3ym2" path="res://player/player.tscn" id="4_8j0va"]
-[ext_resource type="PackedScene" uid="uid://bkyw3e13rupar" path="res://level/parallax_background.tscn" id="5_47vt4"]
-[ext_resource type="PackedScene" uid="uid://do7htx4sqmcnh" path="res://music.tscn" id="6_q2yet"]
+[ext_resource type="PackedScene" uid="uid://ctgumjaytuoch" path="res://level/level.tscn" id="3_e0nyr"]
+[ext_resource type="PackedScene" uid="uid://vh7pmputa7r3" path="res://player/player.tscn" id="4_8j0va"]
+[ext_resource type="PackedScene" uid="uid://cw6nldo3rjyyq" path="res://level/background/parallax_background.tscn" id="5_47vt4"]
+
+[sub_resource type="Gradient" id="Gradient_77njx"]
+
+[sub_resource type="GradientTexture1D" id="GradientTexture1D_5sxld"]
+gradient = SubResource("Gradient_77njx")
+width = 2
 
 [node name="GameSplitscreen" type="Node"]
 process_mode = 3
@@ -27,6 +32,8 @@ anchor_right = 1.0
 anchor_bottom = 1.0
 grow_horizontal = 2
 grow_vertical = 2
+theme_override_constants/separation = 0
+theme_override_icons/grabber = SubResource("GradientTexture1D_5sxld")
 dragger_visibility = 1
 
 [node name="ViewportContainer1" type="SubViewportContainer" parent="Black/SplitContainer"]
@@ -40,18 +47,20 @@ unique_name_in_owner = true
 handle_input_locally = false
 canvas_item_default_texture_filter = 0
 audio_listener_enable_2d = true
-size = Vector2i(394, 480)
+size = Vector2i(399, 480)
 render_target_update_mode = 4
 
 [node name="Level" parent="Black/SplitContainer/ViewportContainer1/Viewport1" instance=ExtResource("3_e0nyr")]
 
 [node name="Player1" parent="Black/SplitContainer/ViewportContainer1/Viewport1" instance=ExtResource("4_8j0va")]
 unique_name_in_owner = true
+modulate = Color(1, 1.5, 2.5, 1)
 position = Vector2(90, 546)
 action_suffix = "_p1"
 
 [node name="Player2" parent="Black/SplitContainer/ViewportContainer1/Viewport1" instance=ExtResource("4_8j0va")]
 unique_name_in_owner = true
+modulate = Color(3, 1, 1, 1)
 position = Vector2(120, 546)
 action_suffix = "_p2"
 
@@ -66,7 +75,7 @@ unique_name_in_owner = true
 handle_input_locally = false
 canvas_item_default_texture_filter = 0
 audio_listener_enable_2d = true
-size = Vector2i(394, 480)
+size = Vector2i(399, 480)
 render_target_update_mode = 4
 
 [node name="ParallaxBackground" parent="Black/SplitContainer/ViewportContainer2/Viewport2" instance=ExtResource("5_47vt4")]
@@ -76,7 +85,5 @@ layer = 100
 
 [node name="PauseMenu" parent="InterfaceLayer" instance=ExtResource("2_xkexm")]
 
-[node name="Music" parent="." instance=ExtResource("6_q2yet")]
-
 [connection signal="coin_collected" from="Black/SplitContainer/ViewportContainer1/Viewport1/Player1" to="InterfaceLayer/PauseMenu" method="_on_coin_collected"]
 [connection signal="coin_collected" from="Black/SplitContainer/ViewportContainer1/Viewport1/Player2" to="InterfaceLayer/PauseMenu" method="_on_coin_collected"]

+ 81 - 24
2d/platformer/gui/coins_counter.tscn

@@ -1,49 +1,99 @@
-[gd_scene load_steps=9 format=3 uid="uid://bsyqg6eh3wl5i"]
+[gd_scene load_steps=17 format=3 uid="uid://bsyqg6eh3wl5i"]
 
-[ext_resource type="Theme" uid="uid://da4noqsij73it" path="res://gui/theme.tres" id="1"]
-[ext_resource type="Texture2D" uid="uid://l42us5qso8v4" path="res://level/coin.webp" id="2"]
+[ext_resource type="Theme" uid="uid://da4noqsij73it" path="res://gui/theme.tres" id="1_mctnl"]
+[ext_resource type="Texture2D" uid="uid://cj2absxg54f75" path="res://level/coin.webp" id="2"]
 [ext_resource type="Script" path="res://gui/coins_counter.gd" id="3"]
 
-[sub_resource type="AtlasTexture" id="2"]
+[sub_resource type="AtlasTexture" id="AtlasTexture_0ik14"]
 atlas = ExtResource("2")
-region = Rect2(0, 0, 8, 8)
+region = Rect2(0, 0, 32, 32)
 
-[sub_resource type="AtlasTexture" id="3"]
+[sub_resource type="AtlasTexture" id="AtlasTexture_yoomt"]
 atlas = ExtResource("2")
-region = Rect2(8, 0, 8, 8)
+region = Rect2(32, 0, 32, 32)
 
-[sub_resource type="AtlasTexture" id="4"]
+[sub_resource type="AtlasTexture" id="AtlasTexture_8eq38"]
 atlas = ExtResource("2")
-region = Rect2(16, 0, 8, 8)
+region = Rect2(64, 0, 32, 32)
 
-[sub_resource type="AtlasTexture" id="5"]
+[sub_resource type="AtlasTexture" id="AtlasTexture_2j420"]
 atlas = ExtResource("2")
-region = Rect2(24, 0, 8, 8)
+region = Rect2(96, 0, 32, 32)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_5fk3k"]
+atlas = ExtResource("2")
+region = Rect2(128, 0, 32, 32)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_7u8xx"]
+atlas = ExtResource("2")
+region = Rect2(160, 0, 32, 32)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_8cxbx"]
+atlas = ExtResource("2")
+region = Rect2(192, 0, 32, 32)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_0rdkm"]
+atlas = ExtResource("2")
+region = Rect2(224, 0, 32, 32)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_6q04a"]
+atlas = ExtResource("2")
+region = Rect2(0, 32, 32, 32)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_tbg33"]
+atlas = ExtResource("2")
+region = Rect2(32, 32, 32, 32)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_tpmon"]
+atlas = ExtResource("2")
+region = Rect2(64, 32, 32, 32)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_hsrt4"]
+atlas = ExtResource("2")
+region = Rect2(96, 32, 32, 32)
 
 [sub_resource type="SpriteFrames" id="6"]
 animations = [{
 "frames": [{
 "duration": 1.0,
-"texture": SubResource("2")
+"texture": SubResource("AtlasTexture_0ik14")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_yoomt")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_8eq38")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_2j420")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_5fk3k")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_7u8xx")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_8cxbx")
 }, {
 "duration": 1.0,
-"texture": SubResource("3")
+"texture": SubResource("AtlasTexture_0rdkm")
 }, {
 "duration": 1.0,
-"texture": SubResource("4")
+"texture": SubResource("AtlasTexture_6q04a")
 }, {
 "duration": 1.0,
-"texture": SubResource("5")
+"texture": SubResource("AtlasTexture_tbg33")
 }, {
 "duration": 1.0,
-"texture": SubResource("4")
+"texture": SubResource("AtlasTexture_tpmon")
 }, {
 "duration": 1.0,
-"texture": SubResource("3")
+"texture": SubResource("AtlasTexture_hsrt4")
 }],
 "loop": true,
 "name": &"coin_spinning",
-"speed": 6.5
+"speed": 12.0
 }]
 
 [node name="CoinsCounter" type="Panel"]
@@ -51,20 +101,27 @@ offset_left = 5.0
 offset_top = 5.0
 offset_right = 100.0
 offset_bottom = 45.0
-theme = ExtResource("1")
+theme = ExtResource("1_mctnl")
 script = ExtResource("3")
 
 [node name="Label" type="Label" parent="."]
-layout_mode = 0
+layout_mode = 1
+anchors_preset = 15
 anchor_right = 1.0
 anchor_bottom = 1.0
-offset_right = -8.0
-text = "100"
+offset_left = -1.0
+offset_top = -3.0
+offset_right = -9.0
+grow_horizontal = 2
+grow_vertical = 2
+theme_override_colors/font_outline_color = Color(0, 0, 0, 1)
+theme_override_constants/outline_size = 8
+theme_override_font_sizes/font_size = 32
+text = "99"
 horizontal_alignment = 2
 vertical_alignment = 1
 
 [node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."]
-position = Vector2(21.5, 22.5)
-scale = Vector2(4.375, 4.375)
+position = Vector2(23.5, 24.5)
 sprite_frames = SubResource("6")
 animation = &"coin_spinning"

+ 5 - 0
2d/platformer/gui/kenney_mini_square.tres

@@ -0,0 +1,5 @@
+[gd_resource type="FontFile" format=2]
+
+[resource]
+antialiased = false
+font_path = "res://assets/theme/fonts/kenney_mini_square.ttf"

+ 1 - 1
2d/platformer/gui/kenney_mini_square.ttf.import

@@ -2,7 +2,7 @@
 
 importer="font_data_dynamic"
 type="FontFile"
-uid="uid://bk80b6owsrioj"
+uid="uid://wqrno8lackrm"
 path="res://.godot/imported/kenney_mini_square.ttf-14b0a28a89225c31efd7626f5228f467.fontdata"
 
 [deps]

+ 1 - 1
2d/platformer/gui/theme.tres

@@ -1,6 +1,6 @@
 [gd_resource type="Theme" load_steps=7 format=3 uid="uid://da4noqsij73it"]
 
-[ext_resource type="FontFile" uid="uid://bk80b6owsrioj" path="res://gui/kenney_mini_square.ttf" id="1_f0sjs"]
+[ext_resource type="FontFile" uid="uid://wqrno8lackrm" path="res://gui/kenney_mini_square.ttf" id="1_f0sjs"]
 
 [sub_resource type="StyleBoxFlat" id="1"]
 content_margin_left = 6.0

Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů