浏览代码

Remake art assets of the 2D platformer demo

valentinas 2 年之前
父节点
当前提交
c17d803a1b
共有 78 个文件被更改,包括 1430 次插入599 次删除
  1. 二进制
      2d/platformer/assets/art/background/cloud_1.png
  2. 二进制
      2d/platformer/assets/art/background/cloud_2.png
  3. 二进制
      2d/platformer/assets/art/background/cloud_3.png
  4. 二进制
      2d/platformer/assets/art/background/distant_platforms_1.png
  5. 二进制
      2d/platformer/assets/art/background/distant_platforms_2.png
  6. 二进制
      2d/platformer/assets/art/background/sky.png
  7. 二进制
      2d/platformer/assets/art/coin/coin.png
  8. 二进制
      2d/platformer/assets/art/enemy/enemy.png
  9. 二进制
      2d/platformer/assets/art/platforms/moving_platform.png
  10. 二进制
      2d/platformer/assets/art/platforms/one_way_platform.png
  11. 二进制
      2d/platformer/assets/art/player/bullet/bullet.png
  12. 二进制
      2d/platformer/assets/art/player/robot.png
  13. 3 3
      2d/platformer/assets/art/player/robot.png.import
  14. 二进制
      2d/platformer/assets/art/player/robot_demo.png
  15. 二进制
      2d/platformer/assets/art/props/bush_1.png
  16. 35 0
      2d/platformer/assets/art/props/bush_1.png.import
  17. 二进制
      2d/platformer/assets/art/props/fern_1.png
  18. 35 0
      2d/platformer/assets/art/props/fern_1.png.import
  19. 二进制
      2d/platformer/assets/art/props/flower_1.png
  20. 35 0
      2d/platformer/assets/art/props/flower_1.png.import
  21. 二进制
      2d/platformer/assets/art/props/grass_1.png
  22. 35 0
      2d/platformer/assets/art/props/grass_1.png.import
  23. 二进制
      2d/platformer/assets/art/props/grass_2.png
  24. 35 0
      2d/platformer/assets/art/props/grass_2.png.import
  25. 二进制
      2d/platformer/assets/art/props/grass_3.png
  26. 35 0
      2d/platformer/assets/art/props/grass_3.png.import
  27. 二进制
      2d/platformer/assets/art/props/ground_flowers_1.png
  28. 35 0
      2d/platformer/assets/art/props/ground_flowers_1.png.import
  29. 二进制
      2d/platformer/assets/art/props/rock_1.png
  30. 35 0
      2d/platformer/assets/art/props/rock_1.png.import
  31. 二进制
      2d/platformer/assets/art/props/tree_1.png
  32. 35 0
      2d/platformer/assets/art/props/tree_1.png.import
  33. 二进制
      2d/platformer/assets/art/props/tree_2.png
  34. 35 0
      2d/platformer/assets/art/props/tree_2.png.import
  35. 二进制
      2d/platformer/assets/art/props/vine_1.png
  36. 35 0
      2d/platformer/assets/art/props/vine_1.png.import
  37. 二进制
      2d/platformer/assets/art/props/vine_2.png
  38. 35 0
      2d/platformer/assets/art/props/vine_2.png.import
  39. 二进制
      2d/platformer/assets/art/tileset/tiles_demo.png
  40. 352 232
      2d/platformer/assets/art/tileset/tileset.tres
  41. 二进制
      2d/platformer/assets/art/ui/touch_button_fire.png
  42. 二进制
      2d/platformer/assets/art/ui/touch_button_jump.png
  43. 二进制
      2d/platformer/assets/art/ui/touch_button_left.png
  44. 二进制
      2d/platformer/assets/art/ui/touch_button_right.png
  45. 3 1
      2d/platformer/assets/audio/sfx/coin_pickup.wav.import
  46. 3 1
      2d/platformer/assets/audio/sfx/explode.wav.import
  47. 3 1
      2d/platformer/assets/audio/sfx/hit.wav.import
  48. 3 1
      2d/platformer/assets/audio/sfx/jump.wav.import
  49. 3 1
      2d/platformer/assets/audio/sfx/shoot.wav.import
  50. 58 0
      2d/platformer/assets/shaders/wind_sway.tres
  51. 46 25
      2d/platformer/assets/theme/user_interface.tres
  52. 二进制
      2d/platformer/icon.png
  53. 9 8
      2d/platformer/project.godot
  54. 0 55
      2d/platformer/src/Level/Level.tscn
  55. 0 21
      2d/platformer/src/Platforms/Platform.tscn
  56. 0 60
      2d/platformer/src/UserInterface/CoinsCounter.tscn
  57. 0 0
      2d/platformer/src/actors/actor.gd
  58. 3 2
      2d/platformer/src/actors/enemy.gd
  59. 22 9
      2d/platformer/src/actors/enemy.tscn
  60. 2 2
      2d/platformer/src/actors/gun.gd
  61. 7 6
      2d/platformer/src/actors/player.gd
  62. 56 56
      2d/platformer/src/actors/player.tscn
  63. 0 0
      2d/platformer/src/level/level.gd
  64. 71 0
      2d/platformer/src/level/level.tscn
  65. 0 0
      2d/platformer/src/level/music.gd
  66. 65 83
      2d/platformer/src/level/parallax_background.tscn
  67. 0 0
      2d/platformer/src/main/game.gd
  68. 8 5
      2d/platformer/src/main/game.tscn
  69. 5 5
      2d/platformer/src/main/split_screen.tscn
  70. 0 0
      2d/platformer/src/objects/bullet.gd
  71. 5 2
      2d/platformer/src/objects/bullet.tscn
  72. 0 0
      2d/platformer/src/objects/coin.gd
  73. 10 8
      2d/platformer/src/objects/coin.tscn
  74. 178 0
      2d/platformer/src/platforms/platform.tscn
  75. 0 0
      2d/platformer/src/ui/coins_counter.gd
  76. 89 0
      2d/platformer/src/ui/coins_counter.tscn
  77. 0 0
      2d/platformer/src/ui/pause_menu.gd
  78. 6 12
      2d/platformer/src/ui/pause_menu.tscn

二进制
2d/platformer/assets/art/background/cloud_1.png


二进制
2d/platformer/assets/art/background/cloud_2.png


二进制
2d/platformer/assets/art/background/cloud_3.png


二进制
2d/platformer/assets/art/background/distant_platforms_1.png


二进制
2d/platformer/assets/art/background/distant_platforms_2.png


二进制
2d/platformer/assets/art/background/sky.png


二进制
2d/platformer/assets/art/coin/coin.png


二进制
2d/platformer/assets/art/enemy/enemy.png


二进制
2d/platformer/assets/art/platforms/moving_platform.png


二进制
2d/platformer/assets/art/platforms/one_way_platform.png


二进制
2d/platformer/assets/art/player/bullet/bullet.png


二进制
2d/platformer/assets/art/player/robot.png


+ 3 - 3
2d/platformer/assets/art/player/robot_demo.png.import → 2d/platformer/assets/art/player/robot.png.import

@@ -2,15 +2,15 @@
 
 importer="texture"
 type="StreamTexture"
-path="res://.import/robot_demo.png-cd7cbcf6d0c47d4a233ea7ce93b142c2.stex"
+path="res://.import/robot.png-27287450bd4c41a095bcac0b0e7c1704.stex"
 metadata={
 "vram_texture": false
 }
 
 [deps]
 
-source_file="res://assets/art/player/robot_demo.png"
-dest_files=[ "res://.import/robot_demo.png-cd7cbcf6d0c47d4a233ea7ce93b142c2.stex" ]
+source_file="res://assets/art/player/robot.png"
+dest_files=[ "res://.import/robot.png-27287450bd4c41a095bcac0b0e7c1704.stex" ]
 
 [params]
 

二进制
2d/platformer/assets/art/player/robot_demo.png


二进制
2d/platformer/assets/art/props/bush_1.png


+ 35 - 0
2d/platformer/assets/art/props/bush_1.png.import

@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/bush_1.png-a89a3687cf2167631546a592d09c01c7.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/art/props/bush_1.png"
+dest_files=[ "res://.import/bush_1.png-a89a3687cf2167631546a592d09c01c7.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=false
+svg/scale=1.0

二进制
2d/platformer/assets/art/props/fern_1.png


+ 35 - 0
2d/platformer/assets/art/props/fern_1.png.import

@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/fern_1.png-5ade669859daeb65d0e571e9f88df023.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/art/props/fern_1.png"
+dest_files=[ "res://.import/fern_1.png-5ade669859daeb65d0e571e9f88df023.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=false
+svg/scale=1.0

二进制
2d/platformer/assets/art/props/flower_1.png


+ 35 - 0
2d/platformer/assets/art/props/flower_1.png.import

@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/flower_1.png-300807e1b8e9d982bc5da9af4d623eb3.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/art/props/flower_1.png"
+dest_files=[ "res://.import/flower_1.png-300807e1b8e9d982bc5da9af4d623eb3.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=false
+svg/scale=1.0

二进制
2d/platformer/assets/art/props/grass_1.png


+ 35 - 0
2d/platformer/assets/art/props/grass_1.png.import

@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/grass_1.png-6cec23d64da1a527fdb8bf98d3af3b82.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/art/props/grass_1.png"
+dest_files=[ "res://.import/grass_1.png-6cec23d64da1a527fdb8bf98d3af3b82.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=false
+svg/scale=1.0

二进制
2d/platformer/assets/art/props/grass_2.png


+ 35 - 0
2d/platformer/assets/art/props/grass_2.png.import

@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/grass_2.png-c84e00316b07612db99a48dd8c42c139.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/art/props/grass_2.png"
+dest_files=[ "res://.import/grass_2.png-c84e00316b07612db99a48dd8c42c139.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=false
+svg/scale=1.0

二进制
2d/platformer/assets/art/props/grass_3.png


+ 35 - 0
2d/platformer/assets/art/props/grass_3.png.import

@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/grass_3.png-6f062da482645e3378531b5800cd9599.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/art/props/grass_3.png"
+dest_files=[ "res://.import/grass_3.png-6f062da482645e3378531b5800cd9599.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=false
+svg/scale=1.0

二进制
2d/platformer/assets/art/props/ground_flowers_1.png


+ 35 - 0
2d/platformer/assets/art/props/ground_flowers_1.png.import

@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/ground_flowers_1.png-a882b67af8e175e67eae7acd0391a81b.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/art/props/ground_flowers_1.png"
+dest_files=[ "res://.import/ground_flowers_1.png-a882b67af8e175e67eae7acd0391a81b.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=false
+svg/scale=1.0

二进制
2d/platformer/assets/art/props/rock_1.png


+ 35 - 0
2d/platformer/assets/art/props/rock_1.png.import

@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/rock_1.png-235014254b57c514759f824e92e1d9e4.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/art/props/rock_1.png"
+dest_files=[ "res://.import/rock_1.png-235014254b57c514759f824e92e1d9e4.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=false
+svg/scale=1.0

二进制
2d/platformer/assets/art/props/tree_1.png


+ 35 - 0
2d/platformer/assets/art/props/tree_1.png.import

@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/tree_1.png-63980e8fa331befa37ae963a3c0d25e4.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/art/props/tree_1.png"
+dest_files=[ "res://.import/tree_1.png-63980e8fa331befa37ae963a3c0d25e4.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=false
+svg/scale=1.0

二进制
2d/platformer/assets/art/props/tree_2.png


+ 35 - 0
2d/platformer/assets/art/props/tree_2.png.import

@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/tree_2.png-7a103986ced6b2cf55d1f71e7ec48fe6.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/art/props/tree_2.png"
+dest_files=[ "res://.import/tree_2.png-7a103986ced6b2cf55d1f71e7ec48fe6.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=false
+svg/scale=1.0

二进制
2d/platformer/assets/art/props/vine_1.png


+ 35 - 0
2d/platformer/assets/art/props/vine_1.png.import

@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/vine_1.png-11b26a416c1af7c0919ecab663b43fd3.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/art/props/vine_1.png"
+dest_files=[ "res://.import/vine_1.png-11b26a416c1af7c0919ecab663b43fd3.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=false
+svg/scale=1.0

二进制
2d/platformer/assets/art/props/vine_2.png


+ 35 - 0
2d/platformer/assets/art/props/vine_2.png.import

@@ -0,0 +1,35 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/vine_2.png-e98200e006718faab1b3bf8dd88f9682.stex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://assets/art/props/vine_2.png"
+dest_files=[ "res://.import/vine_2.png-e98200e006718faab1b3bf8dd88f9682.stex" ]
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/bptc_ldr=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=false
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+process/invert_color=false
+process/normal_map_invert_y=false
+stream=false
+size_limit=0
+detect_3d=false
+svg/scale=1.0

二进制
2d/platformer/assets/art/tileset/tiles_demo.png


+ 352 - 232
2d/platformer/assets/art/tileset/tileset.tres

@@ -1,230 +1,77 @@
-[gd_resource type="TileSet" load_steps=14 format=2]
+[gd_resource type="TileSet" load_steps=19 format=2]
 
 [ext_resource path="res://assets/art/tileset/tiles_demo.png" type="Texture" id=1]
 
-[sub_resource type="ConvexPolygonShape2D" id=1]
-points = PoolVector2Array( 0, 6, 32, 6, 32, 32, 0, 32 )
+[sub_resource type="ConvexPolygonShape2D" id=8]
+points = PoolVector2Array( 0, 10, 64, 10, 64, 64, 0, 64 )
 
-[sub_resource type="ConvexPolygonShape2D" id=2]
-points = PoolVector2Array( 0, 6, 28, 6, 28, 32, 0, 32 )
+[sub_resource type="ConvexPolygonShape2D" id=9]
+points = PoolVector2Array( 0, 10, 64, 10, 64, 46, 0, 46 )
 
-[sub_resource type="ConvexPolygonShape2D" id=3]
-points = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 )
+[sub_resource type="ConvexPolygonShape2D" id=10]
+points = PoolVector2Array( 0, 10, 64, 10, 64, 43, 0, 43 )
 
-[sub_resource type="ConvexPolygonShape2D" id=4]
-points = PoolVector2Array( 0, 6, 32, 6, 32, 32, 0, 32 )
+[sub_resource type="ConvexPolygonShape2D" id=11]
+points = PoolVector2Array( 0, 0, 64, 0, 64, 64, 0, 64 )
 
-[sub_resource type="ConvexPolygonShape2D" id=5]
-points = PoolVector2Array( 32, 38, 32, 64, 0, 64, 0, 6 )
+[sub_resource type="ConvexPolygonShape2D" id=12]
+points = PoolVector2Array( 0, 0, 64, 0, 64, 64, 0, 64 )
 
-[sub_resource type="ConvexPolygonShape2D" id=6]
-points = PoolVector2Array( 0, 0, 28, 0, 28, 32, 0, 32 )
+[sub_resource type="ConvexPolygonShape2D" id=13]
+points = PoolVector2Array( 0, 0, 64, 0, 64, 64, 0, 64 )
 
 [sub_resource type="ConvexPolygonShape2D" id=7]
-points = PoolVector2Array( 28, 6, 32, 6, 32, 32, 0, 32, 0, 0, 28, 0 )
+points = PoolVector2Array( 0, 47.2426, 0, 7.25462, 58.1805, 64, 0, 64 )
 
-[sub_resource type="ConvexPolygonShape2D" id=8]
-points = PoolVector2Array( 0, 6, 32, 6, 32, 32, 0, 32 )
+[sub_resource type="ConvexPolygonShape2D" id=14]
+points = PoolVector2Array( 0, 0, 64, 0, 64, 64, 0, 64 )
 
-[sub_resource type="ConvexPolygonShape2D" id=9]
-points = PoolVector2Array( 0, 6, 28, 6, 28, 32, 0, 32 )
+[sub_resource type="ConvexPolygonShape2D" id=15]
+points = PoolVector2Array( 0, 10, 64, 10, 64, 64, 0, 64 )
 
-[sub_resource type="ConvexPolygonShape2D" id=10]
-points = PoolVector2Array( 0, 0, 32, 0, 32, 32, 0, 32 )
+[sub_resource type="ConvexPolygonShape2D" id=16]
+points = PoolVector2Array( 0, 10, 64, 10, 64, 64, 0, 64 )
 
-[sub_resource type="ConvexPolygonShape2D" id=11]
-points = PoolVector2Array( 0, 0, 32, 0, 32, 24, 0, 24 )
+[sub_resource type="ConvexPolygonShape2D" id=17]
+points = PoolVector2Array( 0, 10, 64, 10, 64, 64, 0, 64 )
 
-[sub_resource type="ConvexPolygonShape2D" id=12]
-points = PoolVector2Array( 0, 0, 28, 0, 28, 24, 0, 24 )
+[sub_resource type="ConvexPolygonShape2D" id=18]
+points = PoolVector2Array( 0, 0, 64, 0, 64, 64, 0, 64 )
+
+[sub_resource type="ConvexPolygonShape2D" id=19]
+points = PoolVector2Array( 0, 0, 64, 0, 64, 64, 0, 64 )
+
+[sub_resource type="ConvexPolygonShape2D" id=20]
+points = PoolVector2Array( 0, 0, 64, 0, 64, 64, 0, 64 )
+
+[sub_resource type="ConvexPolygonShape2D" id=21]
+points = PoolVector2Array( 0, 0, 64, 0, 64, 64, 0, 64 )
+
+[sub_resource type="ConvexPolygonShape2D" id=22]
+points = PoolVector2Array( 0, 0, 64, 0, 64, 64, 0, 64 )
+
+[sub_resource type="ConvexPolygonShape2D" id=23]
+points = PoolVector2Array( 0, 10, 64, 10, 64, 64, 0, 64 )
 
 [resource]
-0/name = "ground"
-0/texture = ExtResource( 1 )
-0/tex_offset = Vector2( 0, 0 )
-0/modulate = Color( 1, 1, 1, 1 )
-0/region = Rect2( 0, 0, 32, 32 )
-0/tile_mode = 0
-0/occluder_offset = Vector2( 0, 0 )
-0/navigation_offset = Vector2( 0, 0 )
-0/shape_offset = Vector2( 0, 0 )
-0/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
-0/shape = SubResource( 1 )
-0/shape_one_way = false
-0/shape_one_way_margin = 1.0
-0/shapes = [ {
-"autotile_coord": Vector2( 0, 0 ),
-"one_way": false,
-"one_way_margin": 1.0,
-"shape": SubResource( 1 ),
-"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
-} ]
-0/z_index = 0
-1/name = "ground_end"
-1/texture = ExtResource( 1 )
-1/tex_offset = Vector2( 0, 0 )
-1/modulate = Color( 1, 1, 1, 1 )
-1/region = Rect2( 32, 0, 32, 32 )
-1/tile_mode = 0
-1/occluder_offset = Vector2( 0, 0 )
-1/navigation_offset = Vector2( 0, 0 )
-1/shape_offset = Vector2( 0, 0 )
-1/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
-1/shape = SubResource( 2 )
-1/shape_one_way = false
-1/shape_one_way_margin = 1.0
-1/shapes = [ {
-"autotile_coord": Vector2( 0, 0 ),
-"one_way": false,
-"one_way_margin": 1.0,
-"shape": SubResource( 2 ),
-"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
-} ]
-1/z_index = 0
-2/name = "slope"
-2/texture = ExtResource( 1 )
-2/tex_offset = Vector2( 0, 0 )
-2/modulate = Color( 1, 1, 1, 1 )
-2/region = Rect2( 64, 64, 32, 64 )
-2/tile_mode = 0
-2/occluder_offset = Vector2( 0, 0 )
-2/navigation_offset = Vector2( 0, 0 )
-2/shape_offset = Vector2( 0, 0 )
-2/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
-2/shape = SubResource( 5 )
-2/shape_one_way = false
-2/shape_one_way_margin = 1.0
-2/shapes = [ {
-"autotile_coord": Vector2( 0, 0 ),
-"one_way": false,
-"one_way_margin": 1.0,
-"shape": SubResource( 5 ),
-"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
-} ]
-2/z_index = 0
-3/name = "wall"
-3/texture = ExtResource( 1 )
-3/tex_offset = Vector2( 0, 0 )
-3/modulate = Color( 1, 1, 1, 1 )
-3/region = Rect2( 32, 32, 32, 32 )
-3/tile_mode = 0
-3/occluder_offset = Vector2( 0, 0 )
-3/navigation_offset = Vector2( 0, 0 )
-3/shape_offset = Vector2( 0, 0 )
-3/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
-3/shape = SubResource( 6 )
-3/shape_one_way = false
-3/shape_one_way_margin = 1.0
-3/shapes = [ {
-"autotile_coord": Vector2( 0, 0 ),
-"one_way": false,
-"one_way_margin": 1.0,
-"shape": SubResource( 6 ),
-"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
-} ]
-3/z_index = 0
-4/name = "slope_top"
-4/texture = ExtResource( 1 )
-4/tex_offset = Vector2( 0, 0 )
-4/modulate = Color( 1, 1, 1, 1 )
-4/region = Rect2( 32, 64, 32, 32 )
-4/tile_mode = 0
-4/occluder_offset = Vector2( 0, 0 )
-4/navigation_offset = Vector2( 0, 0 )
-4/shape_offset = Vector2( 0, 0 )
-4/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
-4/shape = SubResource( 7 )
-4/shape_one_way = false
-4/shape_one_way_margin = 1.0
-4/shapes = [ {
-"autotile_coord": Vector2( 0, 0 ),
-"one_way": false,
-"one_way_margin": 1.0,
-"shape": SubResource( 7 ),
-"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
-} ]
-4/z_index = 0
-5/name = "one_way"
-5/texture = ExtResource( 1 )
-5/tex_offset = Vector2( 0, 0 )
-5/modulate = Color( 1, 1, 1, 1 )
-5/region = Rect2( 64, 0, 32, 32 )
-5/tile_mode = 0
-5/occluder_offset = Vector2( 0, 0 )
-5/navigation_offset = Vector2( 0, 0 )
-5/shape_offset = Vector2( 0, 0 )
-5/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
-5/shape = SubResource( 8 )
-5/shape_one_way = true
-5/shape_one_way_margin = 1.0
-5/shapes = [ {
-"autotile_coord": Vector2( 0, 0 ),
-"one_way": true,
-"one_way_margin": 1.0,
-"shape": SubResource( 8 ),
-"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
-} ]
-5/z_index = 0
-6/name = "one_way_end"
-6/texture = ExtResource( 1 )
-6/tex_offset = Vector2( 0, 0 )
-6/modulate = Color( 1, 1, 1, 1 )
-6/region = Rect2( 96, 0, 32, 32 )
-6/tile_mode = 0
-6/occluder_offset = Vector2( 0, 0 )
-6/navigation_offset = Vector2( 0, 0 )
-6/shape_offset = Vector2( 0, 0 )
-6/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
-6/shape = SubResource( 9 )
-6/shape_one_way = true
-6/shape_one_way_margin = 1.0
-6/shapes = [ {
-"autotile_coord": Vector2( 0, 0 ),
-"one_way": true,
-"one_way_margin": 1.0,
-"shape": SubResource( 9 ),
-"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
-} ]
-6/z_index = 0
-7/name = "rock"
-7/texture = ExtResource( 1 )
-7/tex_offset = Vector2( 0, 0 )
-7/modulate = Color( 1, 1, 1, 1 )
-7/region = Rect2( 0, 32, 32, 32 )
-7/tile_mode = 0
-7/occluder_offset = Vector2( 0, 0 )
-7/navigation_offset = Vector2( 0, 0 )
-7/shape_offset = Vector2( 0, 0 )
-7/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
-7/shape = SubResource( 10 )
-7/shape_one_way = false
-7/shape_one_way_margin = 1.0
-7/shapes = [ {
-"autotile_coord": Vector2( 0, 0 ),
-"one_way": false,
-"one_way_margin": 1.0,
-"shape": SubResource( 10 ),
-"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
-} ]
-7/z_index = 0
 8/name = "bottom"
 8/texture = ExtResource( 1 )
 8/tex_offset = Vector2( 0, 0 )
 8/modulate = Color( 1, 1, 1, 1 )
-8/region = Rect2( 192, 32, 32, 32 )
+8/region = Rect2( 0, 0, 64, 64 )
 8/tile_mode = 0
 8/occluder_offset = Vector2( 0, 0 )
 8/navigation_offset = Vector2( 0, 0 )
 8/shape_offset = Vector2( 0, 0 )
 8/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
-8/shape = SubResource( 11 )
+8/shape = SubResource( 23 )
 8/shape_one_way = false
 8/shape_one_way_margin = 1.0
 8/shapes = [ {
 "autotile_coord": Vector2( 0, 0 ),
 "one_way": false,
 "one_way_margin": 1.0,
-"shape": SubResource( 11 ),
+"shape": SubResource( 23 ),
 "shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
 } ]
 8/z_index = 0
@@ -232,104 +79,377 @@ points = PoolVector2Array( 0, 0, 28, 0, 28, 24, 0, 24 )
 9/texture = ExtResource( 1 )
 9/tex_offset = Vector2( 0, 0 )
 9/modulate = Color( 1, 1, 1, 1 )
-9/region = Rect2( 224, 32, 32, 32 )
+9/region = Rect2( 256, 64, 64, 64 )
 9/tile_mode = 0
 9/occluder_offset = Vector2( 0, 0 )
 9/navigation_offset = Vector2( 0, 0 )
 9/shape_offset = Vector2( 0, 0 )
 9/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
-9/shape = SubResource( 12 )
 9/shape_one_way = false
-9/shape_one_way_margin = 1.0
-9/shapes = [ {
-"autotile_coord": Vector2( 0, 0 ),
-"one_way": false,
-"one_way_margin": 1.0,
-"shape": SubResource( 12 ),
-"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
-} ]
+9/shape_one_way_margin = 0.0
+9/shapes = [  ]
 9/z_index = 0
-10/name = "bottom_corner"
+10/name = "tiles_demo.png 10"
 10/texture = ExtResource( 1 )
 10/tex_offset = Vector2( 0, 0 )
 10/modulate = Color( 1, 1, 1, 1 )
-10/region = Rect2( 160, 32, 32, 32 )
+10/region = Rect2( 64, 0, 64, 64 )
 10/tile_mode = 0
 10/occluder_offset = Vector2( 0, 0 )
 10/navigation_offset = Vector2( 0, 0 )
 10/shape_offset = Vector2( 0, 0 )
 10/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
-10/shape = SubResource( 3 )
+10/shape = SubResource( 8 )
 10/shape_one_way = false
 10/shape_one_way_margin = 1.0
 10/shapes = [ {
 "autotile_coord": Vector2( 0, 0 ),
 "one_way": false,
 "one_way_margin": 1.0,
-"shape": SubResource( 3 ),
+"shape": SubResource( 8 ),
 "shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
 } ]
 10/z_index = 0
-11/name = "tree_trunk_0"
+11/name = "tiles_demo.png 11"
 11/texture = ExtResource( 1 )
 11/tex_offset = Vector2( 0, 0 )
 11/modulate = Color( 1, 1, 1, 1 )
-11/region = Rect2( 128, 64, 32, 32 )
+11/region = Rect2( 128, 0, 64, 64 )
 11/tile_mode = 0
 11/occluder_offset = Vector2( 0, 0 )
 11/navigation_offset = Vector2( 0, 0 )
 11/shape_offset = Vector2( 0, 0 )
 11/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+11/shape = SubResource( 9 )
 11/shape_one_way = false
-11/shape_one_way_margin = 0.0
-11/shapes = [  ]
+11/shape_one_way_margin = 1.0
+11/shapes = [ {
+"autotile_coord": Vector2( 0, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 9 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+} ]
 11/z_index = 0
-12/name = "tree_trunk_1"
+12/name = "tiles_demo.png 12"
 12/texture = ExtResource( 1 )
 12/tex_offset = Vector2( 0, 0 )
 12/modulate = Color( 1, 1, 1, 1 )
-12/region = Rect2( 128, 32, 32, 32 )
+12/region = Rect2( 192, 0, 64, 64 )
 12/tile_mode = 0
 12/occluder_offset = Vector2( 0, 0 )
 12/navigation_offset = Vector2( 0, 0 )
 12/shape_offset = Vector2( 0, 0 )
 12/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+12/shape = SubResource( 10 )
 12/shape_one_way = false
-12/shape_one_way_margin = 0.0
-12/shapes = [  ]
+12/shape_one_way_margin = 1.0
+12/shapes = [ {
+"autotile_coord": Vector2( 0, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 10 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+} ]
 12/z_index = 0
-13/name = "tree_base"
+13/name = "tiles_demo.png 13"
 13/texture = ExtResource( 1 )
 13/tex_offset = Vector2( 0, 0 )
 13/modulate = Color( 1, 1, 1, 1 )
-13/region = Rect2( 128, 96, 32, 32 )
+13/region = Rect2( 256, 0, 64, 64 )
 13/tile_mode = 0
 13/occluder_offset = Vector2( 0, 0 )
 13/navigation_offset = Vector2( 0, 0 )
 13/shape_offset = Vector2( 0, 0 )
 13/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
-13/shape = SubResource( 4 )
 13/shape_one_way = false
-13/shape_one_way_margin = 1.0
-13/shapes = [ {
-"autotile_coord": Vector2( 0, 0 ),
-"one_way": false,
-"one_way_margin": 1.0,
-"shape": SubResource( 4 ),
-"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
-} ]
+13/shape_one_way_margin = 0.0
+13/shapes = [  ]
 13/z_index = 0
-14/name = "tree_top"
+14/name = "tiles_demo.png 14"
 14/texture = ExtResource( 1 )
 14/tex_offset = Vector2( 0, 0 )
 14/modulate = Color( 1, 1, 1, 1 )
-14/region = Rect2( 128, 0, 32, 32 )
+14/region = Rect2( 0, 64, 64, 64 )
 14/tile_mode = 0
 14/occluder_offset = Vector2( 0, 0 )
 14/navigation_offset = Vector2( 0, 0 )
 14/shape_offset = Vector2( 0, 0 )
 14/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+14/shape = SubResource( 11 )
 14/shape_one_way = false
-14/shape_one_way_margin = 0.0
-14/shapes = [  ]
+14/shape_one_way_margin = 1.0
+14/shapes = [ {
+"autotile_coord": Vector2( 0, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 11 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+} ]
 14/z_index = 0
+15/name = "tiles_demo.png 15"
+15/texture = ExtResource( 1 )
+15/tex_offset = Vector2( 0, 0 )
+15/modulate = Color( 1, 1, 1, 1 )
+15/region = Rect2( 64, 64, 64, 64 )
+15/tile_mode = 0
+15/occluder_offset = Vector2( 0, 0 )
+15/navigation_offset = Vector2( 0, 0 )
+15/shape_offset = Vector2( 0, 0 )
+15/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+15/shape = SubResource( 12 )
+15/shape_one_way = false
+15/shape_one_way_margin = 1.0
+15/shapes = [ {
+"autotile_coord": Vector2( 0, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 12 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+} ]
+15/z_index = 0
+16/name = "tiles_demo.png 16"
+16/texture = ExtResource( 1 )
+16/tex_offset = Vector2( 0, 0 )
+16/modulate = Color( 1, 1, 1, 1 )
+16/region = Rect2( 64, 128, 64, 64 )
+16/tile_mode = 0
+16/occluder_offset = Vector2( 0, 0 )
+16/navigation_offset = Vector2( 0, 0 )
+16/shape_offset = Vector2( 0, 0 )
+16/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+16/shape = SubResource( 13 )
+16/shape_one_way = false
+16/shape_one_way_margin = 1.0
+16/shapes = [ {
+"autotile_coord": Vector2( 0, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 13 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+} ]
+16/z_index = 0
+17/name = "tiles_demo.png 17"
+17/texture = ExtResource( 1 )
+17/tex_offset = Vector2( 0, 0 )
+17/modulate = Color( 1, 1, 1, 1 )
+17/region = Rect2( 128, 128, 64, 64 )
+17/tile_mode = 0
+17/occluder_offset = Vector2( 0, 0 )
+17/navigation_offset = Vector2( 0, 0 )
+17/shape_offset = Vector2( 0, 0 )
+17/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+17/shape = SubResource( 7 )
+17/shape_one_way = true
+17/shape_one_way_margin = 1.0
+17/shapes = [ {
+"autotile_coord": Vector2( 0, 0 ),
+"one_way": true,
+"one_way_margin": 1.0,
+"shape": SubResource( 7 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+} ]
+17/z_index = 0
+18/name = "tiles_demo.png 18"
+18/texture = ExtResource( 1 )
+18/tex_offset = Vector2( 0, 0 )
+18/modulate = Color( 1, 1, 1, 1 )
+18/region = Rect2( 128, 192, 64, 64 )
+18/tile_mode = 0
+18/occluder_offset = Vector2( 0, 0 )
+18/navigation_offset = Vector2( 0, 0 )
+18/shape_offset = Vector2( 0, 0 )
+18/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+18/shape = SubResource( 14 )
+18/shape_one_way = false
+18/shape_one_way_margin = 1.0
+18/shapes = [ {
+"autotile_coord": Vector2( 0, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 14 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+} ]
+18/z_index = 0
+19/name = "tiles_demo.png 19"
+19/texture = ExtResource( 1 )
+19/tex_offset = Vector2( 0, 0 )
+19/modulate = Color( 1, 1, 1, 1 )
+19/region = Rect2( 192, 192, 64, 64 )
+19/tile_mode = 0
+19/occluder_offset = Vector2( 0, 0 )
+19/navigation_offset = Vector2( 0, 0 )
+19/shape_offset = Vector2( 0, 0 )
+19/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+19/shape = SubResource( 15 )
+19/shape_one_way = false
+19/shape_one_way_margin = 1.0
+19/shapes = [ {
+"autotile_coord": Vector2( 0, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 15 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+} ]
+19/z_index = 0
+20/name = "tiles_demo.png 20"
+20/texture = ExtResource( 1 )
+20/tex_offset = Vector2( 0, 0 )
+20/modulate = Color( 1, 1, 1, 1 )
+20/region = Rect2( 256, 192, 64, 64 )
+20/tile_mode = 0
+20/occluder_offset = Vector2( 0, 0 )
+20/navigation_offset = Vector2( 0, 0 )
+20/shape_offset = Vector2( 0, 0 )
+20/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+20/shape = SubResource( 16 )
+20/shape_one_way = false
+20/shape_one_way_margin = 1.0
+20/shapes = [ {
+"autotile_coord": Vector2( 0, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 16 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+} ]
+20/z_index = 0
+21/name = "tiles_demo.png 21"
+21/texture = ExtResource( 1 )
+21/tex_offset = Vector2( 0, 0 )
+21/modulate = Color( 1, 1, 1, 1 )
+21/region = Rect2( 320, 192, 64, 64 )
+21/tile_mode = 0
+21/occluder_offset = Vector2( 0, 0 )
+21/navigation_offset = Vector2( 0, 0 )
+21/shape_offset = Vector2( 0, 0 )
+21/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+21/shape = SubResource( 17 )
+21/shape_one_way = false
+21/shape_one_way_margin = 1.0
+21/shapes = [ {
+"autotile_coord": Vector2( 0, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 17 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+} ]
+21/z_index = 0
+22/name = "tiles_demo.png 22"
+22/texture = ExtResource( 1 )
+22/tex_offset = Vector2( 0, 0 )
+22/modulate = Color( 1, 1, 1, 1 )
+22/region = Rect2( 384, 64, 64, 64 )
+22/tile_mode = 0
+22/occluder_offset = Vector2( 0, 0 )
+22/navigation_offset = Vector2( 0, 0 )
+22/shape_offset = Vector2( 0, 0 )
+22/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+22/shape = SubResource( 18 )
+22/shape_one_way = false
+22/shape_one_way_margin = 1.0
+22/shapes = [ {
+"autotile_coord": Vector2( 0, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 18 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+} ]
+22/z_index = 0
+23/name = "tiles_demo.png 23"
+23/texture = ExtResource( 1 )
+23/tex_offset = Vector2( 0, 0 )
+23/modulate = Color( 1, 1, 1, 1 )
+23/region = Rect2( 384, 0, 64, 64 )
+23/tile_mode = 0
+23/occluder_offset = Vector2( 0, 0 )
+23/navigation_offset = Vector2( 0, 0 )
+23/shape_offset = Vector2( 0, 0 )
+23/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+23/shape = SubResource( 19 )
+23/shape_one_way = false
+23/shape_one_way_margin = 1.0
+23/shapes = [ {
+"autotile_coord": Vector2( 0, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 19 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+} ]
+23/z_index = 0
+24/name = "tiles_demo.png 24"
+24/texture = ExtResource( 1 )
+24/tex_offset = Vector2( 0, 0 )
+24/modulate = Color( 1, 1, 1, 1 )
+24/region = Rect2( 448, 64, 64, 64 )
+24/tile_mode = 0
+24/occluder_offset = Vector2( 0, 0 )
+24/navigation_offset = Vector2( 0, 0 )
+24/shape_offset = Vector2( 0, 0 )
+24/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+24/shape = SubResource( 20 )
+24/shape_one_way = false
+24/shape_one_way_margin = 1.0
+24/shapes = [ {
+"autotile_coord": Vector2( 0, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 20 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+} ]
+24/z_index = 0
+26/name = "tiles_demo.png 26"
+26/texture = ExtResource( 1 )
+26/tex_offset = Vector2( 0, 0 )
+26/modulate = Color( 1, 1, 1, 1 )
+26/region = Rect2( 320, 128, 64, 64 )
+26/tile_mode = 0
+26/occluder_offset = Vector2( 0, 0 )
+26/navigation_offset = Vector2( 0, 0 )
+26/shape_offset = Vector2( 0, 0 )
+26/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+26/shape = SubResource( 21 )
+26/shape_one_way = false
+26/shape_one_way_margin = 1.0
+26/shapes = [ {
+"autotile_coord": Vector2( 0, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 21 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+} ]
+26/z_index = 0
+27/name = "tiles_demo.png 27"
+27/texture = ExtResource( 1 )
+27/tex_offset = Vector2( 0, 0 )
+27/modulate = Color( 1, 1, 1, 1 )
+27/region = Rect2( 320, 64, 64, 64 )
+27/tile_mode = 0
+27/occluder_offset = Vector2( 0, 0 )
+27/navigation_offset = Vector2( 0, 0 )
+27/shape_offset = Vector2( 0, 0 )
+27/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+27/shape = SubResource( 22 )
+27/shape_one_way = false
+27/shape_one_way_margin = 1.0
+27/shapes = [ {
+"autotile_coord": Vector2( 0, 0 ),
+"one_way": false,
+"one_way_margin": 1.0,
+"shape": SubResource( 22 ),
+"shape_transform": Transform2D( 1, 0, 0, 1, 0, 0 )
+} ]
+27/z_index = 0
+28/name = "tiles_demo.png 28"
+28/texture = ExtResource( 1 )
+28/tex_offset = Vector2( 0, 0 )
+28/modulate = Color( 1, 1, 1, 1 )
+28/region = Rect2( 0, 0, 64, 64 )
+28/tile_mode = 0
+28/occluder_offset = Vector2( 0, 0 )
+28/navigation_offset = Vector2( 0, 0 )
+28/shape_offset = Vector2( 0, 0 )
+28/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
+28/shape_one_way = false
+28/shape_one_way_margin = 0.0
+28/shapes = [  ]
+28/z_index = 0

二进制
2d/platformer/assets/art/ui/touch_button_fire.png


二进制
2d/platformer/assets/art/ui/touch_button_jump.png


二进制
2d/platformer/assets/art/ui/touch_button_left.png


二进制
2d/platformer/assets/art/ui/touch_button_right.png


+ 3 - 1
2d/platformer/assets/audio/sfx/coin_pickup.wav.import

@@ -17,5 +17,7 @@ force/max_rate=false
 force/max_rate_hz=44100
 edit/trim=true
 edit/normalize=true
-edit/loop=false
+edit/loop_mode=0
+edit/loop_begin=0
+edit/loop_end=-1
 compress/mode=0

+ 3 - 1
2d/platformer/assets/audio/sfx/explode.wav.import

@@ -17,5 +17,7 @@ force/max_rate=false
 force/max_rate_hz=44100
 edit/trim=true
 edit/normalize=true
-edit/loop=false
+edit/loop_mode=0
+edit/loop_begin=0
+edit/loop_end=-1
 compress/mode=0

+ 3 - 1
2d/platformer/assets/audio/sfx/hit.wav.import

@@ -17,5 +17,7 @@ force/max_rate=false
 force/max_rate_hz=44100
 edit/trim=true
 edit/normalize=true
-edit/loop=false
+edit/loop_mode=0
+edit/loop_begin=0
+edit/loop_end=-1
 compress/mode=0

+ 3 - 1
2d/platformer/assets/audio/sfx/jump.wav.import

@@ -17,5 +17,7 @@ force/max_rate=false
 force/max_rate_hz=44100
 edit/trim=true
 edit/normalize=true
-edit/loop=false
+edit/loop_mode=0
+edit/loop_begin=0
+edit/loop_end=-1
 compress/mode=0

+ 3 - 1
2d/platformer/assets/audio/sfx/shoot.wav.import

@@ -17,5 +17,7 @@ force/max_rate=false
 force/max_rate_hz=44100
 edit/trim=true
 edit/normalize=true
-edit/loop=false
+edit/loop_mode=0
+edit/loop_begin=0
+edit/loop_end=-1
 compress/mode=0

+ 58 - 0
2d/platformer/assets/shaders/wind_sway.tres

@@ -0,0 +1,58 @@
+[gd_resource type="ShaderMaterial" load_steps=2 format=2]
+
+[sub_resource type="Shader" id=1]
+code = "// original wind shader from https://github.com/Maujoe/godot-simple-wind-shader-2d/tree/master/assets/maujoe.simple_wind_shader_2d
+// original script modified by HungryProton so that the assets are moving differently : https://pastebin.com/VL3AfV8D
+//
+// speed - The speed of the wind movement.
+// minStrength - The minimal strength of the wind movement.
+// maxStrength - The maximal strength of the wind movement.
+// strengthScale - Scalefactor for the wind strength.
+// interval - The time between minimal and maximal strength changes.
+// detail - The detail (number of waves) of the wind movement.
+// distortion - The strength of geometry distortion.
+// heightOffset - The height where the wind begins to move. By default 0.0.
+
+shader_type canvas_item;
+render_mode blend_mix;
+
+// Wind settings.
+uniform float speed = 1.0;
+uniform float minStrength : hint_range(0.0, 1.0) = 0.05;
+uniform float maxStrength : hint_range(0.0, 1.0) = 0.01;
+uniform float strengthScale = 100.0;
+uniform float interval = 3.5;
+uniform float detail = 1.0;
+uniform float distortion : hint_range(0.0, 1.0);
+uniform float heightOffset : hint_range(0.0, 1.0);
+
+// With the offset value, you can if you want different moves for each asset. Just put a random value (1, 2, 3) in the editor. Don't forget to mark the material as unique if you use this
+uniform float offset = 0;
+
+
+float getWind(vec2 vertex, vec2 uv, float time){
+    float diff = pow(maxStrength - minStrength, 2.0);
+    float strength = clamp(minStrength + diff + sin(time / interval) * diff, minStrength, maxStrength) * strengthScale;
+    float wind = (sin(time) + cos(time * detail)) * strength * max(0.0, (1.0-uv.y) - heightOffset);
+
+    return wind;
+}
+
+void vertex() {
+    vec4 pos = WORLD_MATRIX * vec4(0.0, 0.0, 0.0, 1.0);
+    float time = TIME * speed + offset;
+    //float time = TIME * speed + pos.x * pos.y  ; not working when moving...
+    VERTEX.x += getWind(VERTEX.xy, UV, time);
+}"
+
+[resource]
+shader = SubResource( 1 )
+shader_param/speed = 1.0
+shader_param/minStrength = 0.05
+shader_param/maxStrength = 0.01
+shader_param/strengthScale = 100.0
+shader_param/interval = 3.5
+shader_param/detail = 1.0
+shader_param/distortion = null
+shader_param/heightOffset = null
+shader_param/offset = 0.0

+ 46 - 25
2d/platformer/assets/theme/user_interface.tres

@@ -23,52 +23,64 @@ content_margin_left = 6.0
 content_margin_right = 6.0
 content_margin_top = 4.0
 content_margin_bottom = 4.0
-bg_color = Color( 0.15, 0.1725, 0.2325, 1 )
-border_width_left = 1
-border_width_top = 1
-border_width_right = 1
-border_width_bottom = 1
-border_color = Color( 0.41, 0.61, 0.91, 1 )
+bg_color = Color( 0.384314, 0.454902, 0.631373, 1 )
+border_width_left = 5
+border_width_top = 5
+border_width_right = 5
+border_width_bottom = 5
+border_color = Color( 0.14902, 0.203922, 0.345098, 1 )
+shadow_color = Color( 0.129412, 0.101961, 0.101961, 0.219608 )
+shadow_size = 1
+shadow_offset = Vector2( 2, 2 )
 
 [sub_resource type="StyleBoxFlat" id=3]
 content_margin_left = 6.0
 content_margin_right = 6.0
 content_margin_top = 4.0
 content_margin_bottom = 4.0
-bg_color = Color( 0.15, 0.1725, 0.2325, 1 )
-border_width_left = 1
-border_width_top = 1
-border_width_right = 1
-border_width_bottom = 1
-border_color = Color( 0.4, 0.4225, 0.4825, 1 )
+bg_color = Color( 0.384314, 0.454902, 0.631373, 1 )
+border_width_left = 5
+border_width_top = 5
+border_width_right = 5
+border_width_bottom = 5
+border_color = Color( 0.14902, 0.203922, 0.345098, 1 )
+shadow_color = Color( 0.129412, 0.101961, 0.101961, 0.219608 )
+shadow_size = 1
+shadow_offset = Vector2( 2, 2 )
 
 [sub_resource type="StyleBoxFlat" id=4]
 content_margin_left = 6.0
 content_margin_right = 6.0
 content_margin_top = 4.0
 content_margin_bottom = 4.0
-bg_color = Color( 0.15, 0.1725, 0.2325, 1 )
-border_width_left = 1
-border_width_top = 1
-border_width_right = 1
-border_width_bottom = 1
-border_color = Color( 0.125, 0.14375, 0.19375, 1 )
+bg_color = Color( 0.25098, 0.305882, 0.45098, 1 )
+border_width_left = 5
+border_width_top = 5
+border_width_right = 5
+border_width_bottom = 5
+border_color = Color( 0.14902, 0.203922, 0.345098, 1 )
+shadow_color = Color( 0.129412, 0.101961, 0.101961, 0.219608 )
+shadow_size = 1
+shadow_offset = Vector2( 2, 2 )
 
 [sub_resource type="StyleBoxFlat" id=5]
 content_margin_left = 6.0
 content_margin_right = 6.0
 content_margin_top = 4.0
 content_margin_bottom = 4.0
-bg_color = Color( 0.15, 0.1725, 0.2325, 1 )
-border_width_left = 1
-border_width_top = 1
-border_width_right = 1
-border_width_bottom = 1
-border_color = Color( 0.41, 0.61, 0.91, 1 )
+bg_color = Color( 0.443137, 0.541176, 0.8, 1 )
+border_width_left = 5
+border_width_top = 5
+border_width_right = 5
+border_width_bottom = 5
+border_color = Color( 0.14902, 0.203922, 0.345098, 1 )
+shadow_color = Color( 0.129412, 0.101961, 0.101961, 0.219608 )
+shadow_size = 1
+shadow_offset = Vector2( 2, 2 )
 
 [resource]
 default_font = SubResource( 6 )
-Button/colors/font_color = Color( 0.8, 0.8075, 0.8275, 1 )
+Button/colors/font_color = Color( 0.788235, 0.847059, 1, 1 )
 Button/colors/font_color_disabled = Color( 1, 1, 1, 0.3 )
 Button/colors/font_color_hover = Color( 0.88, 0.8845, 0.8965, 1 )
 Button/colors/font_color_pressed = Color( 0.411765, 0.611765, 0.909804, 1 )
@@ -81,3 +93,12 @@ Button/styles/focus = SubResource( 2 )
 Button/styles/hover = SubResource( 3 )
 Button/styles/normal = SubResource( 4 )
 Button/styles/pressed = SubResource( 5 )
+Label/colors/font_color = Color( 1, 1, 1, 1 )
+Label/colors/font_color_shadow = Color( 0.117647, 0.117647, 0.184314, 1 )
+Label/colors/font_outline_modulate = Color( 0, 0, 0, 1 )
+Label/constants/line_spacing = 3
+Label/constants/shadow_as_outline = 1
+Label/constants/shadow_offset_x = 2
+Label/constants/shadow_offset_y = 2
+Label/fonts/font = SubResource( 6 )
+Label/styles/normal = null

二进制
2d/platformer/icon.png


+ 9 - 8
2d/platformer/project.godot

@@ -12,32 +12,32 @@ _global_script_classes=[ {
 "base": "KinematicBody2D",
 "class": "Actor",
 "language": "GDScript",
-"path": "res://src/Actors/Actor.gd"
+"path": "res://src/actors/actor.gd"
 }, {
 "base": "RigidBody2D",
 "class": "Bullet",
 "language": "GDScript",
-"path": "res://src/Objects/Bullet.gd"
+"path": "res://src/objects/bullet.gd"
 }, {
 "base": "Area2D",
 "class": "Coin",
 "language": "GDScript",
-"path": "res://src/Objects/Coin.gd"
+"path": "res://src/objects/coin.gd"
 }, {
 "base": "Actor",
 "class": "Enemy",
 "language": "GDScript",
-"path": "res://src/Actors/Enemy.gd"
+"path": "res://src/actors/enemy.gd"
 }, {
 "base": "Position2D",
 "class": "Gun",
 "language": "GDScript",
-"path": "res://src/Actors/Gun.gd"
+"path": "res://src/actors/gun.gd"
 }, {
 "base": "Actor",
 "class": "Player",
 "language": "GDScript",
-"path": "res://src/Actors/Player.gd"
+"path": "res://src/actors/player.gd"
 } ]
 _global_script_class_icons={
 "Actor": "",
@@ -58,7 +58,7 @@ 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 more. It contains one closed
 level, and the player is invincible, unlike the enemies."
-run/main_scene="res://src/Main/Game.tscn"
+run/main_scene="res://src/main/game.tscn"
 config/icon="res://icon.png"
 target_fps="60"
 
@@ -228,7 +228,7 @@ splitscreen={
 
 [physics]
 
-2d/default_gravity=900
+2d/default_gravity=1400
 
 [rasterizer]
 
@@ -244,6 +244,7 @@ quality/driver/driver_name="GLES2"
 quality/intended_usage/framebuffer_allocation=0
 quality/intended_usage/framebuffer_allocation.mobile=1
 2d/snapping/use_gpu_pixel_snap=true
+vram_compression/import_etc=true
 quality/filters/anisotropic_filter_level=2
 quality/filters/use_nearest_mipmap_filter=true
 quality/depth/hdr=false

文件差异内容过多而无法显示
+ 0 - 55
2d/platformer/src/Level/Level.tscn


+ 0 - 21
2d/platformer/src/Platforms/Platform.tscn

@@ -1,21 +0,0 @@
-[gd_scene load_steps=3 format=2]
-
-[ext_resource path="res://assets/art/platforms/moving_platform.png" type="Texture" id=2]
-
-[sub_resource type="RectangleShape2D" id=1]
-extents = Vector2( 47, 6 )
-
-[node name="Platform" type="KinematicBody2D"]
-z_index = -1
-collision_layer = 8
-collision_mask = 0
-collision/safe_margin = 0.12
-motion/sync_to_physics = true
-
-[node name="Sprite" type="Sprite" parent="."]
-texture = ExtResource( 2 )
-
-[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
-position = Vector2( 0, -4 )
-shape = SubResource( 1 )
-one_way_collision = true

+ 0 - 60
2d/platformer/src/UserInterface/CoinsCounter.tscn

@@ -1,60 +0,0 @@
-[gd_scene load_steps=10 format=2]
-
-[ext_resource path="res://assets/theme/user_interface.tres" type="Theme" id=1]
-[ext_resource path="res://assets/art/coin/coin.png" type="Texture" id=2]
-[ext_resource path="res://src/UserInterface/CoinsCounter.gd" type="Script" id=3]
-
-[sub_resource type="StyleBoxFlat" id=1]
-bg_color = Color( 0, 0, 0, 0.5 )
-
-[sub_resource type="AtlasTexture" id=2]
-atlas = ExtResource( 2 )
-region = Rect2( 0, 0, 8, 8 )
-
-[sub_resource type="AtlasTexture" id=3]
-atlas = ExtResource( 2 )
-region = Rect2( 8, 0, 8, 8 )
-
-[sub_resource type="AtlasTexture" id=4]
-atlas = ExtResource( 2 )
-region = Rect2( 16, 0, 8, 8 )
-
-[sub_resource type="AtlasTexture" id=5]
-atlas = ExtResource( 2 )
-region = Rect2( 24, 0, 8, 8 )
-
-[sub_resource type="SpriteFrames" id=6]
-animations = [ {
-"frames": [ SubResource( 2 ), SubResource( 3 ), SubResource( 4 ), SubResource( 5 ), SubResource( 4 ), SubResource( 3 ) ],
-"loop": true,
-"name": "coin_spinning",
-"speed": 6.5
-} ]
-
-[node name="CoinsCounter" type="Panel"]
-margin_left = 5.0
-margin_top = 5.0
-margin_right = 100.0
-margin_bottom = 45.0
-rect_min_size = Vector2( 100, 45 )
-theme = ExtResource( 1 )
-custom_styles/panel = SubResource( 1 )
-script = ExtResource( 3 )
-
-[node name="Label" type="Label" parent="."]
-anchor_right = 1.0
-anchor_bottom = 1.0
-margin_right = -8.0
-text = "100"
-align = 2
-valign = 1
-autowrap = true
-__meta__ = {
-"_edit_use_anchors_": false
-}
-
-[node name="AnimatedSprite" type="AnimatedSprite" parent="."]
-position = Vector2( 21.5, 22.5 )
-scale = Vector2( 4.375, 4.375 )
-frames = SubResource( 6 )
-animation = "coin_spinning"

+ 0 - 0
2d/platformer/src/Actors/Actor.gd → 2d/platformer/src/actors/actor.gd


+ 3 - 2
2d/platformer/src/Actors/Enemy.gd → 2d/platformer/src/actors/enemy.gd

@@ -14,6 +14,7 @@ onready var floor_detector_left = $FloorDetectorLeft
 onready var floor_detector_right = $FloorDetectorRight
 onready var sprite = $Sprite
 onready var animation_player = $AnimationPlayer
+onready var orig_scale = sprite.scale
 
 
 # This function is called when the scene enters the scene tree.
@@ -52,9 +53,9 @@ func _physics_process(_delta):
 
 	# We flip the Sprite depending on which way the enemy is moving.
 	if _velocity.x > 0:
-		sprite.scale.x = 1
+		sprite.scale.x = orig_scale.x
 	else:
-		sprite.scale.x = -1
+		sprite.scale.x = -orig_scale.x
 
 	var animation = get_new_animation()
 	if animation != animation_player.current_animation:

+ 22 - 9
2d/platformer/src/Actors/Enemy.tscn → 2d/platformer/src/actors/enemy.tscn

@@ -4,7 +4,7 @@
 [ext_resource path="res://assets/audio/sfx/explode.wav" type="AudioStream" id=2]
 [ext_resource path="res://assets/audio/sfx/hit.wav" type="AudioStream" id=3]
 [ext_resource path="res://assets/art/enemy/enemy.png" type="Texture" id=4]
-[ext_resource path="res://src/Actors/Enemy.gd" type="Script" id=5]
+[ext_resource path="res://src/actors/enemy.gd" type="Script" id=5]
 
 [sub_resource type="CanvasItemMaterial" id=1]
 
@@ -22,6 +22,18 @@ tracks/0/keys = {
 "update": 0,
 "values": [ 4.0 ]
 }
+tracks/1/type = "value"
+tracks/1/path = NodePath("Sprite:frame")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ 0 ]
+}
 
 [sub_resource type="Animation" id=2]
 resource_name = "destroy"
@@ -167,9 +179,8 @@ tracks/0/keys = {
 }
 
 [sub_resource type="Animation" id=4]
-length = 1.25
+length = 1.6
 loop = true
-step = 0.25
 tracks/0/type = "value"
 tracks/0/path = NodePath("Sprite:frame")
 tracks/0/interp = 1
@@ -177,14 +188,14 @@ tracks/0/loop_wrap = true
 tracks/0/imported = false
 tracks/0/enabled = true
 tracks/0/keys = {
-"times": PoolRealArray( 0, 0.25, 0.5, 0.75, 1, 1.25 ),
-"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ),
+"times": PoolRealArray( 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.1, 1.2, 1.3, 1.4, 1.5 ),
+"transitions": PoolRealArray( 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="CapsuleShape2D" id=5]
-radius = 11.0
+radius = 18.0
 height = 7.0
 
 [sub_resource type="CanvasItemMaterial" id=6]
@@ -198,7 +209,7 @@ colors = PoolColorArray( 1, 1, 1, 1, 0, 0, 0, 1 )
 collision_layer = 2
 collision_mask = 24
 script = ExtResource( 5 )
-speed = Vector2( 75, 250 )
+speed = Vector2( 32, 250 )
 
 [node name="PlatformDetector" type="RayCast2D" parent="."]
 position = Vector2( 0, 6 )
@@ -220,12 +231,14 @@ collision_mask = 24
 
 [node name="Sprite" type="Sprite" parent="."]
 material = SubResource( 1 )
+scale = Vector2( 0.8, 0.8 )
 texture = ExtResource( 4 )
 flip_h = true
 hframes = 8
-frame = 7
+vframes = 2
 
 [node name="AnimationPlayer" type="AnimationPlayer" parent="."]
+playback_speed = 3.0
 anims/RESET = SubResource( 8 )
 anims/destroy = SubResource( 2 )
 anims/idle = SubResource( 3 )

+ 2 - 2
2d/platformer/src/Actors/Gun.gd → 2d/platformer/src/actors/gun.gd

@@ -4,8 +4,8 @@ extends Position2D
 # The Cooldown timer controls the cooldown duration between shots.
 
 
-const BULLET_VELOCITY = 500.0
-const Bullet = preload("res://src/Objects/Bullet.tscn")
+const BULLET_VELOCITY = 1000
+const Bullet = preload("res://src/objects/bullet.tscn")
 
 onready var sound_shoot = $Shoot
 onready var timer = $Cooldown

+ 7 - 6
2d/platformer/src/Actors/Player.gd → 2d/platformer/src/actors/player.gd

@@ -1,11 +1,12 @@
 class_name Player
 extends Actor
 
-
 # warning-ignore:unused_signal
 signal collect_coin()
 
 const FLOOR_DETECT_DISTANCE = 20.0
+const MOVE_SPEED = 1.3
+const JUMP_VELOCITY = 1.5
 
 export(String) var action_suffix = ""
 
@@ -15,7 +16,7 @@ onready var shoot_timer = $ShootAnimation
 onready var sprite = $Sprite
 onready var sound_jump = $Jump
 onready var gun = sprite.get_node(@"Gun")
-
+onready var orig_scale = sprite.scale
 
 func _ready():
 	# Static types are necessary here to avoid warnings.
@@ -72,9 +73,9 @@ func _physics_process(_delta):
 	# This will make Robi face left or right depending on the direction you move.
 	if direction.x != 0:
 		if direction.x > 0:
-			sprite.scale.x = 1
+			sprite.scale.x = orig_scale.x
 		else:
-			sprite.scale.x = -1
+			sprite.scale.x = -orig_scale.x
 
 	# We use the sprite's scale to store Robi’s look direction which allows us to shoot
 	# bullets forward.
@@ -93,8 +94,8 @@ func _physics_process(_delta):
 
 func get_direction():
 	return Vector2(
-		Input.get_action_strength("move_right" + action_suffix) - Input.get_action_strength("move_left" + action_suffix),
-		-1 if is_on_floor() and Input.is_action_just_pressed("jump" + action_suffix) else 0
+		MOVE_SPEED * (Input.get_action_strength("move_right" + action_suffix) - Input.get_action_strength("move_left" + action_suffix)),
+		-JUMP_VELOCITY if is_on_floor() and Input.is_action_just_pressed("jump" + action_suffix) else 0.0
 	)
 
 

+ 56 - 56
2d/platformer/src/Actors/Player.tscn → 2d/platformer/src/actors/player.tscn

@@ -1,14 +1,14 @@
 [gd_scene load_steps=21 format=2]
 
-[ext_resource path="res://src/Actors/Player.gd" type="Script" id=1]
-[ext_resource path="res://assets/art/player/robot_demo.png" type="Texture" id=2]
-[ext_resource path="res://assets/audio/sfx/jump.wav" type="AudioStream" id=3]
-[ext_resource path="res://assets/audio/sfx/shoot.wav" type="AudioStream" id=4]
-[ext_resource path="res://assets/art/ui/touch_button_left.png" type="Texture" id=5]
-[ext_resource path="res://assets/art/ui/touch_button_right.png" type="Texture" id=6]
+[ext_resource path="res://assets/art/ui/touch_button_left.png" type="Texture" id=1]
+[ext_resource path="res://assets/art/ui/touch_button_right.png" type="Texture" id=2]
+[ext_resource path="res://src/actors/player.gd" type="Script" id=3]
+[ext_resource path="res://assets/art/ui/touch_button_fire.png" type="Texture" id=4]
+[ext_resource path="res://assets/audio/sfx/jump.wav" type="AudioStream" id=5]
+[ext_resource path="res://assets/audio/sfx/shoot.wav" type="AudioStream" id=6]
 [ext_resource path="res://assets/art/ui/touch_button_jump.png" type="Texture" id=7]
-[ext_resource path="res://assets/art/ui/touch_button_fire.png" type="Texture" id=8]
-[ext_resource path="res://src/Actors/Gun.gd" type="Script" id=9]
+[ext_resource path="res://src/actors/gun.gd" type="Script" id=8]
+[ext_resource path="res://assets/art/player/robot.png" type="Texture" id=9]
 
 [sub_resource type="Animation" id=1]
 resource_name = "crouch"
@@ -25,7 +25,7 @@ tracks/0/keys = {
 "times": PoolRealArray( 0 ),
 "transitions": PoolRealArray( 1 ),
 "update": 1,
-"values": [ 22 ]
+"values": [ 42 ]
 }
 
 [sub_resource type="Animation" id=2]
@@ -43,7 +43,7 @@ tracks/0/keys = {
 "times": PoolRealArray( 0 ),
 "transitions": PoolRealArray( 1 ),
 "update": 1,
-"values": [ 21 ]
+"values": [ 48 ]
 }
 
 [sub_resource type="Animation" id=3]
@@ -65,7 +65,7 @@ tracks/0/keys = {
 }
 
 [sub_resource type="Animation" id=4]
-length = 7.0
+length = 2.0
 loop = true
 step = 0.25
 tracks/0/type = "value"
@@ -75,14 +75,14 @@ tracks/0/loop_wrap = true
 tracks/0/imported = false
 tracks/0/enabled = true
 tracks/0/keys = {
-"times": PoolRealArray( 0, 1.25, 1.5, 2, 4.5, 4.75, 5, 5.25 ),
-"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1 ),
+"times": PoolRealArray( 0, 0.5, 1, 1.5 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
 "update": 1,
-"values": [ 16, 17, 18, 16, 19, 20, 19, 16 ]
+"values": [ 30, 31, 32, 33 ]
 }
 
 [sub_resource type="Animation" id=5]
-length = 0.5
+length = 2.0
 loop = true
 step = 0.25
 tracks/0/type = "value"
@@ -92,10 +92,10 @@ tracks/0/loop_wrap = true
 tracks/0/imported = false
 tracks/0/enabled = true
 tracks/0/keys = {
-"times": PoolRealArray( 0 ),
-"transitions": PoolRealArray( 1 ),
+"times": PoolRealArray( 0, 0.5, 1, 1.5 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
 "update": 1,
-"values": [ 25 ]
+"values": [ 34, 35, 36, 37 ]
 }
 
 [sub_resource type="Animation" id=6]
@@ -109,10 +109,10 @@ tracks/0/loop_wrap = true
 tracks/0/imported = false
 tracks/0/enabled = true
 tracks/0/keys = {
-"times": PoolRealArray( 0, 0.25, 0.5 ),
-"transitions": PoolRealArray( 1, 1, 1 ),
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
 "update": 1,
-"values": [ 23, 24, 23 ]
+"values": [ 45 ]
 }
 
 [sub_resource type="Animation" id=7]
@@ -129,13 +129,12 @@ tracks/0/keys = {
 "times": PoolRealArray( 0 ),
 "transitions": PoolRealArray( 1 ),
 "update": 1,
-"values": [ 26 ]
+"values": [ 46 ]
 }
 
 [sub_resource type="Animation" id=8]
-length = 1.25
+length = 1.5
 loop = true
-step = 0.25
 tracks/0/type = "value"
 tracks/0/path = NodePath("Sprite:frame")
 tracks/0/interp = 1
@@ -143,16 +142,15 @@ tracks/0/loop_wrap = true
 tracks/0/imported = false
 tracks/0/enabled = true
 tracks/0/keys = {
-"times": PoolRealArray( 0, 0.25, 0.5, 0.75, 1, 1.25 ),
-"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ),
+"times": PoolRealArray( 0, 0.15, 0.3, 0.45, 0.6, 0.75, 0.9, 1.05, 1.2, 1.35 ),
+"transitions": PoolRealArray( 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 ]
 }
 
 [sub_resource type="Animation" id=9]
-length = 1.25
+length = 1.5
 loop = true
-step = 0.25
 tracks/0/type = "value"
 tracks/0/path = NodePath("Sprite:frame")
 tracks/0/interp = 1
@@ -160,10 +158,10 @@ tracks/0/loop_wrap = true
 tracks/0/imported = false
 tracks/0/enabled = true
 tracks/0/keys = {
-"times": PoolRealArray( 0, 0.25, 0.5, 0.75, 1, 1.25 ),
-"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ),
+"times": PoolRealArray( 0, 0.15, 0.3, 0.45, 0.6, 0.75, 0.9, 1.05, 1.2, 1.35 ),
+"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ),
 "update": 1,
-"values": [ 5, 6, 7, 8, 9, 5 ]
+"values": [ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 ]
 }
 
 [sub_resource type="Animation" id=10]
@@ -177,18 +175,20 @@ tracks/0/loop_wrap = true
 tracks/0/imported = false
 tracks/0/enabled = true
 tracks/0/keys = {
-"times": PoolRealArray( 0, 0.25, 0.5, 0.75, 1, 1.25 ),
-"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ),
+"times": PoolRealArray( 0, 0.25, 0.75, 1 ),
+"transitions": PoolRealArray( 1, 1, 1, 1 ),
 "update": 1,
-"values": [ 10, 11, 12, 13, 14, 5 ]
+"values": [ 34, 35, 36, 37 ]
 }
 
 [sub_resource type="RectangleShape2D" id=11]
-extents = Vector2( 10, 14 )
+extents = Vector2( 21.25, 27.25 )
 
 [node name="Player" type="KinematicBody2D"]
+scale = Vector2( 0.8, 0.8 )
 collision_mask = 30
-script = ExtResource( 1 )
+script = ExtResource( 3 )
+speed = Vector2( 164, 350 )
 
 [node name="ShootAnimation" type="Timer" parent="."]
 process_mode = 0
@@ -202,18 +202,18 @@ collision_mask = 8
 
 [node name="Sprite" type="Sprite" parent="."]
 position = Vector2( 0, -14 )
-texture = ExtResource( 2 )
-hframes = 16
-vframes = 2
-frame = 16
+texture = ExtResource( 9 )
+hframes = 8
+vframes = 8
+frame = 14
 
 [node name="Gun" type="Position2D" parent="Sprite"]
 position = Vector2( 14, 1 )
-script = ExtResource( 9 )
+script = ExtResource( 8 )
 
 [node name="Shoot" type="AudioStreamPlayer2D" parent="Sprite/Gun"]
 position = Vector2( -30.6589, -6.13176 )
-stream = ExtResource( 4 )
+stream = ExtResource( 6 )
 
 [node name="Cooldown" type="Timer" parent="Sprite/Gun"]
 process_mode = 0
@@ -235,8 +235,8 @@ anims/standing_weapon_ready = SubResource( 10 )
 
 [node name="Camera" type="Camera2D" parent="."]
 position = Vector2( 0, -28 )
+offset = Vector2( 0, 50 )
 current = true
-zoom = Vector2( 0.5, 0.5 )
 process_mode = 0
 
 [node name="CollisionShape2D" type="CollisionShape2D" parent="."]
@@ -244,37 +244,37 @@ position = Vector2( 0, -14 )
 shape = SubResource( 11 )
 
 [node name="Jump" type="AudioStreamPlayer2D" parent="."]
-stream = ExtResource( 3 )
+stream = ExtResource( 5 )
 
 [node name="UI" type="CanvasLayer" parent="."]
 layer = 0
 
 [node name="Left" type="TouchScreenButton" parent="UI"]
-position = Vector2( 27.7593, 360.87 )
-scale = Vector2( 1.49157, 1.46265 )
-normal = ExtResource( 5 )
+position = Vector2( 157, 813 )
+scale = Vector2( 2, 2 )
+normal = ExtResource( 1 )
 passby_press = true
 action = "move_left"
 visibility_mode = 1
 
 [node name="Right" type="TouchScreenButton" parent="UI"]
-position = Vector2( 121.542, 361.415 )
-scale = Vector2( 1.49157, 1.46265 )
-normal = ExtResource( 6 )
+position = Vector2( 425, 813 )
+scale = Vector2( 2, 2 )
+normal = ExtResource( 2 )
 passby_press = true
 action = "move_right"
 visibility_mode = 1
 
 [node name="Jump" type="TouchScreenButton" parent="UI"]
-position = Vector2( 666.224, 359.02 )
-scale = Vector2( 1.49157, 1.46265 )
+position = Vector2( 1871, 813 )
+scale = Vector2( 2, 2 )
 normal = ExtResource( 7 )
 action = "jump"
 visibility_mode = 1
 
 [node name="Fire" type="TouchScreenButton" parent="UI"]
-position = Vector2( 668.073, 262.788 )
-scale = Vector2( 1.49157, 1.46265 )
-normal = ExtResource( 8 )
+position = Vector2( 1870, 564 )
+scale = Vector2( 2, 2 )
+normal = ExtResource( 4 )
 action = "shoot"
 visibility_mode = 1

+ 0 - 0
2d/platformer/src/Level/Level.gd → 2d/platformer/src/level/level.gd


文件差异内容过多而无法显示
+ 71 - 0
2d/platformer/src/level/level.tscn


+ 0 - 0
2d/platformer/src/Level/Music.gd → 2d/platformer/src/level/music.gd


+ 65 - 83
2d/platformer/src/Level/ParallaxBackground.tscn → 2d/platformer/src/level/parallax_background.tscn

@@ -2,19 +2,26 @@
 
 [ext_resource path="res://assets/art/background/distant_platforms_2.png" type="Texture" id=1]
 [ext_resource path="res://assets/art/background/sky.png" type="Texture" id=2]
-[ext_resource path="res://assets/art/background/cloud_1.png" type="Texture" id=3]
-[ext_resource path="res://assets/art/background/cloud_2.png" type="Texture" id=4]
-[ext_resource path="res://assets/art/background/cloud_3.png" type="Texture" id=5]
+[ext_resource path="res://assets/art/background/cloud_3.png" type="Texture" id=3]
+[ext_resource path="res://assets/art/background/cloud_2.png" type="Texture" id=5]
 [ext_resource path="res://assets/art/background/distant_platforms_1.png" type="Texture" id=6]
+[ext_resource path="res://assets/art/background/cloud_1.png" type="Texture" id=7]
 
 [node name="ParallaxBackground" type="ParallaxBackground"]
-scroll_base_scale = Vector2( 0.4, 0 )
+scroll_base_scale = Vector2( 0.1, 0 )
 
 [node name="Sky" type="ParallaxLayer" parent="."]
-motion_mirroring = Vector2( 400, 0 )
+motion_scale = Vector2( 0.2, 1 )
 
 [node name="Sprite" type="Sprite" parent="Sky"]
-scale = Vector2( 64, 0.94 )
+position = Vector2( -809, 58 )
+scale = Vector2( 1.2, 1.2 )
+texture = ExtResource( 2 )
+centered = false
+
+[node name="Sprite2" type="Sprite" parent="Sky"]
+position = Vector2( -809, 0 )
+scale = Vector2( 1.2, 1.2 )
 texture = ExtResource( 2 )
 centered = false
 
@@ -25,132 +32,106 @@ motion_offset = Vector2( -550, 0 )
 [node name="CloudGroup1" type="Node2D" parent="Clouds"]
 position = Vector2( -780, 0 )
 
-[node name="Sprite1" type="Sprite" parent="Clouds/CloudGroup1"]
-position = Vector2( -200, 120 )
-texture = ExtResource( 3 )
-centered = false
-
 [node name="Sprite2" type="Sprite" parent="Clouds/CloudGroup1"]
-position = Vector2( 100, 10 )
-texture = ExtResource( 3 )
+position = Vector2( 470, 4 )
+texture = ExtResource( 5 )
 centered = false
 
 [node name="Sprite3" type="Sprite" parent="Clouds/CloudGroup1"]
-position = Vector2( -60, 40 )
-texture = ExtResource( 4 )
+position = Vector2( 726, 91 )
+texture = ExtResource( 3 )
 centered = false
 
 [node name="Sprite4" type="Sprite" parent="Clouds/CloudGroup1"]
-position = Vector2( 150, 65 )
-texture = ExtResource( 4 )
+position = Vector2( 1133, 113 )
+texture = ExtResource( 3 )
 centered = false
 
 [node name="Sprite5" type="Sprite" parent="Clouds/CloudGroup1"]
-position = Vector2( 15, 75 )
-texture = ExtResource( 5 )
+position = Vector2( 1513, 165 )
+texture = ExtResource( 3 )
 centered = false
 
 [node name="Sprite6" type="Sprite" parent="Clouds/CloudGroup1"]
-position = Vector2( 225, 35 )
-texture = ExtResource( 5 )
+position = Vector2( 396, 109 )
+texture = ExtResource( 7 )
 centered = false
 
 [node name="CloudGroup2" type="Node2D" parent="Clouds"]
 
 [node name="Sprite1" type="Sprite" parent="Clouds/CloudGroup2"]
-position = Vector2( -200, 120 )
-texture = ExtResource( 3 )
-centered = false
-
-[node name="Sprite2" type="Sprite" parent="Clouds/CloudGroup2"]
-position = Vector2( 100, 10 )
-texture = ExtResource( 3 )
-centered = false
-
-[node name="Sprite3" type="Sprite" parent="Clouds/CloudGroup2"]
-position = Vector2( -60, 40 )
-texture = ExtResource( 4 )
-centered = false
-
-[node name="Sprite4" type="Sprite" parent="Clouds/CloudGroup2"]
-position = Vector2( 150, 65 )
-texture = ExtResource( 4 )
+position = Vector2( -135, 213 )
+texture = ExtResource( 5 )
 centered = false
 
 [node name="Sprite5" type="Sprite" parent="Clouds/CloudGroup2"]
-position = Vector2( 15, 75 )
-texture = ExtResource( 5 )
+position = Vector2( 19, 77 )
+scale = Vector2( 0.5, 0.5 )
+texture = ExtResource( 7 )
 centered = false
 
-[node name="Sprite6" type="Sprite" parent="Clouds/CloudGroup2"]
-position = Vector2( 225, 35 )
-texture = ExtResource( 5 )
+[node name="Sprite7" type="Sprite" parent="Clouds/CloudGroup2"]
+position = Vector2( 140, 261 )
+scale = Vector2( 0.5, 0.5 )
+texture = ExtResource( 3 )
 centered = false
 
 [node name="CloudGroup3" type="Node2D" parent="Clouds"]
 position = Vector2( 390, 0 )
 
 [node name="Sprite1" type="Sprite" parent="Clouds/CloudGroup3"]
-position = Vector2( -200, 120 )
-texture = ExtResource( 3 )
-centered = false
-
-[node name="Sprite2" type="Sprite" parent="Clouds/CloudGroup3"]
-position = Vector2( 100, 10 )
-texture = ExtResource( 3 )
+position = Vector2( 1034, -60 )
+texture = ExtResource( 5 )
 centered = false
 
-[node name="Sprite3" type="Sprite" parent="Clouds/CloudGroup3"]
-position = Vector2( -60, 40 )
-texture = ExtResource( 4 )
+[node name="Sprite7" type="Sprite" parent="Clouds/CloudGroup3"]
+position = Vector2( 491, 251 )
+texture = ExtResource( 5 )
 centered = false
 
-[node name="Sprite4" type="Sprite" parent="Clouds/CloudGroup3"]
-position = Vector2( 150, 65 )
-texture = ExtResource( 4 )
+[node name="Sprite2" type="Sprite" parent="Clouds/CloudGroup3"]
+position = Vector2( 545, 108 )
+texture = ExtResource( 5 )
 centered = false
 
-[node name="Sprite5" type="Sprite" parent="Clouds/CloudGroup3"]
-position = Vector2( 15, 75 )
-texture = ExtResource( 5 )
+[node name="Sprite3" type="Sprite" parent="Clouds/CloudGroup3"]
+position = Vector2( -164, 212 )
+texture = ExtResource( 7 )
 centered = false
 
-[node name="Sprite6" type="Sprite" parent="Clouds/CloudGroup3"]
-position = Vector2( 225, 35 )
-texture = ExtResource( 5 )
+[node name="Sprite8" type="Sprite" parent="Clouds/CloudGroup3"]
+position = Vector2( 287, 220 )
+scale = Vector2( 0.5, 0.5 )
+texture = ExtResource( 7 )
 centered = false
 
 [node name="CloudGroup4" type="Node2D" parent="Clouds"]
 position = Vector2( 780, 0 )
 
 [node name="Sprite1" type="Sprite" parent="Clouds/CloudGroup4"]
-position = Vector2( -200, 120 )
-texture = ExtResource( 3 )
+position = Vector2( -293, 64 )
+texture = ExtResource( 5 )
 centered = false
 
 [node name="Sprite2" type="Sprite" parent="Clouds/CloudGroup4"]
-position = Vector2( 100, 10 )
-texture = ExtResource( 3 )
-centered = false
-
-[node name="Sprite3" type="Sprite" parent="Clouds/CloudGroup4"]
-position = Vector2( -60, 40 )
-texture = ExtResource( 4 )
+position = Vector2( -229, 199 )
+texture = ExtResource( 5 )
 centered = false
 
-[node name="Sprite4" type="Sprite" parent="Clouds/CloudGroup4"]
-position = Vector2( 150, 65 )
-texture = ExtResource( 4 )
+[node name="Sprite5" type="Sprite" parent="Clouds/CloudGroup4"]
+position = Vector2( 83, 115 )
+texture = ExtResource( 7 )
 centered = false
 
-[node name="Sprite5" type="Sprite" parent="Clouds/CloudGroup4"]
-position = Vector2( 15, 75 )
-texture = ExtResource( 5 )
+[node name="Sprite7" type="Sprite" parent="Clouds/CloudGroup4"]
+position = Vector2( 7, 177 )
+texture = ExtResource( 7 )
 centered = false
 
 [node name="Sprite6" type="Sprite" parent="Clouds/CloudGroup4"]
-position = Vector2( 225, 35 )
-texture = ExtResource( 5 )
+position = Vector2( 226, 14 )
+scale = Vector2( 0.5, 0.5 )
+texture = ExtResource( 7 )
 centered = false
 
 [node name="Mountains2" type="ParallaxLayer" parent="."]
@@ -158,17 +139,18 @@ position = Vector2( 0, 243 )
 motion_scale = Vector2( 0.2, 1 )
 
 [node name="Sprite" type="Sprite" parent="Mountains2"]
-position = Vector2( 0, -64 )
+position = Vector2( 567, 301.2 )
 texture = ExtResource( 1 )
 region_enabled = true
-region_rect = Rect2( 0, 0, 2048, 128 )
+region_rect = Rect2( 0, 0, 2048, 251.104 )
 
 [node name="Mountains1" type="ParallaxLayer" parent="."]
 position = Vector2( 0, 246 )
 motion_scale = Vector2( 0.4, 1 )
 
 [node name="Sprite" type="Sprite" parent="Mountains1"]
-position = Vector2( 0, -64 )
+position = Vector2( 437, 278.2 )
+scale = Vector2( 1.2, 1.2 )
 texture = ExtResource( 6 )
 region_enabled = true
-region_rect = Rect2( 0, 0, 2048, 128 )
+region_rect = Rect2( 0, 0, 2048, 251.104 )

+ 0 - 0
2d/platformer/src/Main/Game.gd → 2d/platformer/src/main/game.gd


+ 8 - 5
2d/platformer/src/Main/Game.tscn → 2d/platformer/src/main/game.tscn

@@ -1,18 +1,21 @@
 [gd_scene load_steps=5 format=2]
 
-[ext_resource path="res://src/UserInterface/PauseMenu.tscn" type="PackedScene" id=1]
-[ext_resource path="res://src/Main/Game.gd" type="Script" id=2]
-[ext_resource path="res://src/Level/Level.tscn" type="PackedScene" id=3]
-[ext_resource path="res://src/Actors/Player.tscn" type="PackedScene" id=4]
+[ext_resource path="res://src/ui/pause_menu.tscn" type="PackedScene" id=1]
+[ext_resource path="res://src/main/game.gd" type="Script" id=2]
+[ext_resource path="res://src/level/level.tscn" type="PackedScene" id=3]
+[ext_resource path="res://src/actors/player.tscn" type="PackedScene" id=4]
 
 [node name="Game" type="Node"]
 pause_mode = 2
 script = ExtResource( 2 )
 
 [node name="Level" parent="." instance=ExtResource( 3 )]
+z_index = -1
 
 [node name="Player" parent="Level" instance=ExtResource( 4 )]
-position = Vector2( 90, 546 )
+position = Vector2( 157, 648 )
+scale = Vector2( 1, 1 )
+z_index = 3
 
 [node name="InterfaceLayer" type="CanvasLayer" parent="."]
 layer = 100

+ 5 - 5
2d/platformer/src/Main/Splitscreen.tscn → 2d/platformer/src/main/split_screen.tscn

@@ -1,10 +1,10 @@
 [gd_scene load_steps=6 format=2]
 
-[ext_resource path="res://src/UserInterface/PauseMenu.tscn" type="PackedScene" id=1]
-[ext_resource path="res://src/Main/Game.gd" type="Script" id=2]
-[ext_resource path="res://src/Level/Level.tscn" type="PackedScene" id=3]
-[ext_resource path="res://src/Actors/Player.tscn" type="PackedScene" id=4]
-[ext_resource path="res://src/Level/ParallaxBackground.tscn" type="PackedScene" id=5]
+[ext_resource path="res://src/ui/pause_menu.tscn" type="PackedScene" id=1]
+[ext_resource path="res://src/main/game.gd" type="Script" id=2]
+[ext_resource path="res://src/level/level.tscn" type="PackedScene" id=3]
+[ext_resource path="res://src/actors/player.tscn" type="PackedScene" id=4]
+[ext_resource path="res://src/level/parallax_background.tscn" type="PackedScene" id=5]
 
 [node name="Splitscreen" type="Node"]
 pause_mode = 2

+ 0 - 0
2d/platformer/src/Objects/Bullet.gd → 2d/platformer/src/objects/bullet.gd


+ 5 - 2
2d/platformer/src/Objects/Bullet.tscn → 2d/platformer/src/objects/bullet.tscn

@@ -1,7 +1,7 @@
 [gd_scene load_steps=8 format=2]
 
 [ext_resource path="res://assets/art/player/bullet/bullet.png" type="Texture" id=1]
-[ext_resource path="res://src/Objects/Bullet.gd" type="Script" id=2]
+[ext_resource path="res://src/objects/bullet.gd" type="Script" id=2]
 
 [sub_resource type="CanvasItemMaterial" id=1]
 
@@ -57,8 +57,11 @@ tracks/2/keys = {
 
 [node name="Bullet" type="RigidBody2D"]
 material = SubResource( 1 )
+z_index = 5
 collision_layer = 0
 collision_mask = 26
+mass = 0.0283333
+gravity_scale = 0.1
 continuous_cd = 2
 contacts_reported = 1
 contact_monitor = true
@@ -67,7 +70,7 @@ script = ExtResource( 2 )
 [node name="Particles2D" type="CPUParticles2D" parent="."]
 material = SubResource( 2 )
 emitting = false
-lifetime = 0.3
+lifetime = 0.1
 speed_scale = 3.0
 local_coords = false
 texture = ExtResource( 1 )

+ 0 - 0
2d/platformer/src/Objects/Coin.gd → 2d/platformer/src/objects/coin.gd


+ 10 - 8
2d/platformer/src/Objects/Coin.tscn → 2d/platformer/src/objects/coin.tscn

@@ -1,8 +1,8 @@
 [gd_scene load_steps=7 format=2]
 
-[ext_resource path="res://assets/art/coin/coin.png" type="Texture" id=2]
+[ext_resource path="res://assets/art/coin/coin.png" type="Texture" id=1]
 [ext_resource path="res://assets/audio/sfx/coin_pickup.wav" type="AudioStream" id=3]
-[ext_resource path="res://src/Objects/Coin.gd" type="Script" id=4]
+[ext_resource path="res://src/objects/coin.gd" type="Script" id=4]
 
 [sub_resource type="Animation" id=1]
 resource_name = "picked"
@@ -15,10 +15,10 @@ tracks/0/loop_wrap = true
 tracks/0/imported = false
 tracks/0/enabled = true
 tracks/0/keys = {
-"times": PoolRealArray( 0 ),
-"transitions": PoolRealArray( 1 ),
+"times": PoolRealArray( 0, 1.25 ),
+"transitions": PoolRealArray( 1, 1 ),
 "update": 0,
-"values": [ 0 ]
+"values": [ 0, 11 ]
 }
 tracks/1/type = "method"
 tracks/1/path = NodePath(".")
@@ -137,7 +137,7 @@ tracks/3/keys = {
 }
 
 [sub_resource type="CircleShape2D" id=3]
-radius = 5.0
+radius = 10.0499
 
 [node name="Coin" type="Area2D"]
 collision_layer = 0
@@ -146,8 +146,10 @@ monitorable = false
 script = ExtResource( 4 )
 
 [node name="Sprite" type="Sprite" parent="."]
-texture = ExtResource( 2 )
-hframes = 4
+scale = Vector2( 0.65, 0.65 )
+texture = ExtResource( 1 )
+hframes = 8
+vframes = 2
 
 [node name="AnimationPlayer" type="AnimationPlayer" parent="."]
 autoplay = "spinning"

+ 178 - 0
2d/platformer/src/platforms/platform.tscn

@@ -0,0 +1,178 @@
+[gd_scene load_steps=10 format=2]
+
+[ext_resource path="res://assets/shaders/wind_sway.tres" type="Material" id=1]
+[ext_resource path="res://assets/art/platforms/moving_platform.png" type="Texture" id=2]
+[ext_resource path="res://assets/art/props/grass_1.png" type="Texture" id=3]
+[ext_resource path="res://assets/art/props/grass_2.png" type="Texture" id=4]
+[ext_resource path="res://assets/art/props/grass_3.png" type="Texture" id=5]
+[ext_resource path="res://assets/art/props/bush_1.png" type="Texture" id=6]
+[ext_resource path="res://assets/art/props/vine_2.png" type="Texture" id=7]
+[ext_resource path="res://assets/art/props/vine_1.png" type="Texture" id=8]
+
+[sub_resource type="RectangleShape2D" id=1]
+extents = Vector2( 96, 13.5 )
+
+[node name="Platform" type="KinematicBody2D"]
+z_index = -1
+collision_layer = 8
+collision_mask = 0
+collision/safe_margin = 0.12
+motion/sync_to_physics = true
+
+[node name="Sprite" type="Sprite" parent="."]
+texture = ExtResource( 2 )
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
+position = Vector2( 0, -7.5 )
+shape = SubResource( 1 )
+one_way_collision = true
+
+[node name="g67" type="Sprite" parent="."]
+material = ExtResource( 1 )
+position = Vector2( 77, -37 )
+scale = Vector2( 0.8, 0.8 )
+z_index = -1
+texture = ExtResource( 3 )
+
+[node name="g69" type="Sprite" parent="."]
+material = ExtResource( 1 )
+position = Vector2( -1.99999, -38 )
+scale = Vector2( 0.8, 0.8 )
+z_index = -1
+texture = ExtResource( 3 )
+
+[node name="g68" type="Sprite" parent="."]
+material = ExtResource( 1 )
+position = Vector2( -52, -35 )
+scale = Vector2( 0.8, 0.8 )
+z_index = -1
+texture = ExtResource( 3 )
+
+[node name="g1" type="Sprite" parent="."]
+material = ExtResource( 1 )
+position = Vector2( -36, -35 )
+scale = Vector2( 0.8, 0.8 )
+z_index = -1
+texture = ExtResource( 5 )
+
+[node name="g3" type="Sprite" parent="."]
+material = ExtResource( 1 )
+position = Vector2( -82, -33 )
+scale = Vector2( 0.8, 0.8 )
+z_index = -1
+texture = ExtResource( 5 )
+
+[node name="g2" type="Sprite" parent="."]
+material = ExtResource( 1 )
+position = Vector2( 31, -36 )
+scale = Vector2( 0.8, 0.8 )
+z_index = -1
+texture = ExtResource( 5 )
+
+[node name="g4" type="Sprite" parent="."]
+material = ExtResource( 1 )
+position = Vector2( -22, -30 )
+scale = Vector2( 0.8, 0.8 )
+z_index = -1
+texture = ExtResource( 5 )
+
+[node name="g14" type="Sprite" parent="."]
+material = ExtResource( 1 )
+position = Vector2( 51, -38 )
+scale = Vector2( 0.8, 0.8 )
+z_index = -1
+texture = ExtResource( 4 )
+
+[node name="g17" type="Sprite" parent="."]
+material = ExtResource( 1 )
+position = Vector2( 65, -32 )
+scale = Vector2( 0.8, 0.8 )
+z_index = -1
+texture = ExtResource( 4 )
+
+[node name="g16" type="Sprite" parent="."]
+material = ExtResource( 1 )
+position = Vector2( 17, -36 )
+scale = Vector2( 0.8, 0.8 )
+z_index = -1
+texture = ExtResource( 4 )
+
+[node name="g15" type="Sprite" parent="."]
+material = ExtResource( 1 )
+position = Vector2( -71, -35 )
+scale = Vector2( 0.8, 0.8 )
+z_index = -1
+texture = ExtResource( 4 )
+
+[node name="B3" type="Sprite" parent="."]
+material = ExtResource( 1 )
+position = Vector2( -2, -58 )
+rotation = -3.14159
+scale = Vector2( 1, -1 )
+z_index = -2
+texture = ExtResource( 6 )
+
+[node name="B4" type="Sprite" parent="."]
+material = ExtResource( 1 )
+position = Vector2( 37, -42 )
+rotation = -3.14159
+scale = Vector2( 1, -1 )
+z_index = -2
+texture = ExtResource( 6 )
+
+[node name="B5" type="Sprite" parent="."]
+material = ExtResource( 1 )
+position = Vector2( -32, -41 )
+rotation = -3.14159
+scale = Vector2( -1, -1 )
+z_index = -2
+texture = ExtResource( 6 )
+
+[node name="v31" type="Sprite" parent="."]
+material = ExtResource( 1 )
+position = Vector2( -21, 18 )
+scale = Vector2( 1, -1 )
+z_index = 1
+texture = ExtResource( 8 )
+
+[node name="v35" type="Sprite" parent="."]
+material = ExtResource( 1 )
+position = Vector2( 35, 7 )
+scale = Vector2( 1, -1 )
+z_index = -1
+texture = ExtResource( 8 )
+
+[node name="v32" type="Sprite" parent="."]
+material = ExtResource( 1 )
+position = Vector2( 87, 16 )
+scale = Vector2( 1, -1 )
+z_index = 1
+texture = ExtResource( 8 )
+
+[node name="v33" type="Sprite" parent="."]
+material = ExtResource( 1 )
+position = Vector2( -85, 15 )
+scale = Vector2( 1, -1 )
+z_index = 1
+texture = ExtResource( 7 )
+
+[node name="v34" type="Sprite" parent="."]
+material = ExtResource( 1 )
+position = Vector2( 56, 18 )
+scale = Vector2( 1, -1 )
+z_index = 1
+texture = ExtResource( 7 )
+
+[node name="v36" type="Sprite" parent="."]
+material = ExtResource( 1 )
+position = Vector2( -9, 11 )
+scale = Vector2( 1, -1 )
+z_index = -1
+texture = ExtResource( 7 )
+
+[node name="v37" type="Sprite" parent="."]
+material = ExtResource( 1 )
+position = Vector2( -61, 7 )
+scale = Vector2( 1, -1 )
+z_index = -1
+texture = ExtResource( 7 )

+ 0 - 0
2d/platformer/src/UserInterface/CoinsCounter.gd → 2d/platformer/src/ui/coins_counter.gd


+ 89 - 0
2d/platformer/src/ui/coins_counter.tscn

@@ -0,0 +1,89 @@
+[gd_scene load_steps=18 format=2]
+
+[ext_resource path="res://assets/theme/user_interface.tres" type="Theme" id=1]
+[ext_resource path="res://assets/art/coin/coin.png" type="Texture" id=2]
+[ext_resource path="res://src/ui/coins_counter.gd" type="Script" id=3]
+
+[sub_resource type="StyleBoxFlat" id=1]
+bg_color = Color( 0, 0, 0, 0.5 )
+
+[sub_resource type="AtlasTexture" id=7]
+atlas = ExtResource( 2 )
+region = Rect2( 0, 0, 32, 32 )
+
+[sub_resource type="AtlasTexture" id=8]
+atlas = ExtResource( 2 )
+region = Rect2( 32, 0, 32, 32 )
+
+[sub_resource type="AtlasTexture" id=9]
+atlas = ExtResource( 2 )
+region = Rect2( 64, 0, 32, 32 )
+
+[sub_resource type="AtlasTexture" id=10]
+atlas = ExtResource( 2 )
+region = Rect2( 96, 0, 32, 32 )
+
+[sub_resource type="AtlasTexture" id=11]
+atlas = ExtResource( 2 )
+region = Rect2( 128, 0, 32, 32 )
+
+[sub_resource type="AtlasTexture" id=12]
+atlas = ExtResource( 2 )
+region = Rect2( 160, 0, 32, 32 )
+
+[sub_resource type="AtlasTexture" id=13]
+atlas = ExtResource( 2 )
+region = Rect2( 192, 0, 32, 32 )
+
+[sub_resource type="AtlasTexture" id=14]
+atlas = ExtResource( 2 )
+region = Rect2( 224, 0, 32, 32 )
+
+[sub_resource type="AtlasTexture" id=15]
+atlas = ExtResource( 2 )
+region = Rect2( 0, 32, 32, 32 )
+
+[sub_resource type="AtlasTexture" id=16]
+atlas = ExtResource( 2 )
+region = Rect2( 32, 32, 32, 32 )
+
+[sub_resource type="AtlasTexture" id=17]
+atlas = ExtResource( 2 )
+region = Rect2( 64, 32, 32, 32 )
+
+[sub_resource type="AtlasTexture" id=18]
+atlas = ExtResource( 2 )
+region = Rect2( 96, 32, 32, 32 )
+
+[sub_resource type="SpriteFrames" id=6]
+animations = [ {
+"frames": [ SubResource( 7 ), SubResource( 8 ), SubResource( 9 ), SubResource( 10 ), SubResource( 11 ), SubResource( 12 ), SubResource( 13 ), SubResource( 14 ), SubResource( 15 ), SubResource( 16 ), SubResource( 17 ), SubResource( 18 ) ],
+"loop": true,
+"name": "coin_spinning",
+"speed": 6.5
+} ]
+
+[node name="CoinsCounter" type="Panel"]
+margin_left = 5.0
+margin_top = 5.0
+margin_right = 100.0
+margin_bottom = 45.0
+rect_min_size = Vector2( 100, 45 )
+theme = ExtResource( 1 )
+custom_styles/panel = SubResource( 1 )
+script = ExtResource( 3 )
+
+[node name="Label" type="Label" parent="."]
+anchor_right = 1.0
+anchor_bottom = 1.0
+margin_right = -8.0
+text = "100"
+align = 2
+valign = 1
+autowrap = true
+
+[node name="AnimatedSprite" type="AnimatedSprite" parent="."]
+position = Vector2( 21.5, 22.5 )
+frames = SubResource( 6 )
+animation = "coin_spinning"
+speed_scale = 2.0

+ 0 - 0
2d/platformer/src/UserInterface/PauseMenu.gd → 2d/platformer/src/ui/pause_menu.gd


+ 6 - 12
2d/platformer/src/UserInterface/PauseMenu.tscn → 2d/platformer/src/ui/pause_menu.tscn

@@ -1,38 +1,31 @@
-[gd_scene load_steps=6 format=2]
+[gd_scene load_steps=7 format=2]
 
 [ext_resource path="res://assets/theme/user_interface.tres" type="Theme" id=1]
-[ext_resource path="res://src/UserInterface/PauseMenu.gd" type="Script" id=2]
+[ext_resource path="res://src/ui/pause_menu.gd" type="Script" id=2]
 [ext_resource path="res://assets/theme/fonts/kenney_mini_square.tres" type="DynamicFontData" id=3]
-[ext_resource path="res://src/UserInterface/CoinsCounter.tscn" type="PackedScene" id=4]
+[ext_resource path="res://src/ui/coins_counter.tscn" type="PackedScene" id=4]
 
 [sub_resource type="DynamicFont" id=1]
 size = 44
 font_data = ExtResource( 3 )
 
+[sub_resource type="StyleBoxTexture" id=2]
+
 [node name="PauseMenu" type="Control"]
 pause_mode = 2
 anchor_right = 1.0
 anchor_bottom = 1.0
 theme = ExtResource( 1 )
 script = ExtResource( 2 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
 
 [node name="ColorRect" type="ColorRect" parent="."]
 anchor_right = 1.0
 anchor_bottom = 1.0
 color = Color( 0, 0, 0, 0.294118 )
-__meta__ = {
-"_edit_use_anchors_": false
-}
 
 [node name="CenterContainer" type="CenterContainer" parent="ColorRect"]
 anchor_right = 1.0
 anchor_bottom = 1.0
-__meta__ = {
-"_edit_use_anchors_": false
-}
 
 [node name="VBoxContainer" type="VBoxContainer" parent="ColorRect/CenterContainer"]
 margin_left = 250.0
@@ -51,6 +44,7 @@ margin_top = 7.0
 margin_right = 300.0
 margin_bottom = 62.0
 custom_fonts/font = SubResource( 1 )
+custom_styles/normal = SubResource( 2 )
 text = "Game Paused"
 align = 1
 valign = 1

部分文件因为文件数量过多而无法显示