Jelajahi Sumber

Remake art assets of the 2D platformer demo

valentinas 2 tahun lalu
induk
melakukan
c17d803a1b
78 mengubah file dengan 1430 tambahan dan 599 penghapusan
  1. TEMPAT SAMPAH
      2d/platformer/assets/art/background/cloud_1.png
  2. TEMPAT SAMPAH
      2d/platformer/assets/art/background/cloud_2.png
  3. TEMPAT SAMPAH
      2d/platformer/assets/art/background/cloud_3.png
  4. TEMPAT SAMPAH
      2d/platformer/assets/art/background/distant_platforms_1.png
  5. TEMPAT SAMPAH
      2d/platformer/assets/art/background/distant_platforms_2.png
  6. TEMPAT SAMPAH
      2d/platformer/assets/art/background/sky.png
  7. TEMPAT SAMPAH
      2d/platformer/assets/art/coin/coin.png
  8. TEMPAT SAMPAH
      2d/platformer/assets/art/enemy/enemy.png
  9. TEMPAT SAMPAH
      2d/platformer/assets/art/platforms/moving_platform.png
  10. TEMPAT SAMPAH
      2d/platformer/assets/art/platforms/one_way_platform.png
  11. TEMPAT SAMPAH
      2d/platformer/assets/art/player/bullet/bullet.png
  12. TEMPAT SAMPAH
      2d/platformer/assets/art/player/robot.png
  13. 3 3
      2d/platformer/assets/art/player/robot.png.import
  14. TEMPAT SAMPAH
      2d/platformer/assets/art/player/robot_demo.png
  15. TEMPAT SAMPAH
      2d/platformer/assets/art/props/bush_1.png
  16. 35 0
      2d/platformer/assets/art/props/bush_1.png.import
  17. TEMPAT SAMPAH
      2d/platformer/assets/art/props/fern_1.png
  18. 35 0
      2d/platformer/assets/art/props/fern_1.png.import
  19. TEMPAT SAMPAH
      2d/platformer/assets/art/props/flower_1.png
  20. 35 0
      2d/platformer/assets/art/props/flower_1.png.import
  21. TEMPAT SAMPAH
      2d/platformer/assets/art/props/grass_1.png
  22. 35 0
      2d/platformer/assets/art/props/grass_1.png.import
  23. TEMPAT SAMPAH
      2d/platformer/assets/art/props/grass_2.png
  24. 35 0
      2d/platformer/assets/art/props/grass_2.png.import
  25. TEMPAT SAMPAH
      2d/platformer/assets/art/props/grass_3.png
  26. 35 0
      2d/platformer/assets/art/props/grass_3.png.import
  27. TEMPAT SAMPAH
      2d/platformer/assets/art/props/ground_flowers_1.png
  28. 35 0
      2d/platformer/assets/art/props/ground_flowers_1.png.import
  29. TEMPAT SAMPAH
      2d/platformer/assets/art/props/rock_1.png
  30. 35 0
      2d/platformer/assets/art/props/rock_1.png.import
  31. TEMPAT SAMPAH
      2d/platformer/assets/art/props/tree_1.png
  32. 35 0
      2d/platformer/assets/art/props/tree_1.png.import
  33. TEMPAT SAMPAH
      2d/platformer/assets/art/props/tree_2.png
  34. 35 0
      2d/platformer/assets/art/props/tree_2.png.import
  35. TEMPAT SAMPAH
      2d/platformer/assets/art/props/vine_1.png
  36. 35 0
      2d/platformer/assets/art/props/vine_1.png.import
  37. TEMPAT SAMPAH
      2d/platformer/assets/art/props/vine_2.png
  38. 35 0
      2d/platformer/assets/art/props/vine_2.png.import
  39. TEMPAT SAMPAH
      2d/platformer/assets/art/tileset/tiles_demo.png
  40. 352 232
      2d/platformer/assets/art/tileset/tileset.tres
  41. TEMPAT SAMPAH
      2d/platformer/assets/art/ui/touch_button_fire.png
  42. TEMPAT SAMPAH
      2d/platformer/assets/art/ui/touch_button_jump.png
  43. TEMPAT SAMPAH
      2d/platformer/assets/art/ui/touch_button_left.png
  44. TEMPAT SAMPAH
      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. TEMPAT SAMPAH
      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

TEMPAT SAMPAH
2d/platformer/assets/art/background/cloud_1.png


TEMPAT SAMPAH
2d/platformer/assets/art/background/cloud_2.png


TEMPAT SAMPAH
2d/platformer/assets/art/background/cloud_3.png


TEMPAT SAMPAH
2d/platformer/assets/art/background/distant_platforms_1.png


TEMPAT SAMPAH
2d/platformer/assets/art/background/distant_platforms_2.png


TEMPAT SAMPAH
2d/platformer/assets/art/background/sky.png


TEMPAT SAMPAH
2d/platformer/assets/art/coin/coin.png


TEMPAT SAMPAH
2d/platformer/assets/art/enemy/enemy.png


TEMPAT SAMPAH
2d/platformer/assets/art/platforms/moving_platform.png


TEMPAT SAMPAH
2d/platformer/assets/art/platforms/one_way_platform.png


TEMPAT SAMPAH
2d/platformer/assets/art/player/bullet/bullet.png


TEMPAT SAMPAH
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]
 

TEMPAT SAMPAH
2d/platformer/assets/art/player/robot_demo.png


TEMPAT SAMPAH
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

TEMPAT SAMPAH
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

TEMPAT SAMPAH
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

TEMPAT SAMPAH
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

TEMPAT SAMPAH
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

TEMPAT SAMPAH
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

TEMPAT SAMPAH
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

TEMPAT SAMPAH
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

TEMPAT SAMPAH
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

TEMPAT SAMPAH
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

TEMPAT SAMPAH
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

TEMPAT SAMPAH
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

TEMPAT SAMPAH
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

TEMPAT SAMPAH
2d/platformer/assets/art/ui/touch_button_fire.png


TEMPAT SAMPAH
2d/platformer/assets/art/ui/touch_button_jump.png


TEMPAT SAMPAH
2d/platformer/assets/art/ui/touch_button_left.png


TEMPAT SAMPAH
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

TEMPAT SAMPAH
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

File diff ditekan karena terlalu besar
+ 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


File diff ditekan karena terlalu besar
+ 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

Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini