Compare commits
10 Commits
bac0a8c5f7
...
58eeef60dc
Author | SHA1 | Date | |
---|---|---|---|
58eeef60dc | |||
d73931dad4 | |||
cc737f22cf | |||
87b85cae43 | |||
039dc1d5e5 | |||
df154a786c | |||
9b6a4f38bd | |||
a098155b0f | |||
26af7a591d | |||
37b96c0f11 |
@@ -30,9 +30,9 @@ func load_game() -> bool:
|
|||||||
print("Game state loaded from: ", save_path)
|
print("Game state loaded from: ", save_path)
|
||||||
print("Player state: ", save_data["player_state"])
|
print("Player state: ", save_data["player_state"])
|
||||||
gm.player_state = save_data["player_state"]
|
gm.player_state = save_data["player_state"]
|
||||||
var skills: Array[String] = []
|
var skills: Array[SkillData] = []
|
||||||
for skill_name in gm.player_state["unlocked_skills"]:
|
for skill in gm.player_state["unlocked_skills"]:
|
||||||
skills.append(skill_name)
|
skills.append(skill)
|
||||||
|
|
||||||
gm.unlock_skills(skills)
|
gm.unlock_skills(skills)
|
||||||
return true
|
return true
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
[gd_scene load_steps=9 format=3 uid="uid://bymro4t7angv5"]
|
[gd_scene load_steps=10 format=3 uid="uid://bymro4t7angv5"]
|
||||||
|
|
||||||
[ext_resource type="Texture2D" uid="uid://djifxc5x0dyrw" path="res://sprites/ppc_tileset.png" id="1_1c3jb"]
|
[ext_resource type="Texture2D" uid="uid://djifxc5x0dyrw" path="res://sprites/ppc_tileset.png" id="1_1c3jb"]
|
||||||
[ext_resource type="Script" uid="uid://cdnwrn8v05qhi" path="res://scripts/components/bullet_component.gd" id="2_i6t5k"]
|
[ext_resource type="Script" uid="uid://cdnwrn8v05qhi" path="res://scripts/components/bullet_component.gd" id="2_i6t5k"]
|
||||||
@@ -7,6 +7,7 @@
|
|||||||
[ext_resource type="Script" uid="uid://bgty7040ams6s" path="res://scripts/components/projectile_init_component.gd" id="5_2vqt8"]
|
[ext_resource type="Script" uid="uid://bgty7040ams6s" path="res://scripts/components/projectile_init_component.gd" id="5_2vqt8"]
|
||||||
[ext_resource type="Script" uid="uid://873un8agkyja" path="res://scripts/components/launch_component.gd" id="6_d0tcd"]
|
[ext_resource type="Script" uid="uid://873un8agkyja" path="res://scripts/components/launch_component.gd" id="6_d0tcd"]
|
||||||
[ext_resource type="Script" uid="uid://cvcnfrr1udco5" path="res://scripts/components/straight_motion_component.gd" id="7_r41xl"]
|
[ext_resource type="Script" uid="uid://cvcnfrr1udco5" path="res://scripts/components/straight_motion_component.gd" id="7_r41xl"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://c1iorglk708g0" path="res://objects/fxs/terrain_hit_fx.tscn" id="8_d0tcd"]
|
||||||
|
|
||||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_ar0xf"]
|
[sub_resource type="RectangleShape2D" id="RectangleShape2D_ar0xf"]
|
||||||
size = Vector2(16, 10)
|
size = Vector2(16, 10)
|
||||||
@@ -24,10 +25,12 @@ hframes = 12
|
|||||||
vframes = 12
|
vframes = 12
|
||||||
frame = 80
|
frame = 80
|
||||||
|
|
||||||
[node name="BulletComponent" type="Node" parent="." node_paths=PackedStringArray("root", "area2d")]
|
[node name="BulletComponent" type="Node" parent="." node_paths=PackedStringArray("root", "area2d", "hit_terrain_fx", "bullet_sprite")]
|
||||||
script = ExtResource("2_i6t5k")
|
script = ExtResource("2_i6t5k")
|
||||||
root = NodePath("..")
|
root = NodePath("..")
|
||||||
area2d = NodePath("..")
|
area2d = NodePath("..")
|
||||||
|
hit_terrain_fx = NodePath("../TerrainHitFX")
|
||||||
|
bullet_sprite = NodePath("../Sprite2D")
|
||||||
|
|
||||||
[node name="VisibleOnScreenNotifier2D" type="VisibleOnScreenNotifier2D" parent="."]
|
[node name="VisibleOnScreenNotifier2D" type="VisibleOnScreenNotifier2D" parent="."]
|
||||||
position = Vector2(0, 2.38419e-07)
|
position = Vector2(0, 2.38419e-07)
|
||||||
@@ -60,3 +63,5 @@ script = ExtResource("7_r41xl")
|
|||||||
root = NodePath("..")
|
root = NodePath("..")
|
||||||
launch_component = NodePath("../LaunchComponent")
|
launch_component = NodePath("../LaunchComponent")
|
||||||
metadata/_custom_type_script = "uid://cvcnfrr1udco5"
|
metadata/_custom_type_script = "uid://cvcnfrr1udco5"
|
||||||
|
|
||||||
|
[node name="TerrainHitFX" parent="." instance=ExtResource("8_d0tcd")]
|
||||||
|
@@ -1,12 +1,12 @@
|
|||||||
[gd_scene load_steps=47 format=3 uid="uid://bqi5s710xb1ju"]
|
[gd_scene load_steps=48 format=3 uid="uid://bqi5s710xb1ju"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://ccuddyoakg04u" path="res://scripts/player.gd" id="1_8j4h4"]
|
[ext_resource type="Script" uid="uid://ccuddyoakg04u" path="res://scripts/player.gd" id="1_8j4h4"]
|
||||||
[ext_resource type="Texture2D" uid="uid://b7gp0gqvkv8j4" path="res://sprites/MrBrick_base.png" id="2_bc55y"]
|
|
||||||
[ext_resource type="Shader" uid="uid://bs4xvm4qkurpr" path="res://shaders/hit_flash.tres" id="2_lgb3u"]
|
[ext_resource type="Shader" uid="uid://bs4xvm4qkurpr" path="res://shaders/hit_flash.tres" id="2_lgb3u"]
|
||||||
[ext_resource type="Texture2D" uid="uid://jl1gwqchhpdc" path="res://sprites/left_eye.png" id="3_2srrh"]
|
[ext_resource type="Texture2D" uid="uid://jl1gwqchhpdc" path="res://sprites/left_eye.png" id="3_2srrh"]
|
||||||
[ext_resource type="Script" uid="uid://b3mrdvre1y567" path="res://scripts/components/ship_movement.gd" id="3_p4n66"]
|
[ext_resource type="Script" uid="uid://b3mrdvre1y567" path="res://scripts/components/ship_movement.gd" id="3_p4n66"]
|
||||||
[ext_resource type="Texture2D" uid="uid://iiawtnwmeny3" path="res://sprites/right_eye.png" id="4_ccn81"]
|
[ext_resource type="Texture2D" uid="uid://iiawtnwmeny3" path="res://sprites/right_eye.png" id="4_ccn81"]
|
||||||
[ext_resource type="Script" uid="uid://oxeqvxkgj87j" path="res://scripts/components/flip_player.gd" id="5_geu10"]
|
[ext_resource type="Script" uid="uid://oxeqvxkgj87j" path="res://scripts/components/flip_player.gd" id="5_geu10"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://0l454rfplmqg" path="res://sprites/MrBrick_base-sheet.png" id="5_yysbb"]
|
||||||
[ext_resource type="Script" uid="uid://qeu80jy4vmuf" path="res://scripts/components/score.gd" id="6_fowa2"]
|
[ext_resource type="Script" uid="uid://qeu80jy4vmuf" path="res://scripts/components/score.gd" id="6_fowa2"]
|
||||||
[ext_resource type="Script" uid="uid://btfsq0bvtrx3t" path="res://scripts/components/health.gd" id="7_tqjk8"]
|
[ext_resource type="Script" uid="uid://btfsq0bvtrx3t" path="res://scripts/components/health.gd" id="7_tqjk8"]
|
||||||
[ext_resource type="Script" uid="uid://dkpu3121y88oo" path="res://scripts/components/player_death.gd" id="8_1v23d"]
|
[ext_resource type="Script" uid="uid://dkpu3121y88oo" path="res://scripts/components/player_death.gd" id="8_1v23d"]
|
||||||
@@ -37,6 +37,7 @@
|
|||||||
[ext_resource type="Script" uid="uid://d1ctdx52gskv1" path="res://scripts/components/ship_shooter.gd" id="34_gwc8i"]
|
[ext_resource type="Script" uid="uid://d1ctdx52gskv1" path="res://scripts/components/ship_shooter.gd" id="34_gwc8i"]
|
||||||
[ext_resource type="PackedScene" uid="uid://dtem8jgcyoqar" path="res://objects/entities/green_laser.tscn" id="36_oxudy"]
|
[ext_resource type="PackedScene" uid="uid://dtem8jgcyoqar" path="res://objects/entities/green_laser.tscn" id="36_oxudy"]
|
||||||
[ext_resource type="Script" uid="uid://cfeoalic0mu2j" path="res://scripts/components/kill_player_out_of_screen.gd" id="37_oxudy"]
|
[ext_resource type="Script" uid="uid://cfeoalic0mu2j" path="res://scripts/components/kill_player_out_of_screen.gd" id="37_oxudy"]
|
||||||
|
[ext_resource type="Script" uid="uid://d32kd83lf86iy" path="res://scripts/components/progressive_damage_component.gd" id="38_o1ihh"]
|
||||||
|
|
||||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_xoue7"]
|
[sub_resource type="ShaderMaterial" id="ShaderMaterial_xoue7"]
|
||||||
shader = ExtResource("2_lgb3u")
|
shader = ExtResource("2_lgb3u")
|
||||||
@@ -116,7 +117,8 @@ metadata/_custom_type_script = "uid://b3mrdvre1y567"
|
|||||||
|
|
||||||
[node name="Base" type="Sprite2D" parent="Graphics/Root"]
|
[node name="Base" type="Sprite2D" parent="Graphics/Root"]
|
||||||
material = SubResource("ShaderMaterial_xoue7")
|
material = SubResource("ShaderMaterial_xoue7")
|
||||||
texture = ExtResource("2_bc55y")
|
texture = ExtResource("5_yysbb")
|
||||||
|
hframes = 5
|
||||||
|
|
||||||
[node name="Left Eye" type="Sprite2D" parent="Graphics/Root"]
|
[node name="Left Eye" type="Sprite2D" parent="Graphics/Root"]
|
||||||
position = Vector2(-7, -6)
|
position = Vector2(-7, -6)
|
||||||
@@ -277,5 +279,13 @@ script = ExtResource("37_oxudy")
|
|||||||
screen_notifier = NodePath("../VisibleOnScreenNotifier2D")
|
screen_notifier = NodePath("../VisibleOnScreenNotifier2D")
|
||||||
health_component = NodePath("../HealthComponent")
|
health_component = NodePath("../HealthComponent")
|
||||||
|
|
||||||
|
[node name="ProgressiveDamageComponent" type="Node" parent="." node_paths=PackedStringArray("health_component", "sprite", "platform_movement")]
|
||||||
|
script = ExtResource("38_o1ihh")
|
||||||
|
health_component = NodePath("../HealthComponent")
|
||||||
|
sprite = NodePath("../Graphics/Root/Base")
|
||||||
|
platform_movement = NodePath("../Movements/PlatformMovement")
|
||||||
|
min_jump_height = 100.0
|
||||||
|
jump_reduction_percentage = 0.15
|
||||||
|
|
||||||
[connection signal="on_death" from="HealthComponent" to="PlayerDeathComponent" method="_on_health_component_on_death"]
|
[connection signal="on_death" from="HealthComponent" to="PlayerDeathComponent" method="_on_health_component_on_death"]
|
||||||
[connection signal="on_health_change" from="HealthComponent" to="KnockbackComponent" method="_on_health_component_on_health_change"]
|
[connection signal="on_health_change" from="HealthComponent" to="KnockbackComponent" method="_on_health_component_on_health_change"]
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
[gd_scene load_steps=9 format=3 uid="uid://bhc7y4xugu4q7"]
|
[gd_scene load_steps=10 format=3 uid="uid://bhc7y4xugu4q7"]
|
||||||
|
|
||||||
[ext_resource type="Texture2D" uid="uid://djifxc5x0dyrw" path="res://sprites/ppc_tileset.png" id="1_w543f"]
|
[ext_resource type="Texture2D" uid="uid://djifxc5x0dyrw" path="res://sprites/ppc_tileset.png" id="1_w543f"]
|
||||||
[ext_resource type="Script" uid="uid://dkmxhjtmu5xlb" path="res://scripts/components/damage_component.gd" id="2_ll0xw"]
|
[ext_resource type="Script" uid="uid://dkmxhjtmu5xlb" path="res://scripts/components/damage_component.gd" id="2_ll0xw"]
|
||||||
@@ -7,6 +7,7 @@
|
|||||||
[ext_resource type="Script" uid="uid://bvsgg8lu0a8m6" path="res://scripts/components/lifetime_component.gd" id="5_qsc5m"]
|
[ext_resource type="Script" uid="uid://bvsgg8lu0a8m6" path="res://scripts/components/lifetime_component.gd" id="5_qsc5m"]
|
||||||
[ext_resource type="Script" uid="uid://873un8agkyja" path="res://scripts/components/launch_component.gd" id="6_6th6w"]
|
[ext_resource type="Script" uid="uid://873un8agkyja" path="res://scripts/components/launch_component.gd" id="6_6th6w"]
|
||||||
[ext_resource type="Script" uid="uid://cvcnfrr1udco5" path="res://scripts/components/straight_motion_component.gd" id="7_e0mqp"]
|
[ext_resource type="Script" uid="uid://cvcnfrr1udco5" path="res://scripts/components/straight_motion_component.gd" id="7_e0mqp"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://c1iorglk708g0" path="res://objects/fxs/terrain_hit_fx.tscn" id="8_6th6w"]
|
||||||
|
|
||||||
[sub_resource type="CircleShape2D" id="CircleShape2D_txsw8"]
|
[sub_resource type="CircleShape2D" id="CircleShape2D_txsw8"]
|
||||||
radius = 4.0
|
radius = 4.0
|
||||||
@@ -59,8 +60,13 @@ script = ExtResource("7_e0mqp")
|
|||||||
root = NodePath("..")
|
root = NodePath("..")
|
||||||
launch_component = NodePath("../LaunchComponent")
|
launch_component = NodePath("../LaunchComponent")
|
||||||
|
|
||||||
[node name="BulletComponent" type="Node" parent="." node_paths=PackedStringArray("root", "area2d")]
|
[node name="BulletComponent" type="Node" parent="." node_paths=PackedStringArray("root", "area2d", "hit_terrain_fx", "bullet_sprite")]
|
||||||
script = ExtResource("3_keogl")
|
script = ExtResource("3_keogl")
|
||||||
root = NodePath("..")
|
root = NodePath("..")
|
||||||
area2d = NodePath("..")
|
area2d = NodePath("..")
|
||||||
|
hit_terrain_fx = NodePath("../TerrainHitFX")
|
||||||
|
bullet_sprite = NodePath("../Sprite2D")
|
||||||
metadata/_custom_type_script = "uid://cdnwrn8v05qhi"
|
metadata/_custom_type_script = "uid://cdnwrn8v05qhi"
|
||||||
|
|
||||||
|
[node name="TerrainHitFX" parent="." instance=ExtResource("8_6th6w")]
|
||||||
|
z_index = 3
|
||||||
|
@@ -126,9 +126,11 @@ area2d = NodePath("../Hitbox")
|
|||||||
[node name="PeriodicShootingComponent" type="Node" parent="." node_paths=PackedStringArray("root", "bullet_spawn_right", "bullet_spawn_left")]
|
[node name="PeriodicShootingComponent" type="Node" parent="." node_paths=PackedStringArray("root", "bullet_spawn_right", "bullet_spawn_left")]
|
||||||
script = ExtResource("6_4ajjm")
|
script = ExtResource("6_4ajjm")
|
||||||
bullet_scene = ExtResource("7_4ajjm")
|
bullet_scene = ExtResource("7_4ajjm")
|
||||||
|
shoot_interval = 2.0
|
||||||
root = NodePath("..")
|
root = NodePath("..")
|
||||||
bullet_spawn_right = NodePath("../laser spawn point right")
|
bullet_spawn_right = NodePath("../laser spawn point right")
|
||||||
bullet_spawn_left = NodePath("../laser spawn point left")
|
bullet_spawn_left = NodePath("../laser spawn point left")
|
||||||
|
shooting_interval_variation = 0.5
|
||||||
|
|
||||||
[node name="EnemyDeathComponent" type="Node" parent="." node_paths=PackedStringArray("root", "collision_shape_2d", "health_component")]
|
[node name="EnemyDeathComponent" type="Node" parent="." node_paths=PackedStringArray("root", "collision_shape_2d", "health_component")]
|
||||||
script = ExtResource("7_uyhuj")
|
script = ExtResource("7_uyhuj")
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
[gd_scene load_steps=9 format=3 uid="uid://dtem8jgcyoqar"]
|
[gd_scene load_steps=10 format=3 uid="uid://dtem8jgcyoqar"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://dkmxhjtmu5xlb" path="res://scripts/components/damage_component.gd" id="1_nuljg"]
|
[ext_resource type="Script" uid="uid://dkmxhjtmu5xlb" path="res://scripts/components/damage_component.gd" id="1_nuljg"]
|
||||||
[ext_resource type="Script" uid="uid://cdnwrn8v05qhi" path="res://scripts/components/bullet_component.gd" id="2_1gu8o"]
|
[ext_resource type="Script" uid="uid://cdnwrn8v05qhi" path="res://scripts/components/bullet_component.gd" id="2_1gu8o"]
|
||||||
@@ -7,16 +7,18 @@
|
|||||||
[ext_resource type="Script" uid="uid://873un8agkyja" path="res://scripts/components/launch_component.gd" id="5_772bd"]
|
[ext_resource type="Script" uid="uid://873un8agkyja" path="res://scripts/components/launch_component.gd" id="5_772bd"]
|
||||||
[ext_resource type="Script" uid="uid://bvsgg8lu0a8m6" path="res://scripts/components/lifetime_component.gd" id="6_vd16u"]
|
[ext_resource type="Script" uid="uid://bvsgg8lu0a8m6" path="res://scripts/components/lifetime_component.gd" id="6_vd16u"]
|
||||||
[ext_resource type="Script" uid="uid://bgty7040ams6s" path="res://scripts/components/projectile_init_component.gd" id="7_1gu8o"]
|
[ext_resource type="Script" uid="uid://bgty7040ams6s" path="res://scripts/components/projectile_init_component.gd" id="7_1gu8o"]
|
||||||
|
[ext_resource type="Script" uid="uid://bpy6xtfm8l3hy" path="res://scripts/components/trigger_lever_component.gd" id="8_2vcrp"]
|
||||||
|
|
||||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_n4uav"]
|
[sub_resource type="RectangleShape2D" id="RectangleShape2D_n4uav"]
|
||||||
size = Vector2(16, 2)
|
size = Vector2(16, 2)
|
||||||
|
|
||||||
[node name="Red Laser" type="Area2D"]
|
[node name="Green Laser" type="Area2D"]
|
||||||
collision_layer = 16
|
collision_layer = 16
|
||||||
collision_mask = 9
|
collision_mask = 9
|
||||||
|
|
||||||
[node name="DamageComponent" type="Node" parent="." node_paths=PackedStringArray("area2d")]
|
[node name="DamageComponent" type="Node" parent="." node_paths=PackedStringArray("area2d")]
|
||||||
script = ExtResource("1_nuljg")
|
script = ExtResource("1_nuljg")
|
||||||
|
damage = 1.0
|
||||||
area2d = NodePath("..")
|
area2d = NodePath("..")
|
||||||
metadata/_custom_type_script = "uid://dkmxhjtmu5xlb"
|
metadata/_custom_type_script = "uid://dkmxhjtmu5xlb"
|
||||||
|
|
||||||
@@ -72,3 +74,7 @@ autostart = true
|
|||||||
script = ExtResource("7_1gu8o")
|
script = ExtResource("7_1gu8o")
|
||||||
launch_component = NodePath("../LaunchComponent")
|
launch_component = NodePath("../LaunchComponent")
|
||||||
metadata/_custom_type_script = "uid://bgty7040ams6s"
|
metadata/_custom_type_script = "uid://bgty7040ams6s"
|
||||||
|
|
||||||
|
[node name="TriggerLeverComponent" type="Node" parent="."]
|
||||||
|
script = ExtResource("8_2vcrp")
|
||||||
|
metadata/_custom_type_script = "uid://bpy6xtfm8l3hy"
|
||||||
|
@@ -9,7 +9,7 @@ size = Vector2(12, 13)
|
|||||||
|
|
||||||
[node name="Lever" type="Area2D" groups=["levers"]]
|
[node name="Lever" type="Area2D" groups=["levers"]]
|
||||||
collision_layer = 0
|
collision_layer = 0
|
||||||
collision_mask = 4
|
collision_mask = 20
|
||||||
|
|
||||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||||
position = Vector2(0, 1.5)
|
position = Vector2(0, 1.5)
|
||||||
|
32
objects/entities/small_heal_potion.tscn
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
[gd_scene load_steps=6 format=3 uid="uid://t6h2ra7kjyq"]
|
||||||
|
|
||||||
|
[ext_resource type="Texture2D" uid="uid://1x4iq56rhc18" path="res://sprites/health_potions.png" id="1_p0sdo"]
|
||||||
|
[ext_resource type="Script" uid="uid://cegdd1sravi5m" path="res://scripts/components/heal_component.gd" id="2_piwlp"]
|
||||||
|
[ext_resource type="Script" uid="uid://pa1bwc4no08q" path="res://scripts/components/collectable.gd" id="3_k2tv6"]
|
||||||
|
[ext_resource type="Resource" uid="uid://2tl3yoh202no" path="res://resources/collectables/small_health_potion.tres" id="4_p0sdo"]
|
||||||
|
|
||||||
|
[sub_resource type="CircleShape2D" id="CircleShape2D_uj2v5"]
|
||||||
|
radius = 7.0
|
||||||
|
|
||||||
|
[node name="SmallHealPotion" type="Area2D"]
|
||||||
|
collision_layer = 0
|
||||||
|
collision_mask = 4
|
||||||
|
|
||||||
|
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||||
|
shape = SubResource("CircleShape2D_uj2v5")
|
||||||
|
|
||||||
|
[node name="Sprite2D" type="Sprite2D" parent="."]
|
||||||
|
texture = ExtResource("1_p0sdo")
|
||||||
|
hframes = 4
|
||||||
|
frame = 1
|
||||||
|
|
||||||
|
[node name="HealComponent" type="Node" parent="." node_paths=PackedStringArray("collectable")]
|
||||||
|
script = ExtResource("2_piwlp")
|
||||||
|
collectable = NodePath("../CollectableComponent")
|
||||||
|
|
||||||
|
[node name="CollectableComponent" type="Node" parent="." node_paths=PackedStringArray("area2d", "collision_shape")]
|
||||||
|
script = ExtResource("3_k2tv6")
|
||||||
|
area2d = NodePath("..")
|
||||||
|
collision_shape = NodePath("../CollisionShape2D")
|
||||||
|
collectable_data = ExtResource("4_p0sdo")
|
||||||
|
metadata/_custom_type_script = "uid://pa1bwc4no08q"
|
14
objects/entities/spaceship_exit.tscn
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
[gd_scene load_steps=3 format=3 uid="uid://dkqa3q6j2gof4"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://ybmwls7hv8j3" path="res://scripts/components/spaceship_exit_component.gd" id="1_1cmfv"]
|
||||||
|
|
||||||
|
[sub_resource type="RectangleShape2D" id="RectangleShape2D_njt46"]
|
||||||
|
|
||||||
|
[node name="Spaceship exit" type="Area2D" node_paths=PackedStringArray("area2d")]
|
||||||
|
collision_layer = 0
|
||||||
|
collision_mask = 4
|
||||||
|
script = ExtResource("1_1cmfv")
|
||||||
|
area2d = NodePath(".")
|
||||||
|
|
||||||
|
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||||
|
shape = SubResource("RectangleShape2D_njt46")
|
49
objects/forest_parallax_background.tscn
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
[gd_scene load_steps=5 format=3 uid="uid://blpk55m4e7y3a"]
|
||||||
|
|
||||||
|
[ext_resource type="Texture2D" uid="uid://055an6f4wluo" path="res://sprites/backgrounds/forest/PS_Forest_01.png" id="1_vpdhu"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://dk8846ai1ht6i" path="res://sprites/backgrounds/forest/PS_Forest_02.png" id="2_11jh3"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://bl3iv071i34ge" path="res://sprites/backgrounds/forest/PS_Forest_03.png" id="3_j8xur"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://bcrqiyfk6fpgq" path="res://sprites/backgrounds/forest/PS_Forest_04.png" id="4_qdo8p"]
|
||||||
|
|
||||||
|
[node name="ParallaxBackground" type="ParallaxBackground"]
|
||||||
|
|
||||||
|
[node name="Sky" type="ParallaxLayer" parent="."]
|
||||||
|
motion_scale = Vector2(0, 0)
|
||||||
|
motion_mirroring = Vector2(480, 0)
|
||||||
|
|
||||||
|
[node name="Sprite2D" type="Sprite2D" parent="Sky"]
|
||||||
|
texture_repeat = 2
|
||||||
|
scale = Vector2(1.5, 1.013)
|
||||||
|
texture = ExtResource("1_vpdhu")
|
||||||
|
centered = false
|
||||||
|
|
||||||
|
[node name="Clouds" type="ParallaxLayer" parent="."]
|
||||||
|
motion_scale = Vector2(0.1, 0.1)
|
||||||
|
motion_mirroring = Vector2(480, 0)
|
||||||
|
|
||||||
|
[node name="Sprite2D" type="Sprite2D" parent="Clouds"]
|
||||||
|
texture_repeat = 2
|
||||||
|
scale = Vector2(1.5, 1.5)
|
||||||
|
texture = ExtResource("2_11jh3")
|
||||||
|
centered = false
|
||||||
|
|
||||||
|
[node name="Hills" type="ParallaxLayer" parent="."]
|
||||||
|
motion_scale = Vector2(0.2, 0.2)
|
||||||
|
motion_mirroring = Vector2(480, 0)
|
||||||
|
|
||||||
|
[node name="Sprite2D" type="Sprite2D" parent="Hills"]
|
||||||
|
texture_repeat = 2
|
||||||
|
scale = Vector2(1.5, 1.5)
|
||||||
|
texture = ExtResource("3_j8xur")
|
||||||
|
centered = false
|
||||||
|
|
||||||
|
[node name="Ground" type="ParallaxLayer" parent="."]
|
||||||
|
motion_scale = Vector2(0.4, 0.4)
|
||||||
|
motion_offset = Vector2(0.1, 0)
|
||||||
|
motion_mirroring = Vector2(480, 0)
|
||||||
|
|
||||||
|
[node name="Sprite2D" type="Sprite2D" parent="Ground"]
|
||||||
|
texture_repeat = 2
|
||||||
|
scale = Vector2(1.5, 1.5)
|
||||||
|
texture = ExtResource("4_qdo8p")
|
||||||
|
centered = false
|
80
objects/fxs/terrain_hit_fx.tscn
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
[gd_scene load_steps=8 format=3 uid="uid://c1iorglk708g0"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://djfejwp6e402k" path="res://scripts/components/terrain_hit_fx.gd" id="1_22p6x"]
|
||||||
|
|
||||||
|
[sub_resource type="GradientTexture1D" id="GradientTexture1D_6dbny"]
|
||||||
|
|
||||||
|
[sub_resource type="Curve" id="Curve_22p6x"]
|
||||||
|
_data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(0.743682, 0.699254), -0.879484, -0.879484, 0, 0, Vector2(1, 0.0104477), 2.07887, 0.0, 0, 0]
|
||||||
|
point_count = 3
|
||||||
|
|
||||||
|
[sub_resource type="CurveTexture" id="CurveTexture_nm1g5"]
|
||||||
|
curve = SubResource("Curve_22p6x")
|
||||||
|
|
||||||
|
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_hryxg"]
|
||||||
|
lifetime_randomness = 0.1
|
||||||
|
particle_flag_disable_z = true
|
||||||
|
inherit_velocity_ratio = -0.5
|
||||||
|
direction = Vector3(0, 0, 0)
|
||||||
|
spread = 180.0
|
||||||
|
initial_velocity_max = 32.0
|
||||||
|
gravity = Vector3(0, 98, 0)
|
||||||
|
scale_curve = SubResource("CurveTexture_nm1g5")
|
||||||
|
color = Color(0.47451, 0.254902, 0, 1)
|
||||||
|
color_ramp = SubResource("GradientTexture1D_6dbny")
|
||||||
|
turbulence_noise_speed = Vector3(2.73, 5.225, 0)
|
||||||
|
|
||||||
|
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_hyh53"]
|
||||||
|
lifetime_randomness = 0.2
|
||||||
|
particle_flag_disable_z = true
|
||||||
|
inherit_velocity_ratio = -0.5
|
||||||
|
direction = Vector3(0, 0, 0)
|
||||||
|
spread = 180.0
|
||||||
|
initial_velocity_max = 32.0
|
||||||
|
gravity = Vector3(0, 98, 0)
|
||||||
|
scale_min = 0.8
|
||||||
|
scale_max = 0.9
|
||||||
|
scale_curve = SubResource("CurveTexture_nm1g5")
|
||||||
|
color = Color(0.47451, 0.254902, 0, 1)
|
||||||
|
turbulence_noise_speed = Vector3(2.73, 5.225, 0)
|
||||||
|
|
||||||
|
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_n5pa8"]
|
||||||
|
lifetime_randomness = 0.1
|
||||||
|
particle_flag_disable_z = true
|
||||||
|
inherit_velocity_ratio = -0.5
|
||||||
|
direction = Vector3(0, 0, 0)
|
||||||
|
spread = 180.0
|
||||||
|
initial_velocity_max = 32.0
|
||||||
|
gravity = Vector3(0, 98, 0)
|
||||||
|
scale_min = 0.9
|
||||||
|
scale_curve = SubResource("CurveTexture_nm1g5")
|
||||||
|
color = Color(0.764706, 0.443137, 0, 1)
|
||||||
|
turbulence_noise_speed = Vector3(2.73, 5.225, 0)
|
||||||
|
|
||||||
|
[node name="TerrainHitFX" type="GPUParticles2D"]
|
||||||
|
emitting = false
|
||||||
|
amount = 24
|
||||||
|
lifetime = 0.35
|
||||||
|
one_shot = true
|
||||||
|
explosiveness = 1.0
|
||||||
|
fixed_fps = 24
|
||||||
|
process_material = SubResource("ParticleProcessMaterial_hryxg")
|
||||||
|
script = ExtResource("1_22p6x")
|
||||||
|
|
||||||
|
[node name="TerrainHitFX2" type="GPUParticles2D" parent="."]
|
||||||
|
emitting = false
|
||||||
|
amount = 24
|
||||||
|
lifetime = 0.35
|
||||||
|
one_shot = true
|
||||||
|
explosiveness = 1.0
|
||||||
|
fixed_fps = 24
|
||||||
|
process_material = SubResource("ParticleProcessMaterial_hyh53")
|
||||||
|
|
||||||
|
[node name="TerrainHitFX" type="GPUParticles2D" parent="."]
|
||||||
|
emitting = false
|
||||||
|
amount = 24
|
||||||
|
lifetime = 0.35
|
||||||
|
one_shot = true
|
||||||
|
explosiveness = 1.0
|
||||||
|
fixed_fps = 24
|
||||||
|
process_material = SubResource("ParticleProcessMaterial_n5pa8")
|
@@ -1,13 +1,15 @@
|
|||||||
[gd_scene load_steps=5 format=3 uid="uid://b4eifkc31jsun"]
|
[gd_scene load_steps=7 format=3 uid="uid://b4eifkc31jsun"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://dd30bgqiagi25" path="res://scripts/game_manager.gd" id="1_58t7u"]
|
[ext_resource type="Script" uid="uid://dd30bgqiagi25" path="res://scripts/game_manager.gd" id="1_58t7u"]
|
||||||
[ext_resource type="PackedScene" uid="uid://bol7g83v2accs" path="res://scenes/level_village_1.tscn" id="2_bentb"]
|
[ext_resource type="PackedScene" uid="uid://bol7g83v2accs" path="res://scenes/level_village_1.tscn" id="2_bentb"]
|
||||||
[ext_resource type="PackedScene" uid="uid://chqb11pfoqmeb" path="res://scenes/level_village_2.tscn" id="3_ajlkg"]
|
[ext_resource type="PackedScene" uid="uid://chqb11pfoqmeb" path="res://scenes/level_village_2.tscn" id="3_ajlkg"]
|
||||||
[ext_resource type="PackedScene" uid="uid://h60obxmju6mo" path="res://scenes/level_village_3.tscn" id="4_se5tb"]
|
[ext_resource type="PackedScene" uid="uid://h60obxmju6mo" path="res://scenes/level_village_3.tscn" id="4_se5tb"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://bhad760x3vvco" path="res://scenes/level_village_4.tscn" id="5_mnosh"]
|
||||||
|
[ext_resource type="Script" uid="uid://bydv4g1n5s3nf" path="res://scripts/screenshot.gd" id="6_t2tr6"]
|
||||||
|
|
||||||
[node name="GameManager" type="Node"]
|
[node name="GameManager" type="Node"]
|
||||||
script = ExtResource("1_58t7u")
|
script = ExtResource("1_58t7u")
|
||||||
level_scenes = Array[PackedScene]([ExtResource("2_bentb"), ExtResource("3_ajlkg"), ExtResource("4_se5tb")])
|
level_scenes = Array[PackedScene]([ExtResource("2_bentb"), ExtResource("3_ajlkg"), ExtResource("4_se5tb"), ExtResource("5_mnosh")])
|
||||||
player_state = {
|
player_state = {
|
||||||
"coins": 0,
|
"coins": 0,
|
||||||
"current_level": 0,
|
"current_level": 0,
|
||||||
@@ -15,3 +17,6 @@ player_state = {
|
|||||||
"unlocked_levels": [ExtResource("4_se5tb")],
|
"unlocked_levels": [ExtResource("4_se5tb")],
|
||||||
"unlocked_skills": []
|
"unlocked_skills": []
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[node name="Node" type="Node" parent="."]
|
||||||
|
script = ExtResource("6_t2tr6")
|
||||||
|
@@ -1,8 +1,9 @@
|
|||||||
[gd_scene load_steps=4 format=3 uid="uid://cb0mnye1ki5a6"]
|
[gd_scene load_steps=5 format=3 uid="uid://cb0mnye1ki5a6"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://cie33tct7ehf0" path="res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd" id="1_5abjq"]
|
[ext_resource type="Script" uid="uid://cie33tct7ehf0" path="res://addons/phantom_camera/scripts/phantom_camera_host/phantom_camera_host.gd" id="1_5abjq"]
|
||||||
[ext_resource type="PackedScene" uid="uid://dtjrpkhssq32a" path="res://objects/bg.tscn" id="2_nd58g"]
|
[ext_resource type="PackedScene" uid="uid://dtjrpkhssq32a" path="res://objects/bg.tscn" id="2_nd58g"]
|
||||||
[ext_resource type="PackedScene" uid="uid://bva54p1fxomu2" path="res://objects/parallax_background.tscn" id="3_cdmor"]
|
[ext_resource type="PackedScene" uid="uid://bva54p1fxomu2" path="res://objects/village_parallax_background.tscn" id="3_cdmor"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://blpk55m4e7y3a" path="res://objects/forest_parallax_background.tscn" id="4_nd58g"]
|
||||||
|
|
||||||
[node name="Camera2D" type="Camera2D"]
|
[node name="Camera2D" type="Camera2D"]
|
||||||
limit_left = 320
|
limit_left = 320
|
||||||
@@ -22,4 +23,7 @@ z_index = -3
|
|||||||
scale = Vector2(1.5, 1.5)
|
scale = Vector2(1.5, 1.5)
|
||||||
metadata/_edit_lock_ = true
|
metadata/_edit_lock_ = true
|
||||||
|
|
||||||
[node name="ParallaxBackground" parent="." instance=ExtResource("3_cdmor")]
|
[node name="VillageParallaxBackground" parent="." instance=ExtResource("3_cdmor")]
|
||||||
|
|
||||||
|
[node name="ParallaxBackground" parent="." instance=ExtResource("4_nd58g")]
|
||||||
|
visible = false
|
||||||
|
@@ -48,14 +48,17 @@ theme_override_constants/margin_bottom = 8
|
|||||||
[node name="HBoxContainer" type="HBoxContainer" parent="PanelContainer/MarginContainer"]
|
[node name="HBoxContainer" type="HBoxContainer" parent="PanelContainer/MarginContainer"]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
theme_override_constants/separation = 8
|
theme_override_constants/separation = 8
|
||||||
|
alignment = 1
|
||||||
|
|
||||||
[node name="Health Label" type="Label" parent="PanelContainer/MarginContainer/HBoxContainer"]
|
[node name="Health Label" type="Label" parent="PanelContainer/MarginContainer/HBoxContainer"]
|
||||||
|
visible = false
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
text = "HEALTH_LABEL"
|
text = "HEALTH_LABEL"
|
||||||
label_settings = ExtResource("1_4dsh5")
|
label_settings = ExtResource("1_4dsh5")
|
||||||
uppercase = true
|
uppercase = true
|
||||||
|
|
||||||
[node name="ProgressBar" type="ProgressBar" parent="PanelContainer/MarginContainer/HBoxContainer"]
|
[node name="ProgressBar" type="ProgressBar" parent="PanelContainer/MarginContainer/HBoxContainer"]
|
||||||
|
visible = false
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_horizontal = 3
|
size_flags_horizontal = 3
|
||||||
size_flags_vertical = 1
|
size_flags_vertical = 1
|
||||||
@@ -68,12 +71,16 @@ show_percentage = false
|
|||||||
|
|
||||||
[node name="Lives" type="Label" parent="PanelContainer/MarginContainer/HBoxContainer"]
|
[node name="Lives" type="Label" parent="PanelContainer/MarginContainer/HBoxContainer"]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
|
size_flags_horizontal = 3
|
||||||
text = "LIVES_LABEL"
|
text = "LIVES_LABEL"
|
||||||
label_settings = ExtResource("1_4dsh5")
|
label_settings = ExtResource("1_4dsh5")
|
||||||
|
horizontal_alignment = 1
|
||||||
uppercase = true
|
uppercase = true
|
||||||
|
|
||||||
[node name="Coins label" type="Label" parent="PanelContainer/MarginContainer/HBoxContainer"]
|
[node name="Coins label" type="Label" parent="PanelContainer/MarginContainer/HBoxContainer"]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
|
size_flags_horizontal = 3
|
||||||
text = "COINS_LABEL"
|
text = "COINS_LABEL"
|
||||||
label_settings = ExtResource("1_4dsh5")
|
label_settings = ExtResource("1_4dsh5")
|
||||||
|
horizontal_alignment = 1
|
||||||
uppercase = true
|
uppercase = true
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
[gd_scene load_steps=11 format=3 uid="uid://dlm2ri562fynd"]
|
[gd_scene load_steps=12 format=3 uid="uid://dlm2ri562fynd"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://duifmqjarjpuv" path="res://scripts/ui/marketplace.gd" id="1_ncpyg"]
|
[ext_resource type="Script" uid="uid://duifmqjarjpuv" path="res://scripts/ui/marketplace.gd" id="1_ncpyg"]
|
||||||
[ext_resource type="FontFile" uid="uid://xm0vbusjr7b7" path="res://fonts/PressStart2P-Regular.ttf" id="2_ho1tm"]
|
[ext_resource type="FontFile" uid="uid://xm0vbusjr7b7" path="res://fonts/PressStart2P-Regular.ttf" id="2_ho1tm"]
|
||||||
@@ -9,11 +9,12 @@
|
|||||||
[ext_resource type="Resource" uid="uid://cx5fsbexblp60" path="res://resources/skills/ice_brick.tres" id="6_6665y"]
|
[ext_resource type="Resource" uid="uid://cx5fsbexblp60" path="res://resources/skills/ice_brick.tres" id="6_6665y"]
|
||||||
[ext_resource type="Resource" uid="uid://d3bjre2etov1n" path="res://resources/skills/magnetic.tres" id="7_ukny6"]
|
[ext_resource type="Resource" uid="uid://d3bjre2etov1n" path="res://resources/skills/magnetic.tres" id="7_ukny6"]
|
||||||
[ext_resource type="PackedScene" uid="uid://dtl03rod7l2t0" path="res://objects/ui/marketplace_button.tscn" id="9_ode10"]
|
[ext_resource type="PackedScene" uid="uid://dtl03rod7l2t0" path="res://objects/ui/marketplace_button.tscn" id="9_ode10"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://ceqjwmihj70lt" path="res://objects/ui/skill_button.tscn" id="10_c7w2b"]
|
||||||
|
|
||||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ode10"]
|
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ode10"]
|
||||||
bg_color = Color(0, 0, 0, 1)
|
bg_color = Color(0, 0, 0, 1)
|
||||||
|
|
||||||
[node name="Marketplace" type="Control" node_paths=PackedStringArray("root", "grid")]
|
[node name="Marketplace" type="Control" node_paths=PackedStringArray("root", "to_unlock_grid", "unlocked_grid")]
|
||||||
layout_mode = 3
|
layout_mode = 3
|
||||||
anchors_preset = 15
|
anchors_preset = 15
|
||||||
anchor_right = 1.0
|
anchor_right = 1.0
|
||||||
@@ -23,9 +24,11 @@ grow_vertical = 2
|
|||||||
script = ExtResource("1_ncpyg")
|
script = ExtResource("1_ncpyg")
|
||||||
root = NodePath(".")
|
root = NodePath(".")
|
||||||
skill_data = Array[ExtResource("2_pg4mc")]([ExtResource("3_bk5yi"), ExtResource("4_tx0n3"), ExtResource("5_fqx8e"), ExtResource("6_6665y"), ExtResource("7_ukny6")])
|
skill_data = Array[ExtResource("2_pg4mc")]([ExtResource("3_bk5yi"), ExtResource("4_tx0n3"), ExtResource("5_fqx8e"), ExtResource("6_6665y"), ExtResource("7_ukny6")])
|
||||||
grid = NodePath("PanelContainer/MarginContainer/VBoxContainer/GridContainer")
|
to_unlock_grid = NodePath("PanelContainer/MarginContainer/VBoxContainer/ToUnlockGridContainer")
|
||||||
|
unlocked_grid = NodePath("PanelContainer/MarginContainer/VBoxContainer/UnlockedGridContainer")
|
||||||
font = ExtResource("2_ho1tm")
|
font = ExtResource("2_ho1tm")
|
||||||
marketplace_button = ExtResource("9_ode10")
|
marketplace_button = ExtResource("9_ode10")
|
||||||
|
skill_button = ExtResource("10_c7w2b")
|
||||||
|
|
||||||
[node name="PanelContainer" type="PanelContainer" parent="."]
|
[node name="PanelContainer" type="PanelContainer" parent="."]
|
||||||
layout_mode = 1
|
layout_mode = 1
|
||||||
@@ -55,7 +58,14 @@ vertical_alignment = 1
|
|||||||
justification_flags = 162
|
justification_flags = 162
|
||||||
uppercase = true
|
uppercase = true
|
||||||
|
|
||||||
[node name="GridContainer" type="GridContainer" parent="PanelContainer/MarginContainer/VBoxContainer"]
|
[node name="ToUnlockGridContainer" type="GridContainer" parent="PanelContainer/MarginContainer/VBoxContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
size_flags_vertical = 2
|
||||||
|
theme_override_constants/h_separation = 4
|
||||||
|
theme_override_constants/v_separation = 16
|
||||||
|
columns = 3
|
||||||
|
|
||||||
|
[node name="UnlockedGridContainer" type="GridContainer" parent="PanelContainer/MarginContainer/VBoxContainer"]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_vertical = 2
|
size_flags_vertical = 2
|
||||||
theme_override_constants/h_separation = 4
|
theme_override_constants/h_separation = 4
|
||||||
|
@@ -1,8 +1,11 @@
|
|||||||
[gd_scene load_steps=2 format=3 uid="uid://dtl03rod7l2t0"]
|
[gd_scene load_steps=5 format=3 uid="uid://dtl03rod7l2t0"]
|
||||||
|
|
||||||
[ext_resource type="Texture2D" uid="uid://cvhoq7aubxlmq" path="res://sprites/ui/magnetic_skill_icon.png" id="1_5kqfg"]
|
[ext_resource type="Texture2D" uid="uid://cvhoq7aubxlmq" path="res://sprites/ui/magnetic_skill_icon.png" id="1_5kqfg"]
|
||||||
|
[ext_resource type="Script" uid="uid://dx8lex40lotr5" path="res://scripts/ui/marketplace_button.gd" id="2_ulgvb"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://52adghxscdgy" path="res://sprites/locked_skill.png" id="2_vb2qn"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://rucyqmgrdld3" path="res://sprites/unlocked_skill.png" id="3_guyun"]
|
||||||
|
|
||||||
[node name="MarketplaceButton" type="Button"]
|
[node name="MarketplaceButton" type="Button" node_paths=PackedStringArray("skill_level_container")]
|
||||||
offset_right = 8.0
|
offset_right = 8.0
|
||||||
offset_bottom = 8.0
|
offset_bottom = 8.0
|
||||||
size_flags_horizontal = 3
|
size_flags_horizontal = 3
|
||||||
@@ -12,3 +15,17 @@ text = "Fire brick 100"
|
|||||||
icon = ExtResource("1_5kqfg")
|
icon = ExtResource("1_5kqfg")
|
||||||
flat = true
|
flat = true
|
||||||
autowrap_mode = 2
|
autowrap_mode = 2
|
||||||
|
script = ExtResource("2_ulgvb")
|
||||||
|
unlocked_skill_icon = ExtResource("3_guyun")
|
||||||
|
locked_skill_icon = ExtResource("2_vb2qn")
|
||||||
|
skill_level_container = NodePath("HBoxContainer")
|
||||||
|
|
||||||
|
[node name="HBoxContainer" type="HBoxContainer" parent="."]
|
||||||
|
layout_mode = 1
|
||||||
|
anchors_preset = 12
|
||||||
|
anchor_top = 1.0
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
offset_top = -8.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 0
|
||||||
|
16
objects/ui/skill_button.tscn
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
[gd_scene load_steps=3 format=3 uid="uid://ceqjwmihj70lt"]
|
||||||
|
|
||||||
|
[ext_resource type="Texture2D" uid="uid://cvhoq7aubxlmq" path="res://sprites/ui/magnetic_skill_icon.png" id="1_wnfk3"]
|
||||||
|
[ext_resource type="Script" uid="uid://0obbehfd8fki" path="res://scripts/ui/skill_button.gd" id="2_m2732"]
|
||||||
|
|
||||||
|
[node name="SkillButton" type="Button"]
|
||||||
|
offset_right = 8.0
|
||||||
|
offset_bottom = 8.0
|
||||||
|
size_flags_horizontal = 3
|
||||||
|
size_flags_vertical = 3
|
||||||
|
theme_override_font_sizes/font_size = 8
|
||||||
|
text = "Fire brick 100"
|
||||||
|
icon = ExtResource("1_wnfk3")
|
||||||
|
flat = true
|
||||||
|
autowrap_mode = 2
|
||||||
|
script = ExtResource("2_m2732")
|
@@ -1,9 +1,9 @@
|
|||||||
[gd_scene load_steps=5 format=3 uid="uid://bva54p1fxomu2"]
|
[gd_scene load_steps=5 format=3 uid="uid://bva54p1fxomu2"]
|
||||||
|
|
||||||
[ext_resource type="Texture2D" uid="uid://d2f4ooucvrjcc" path="res://sprites/backgrounds/plains/1.png" id="1_rfutu"]
|
[ext_resource type="Texture2D" uid="uid://d2f4ooucvrjcc" path="res://sprites/backgrounds/plains/1.png" id="1_kdcp8"]
|
||||||
[ext_resource type="Texture2D" uid="uid://cdgk3fi8owc6o" path="res://sprites/backgrounds/plains/2.png" id="2_uysv2"]
|
[ext_resource type="Texture2D" uid="uid://cdgk3fi8owc6o" path="res://sprites/backgrounds/plains/2.png" id="2_ev808"]
|
||||||
[ext_resource type="Texture2D" uid="uid://p0bt2k2lihlx" path="res://sprites/backgrounds/plains/3.png" id="3_l6n33"]
|
[ext_resource type="Texture2D" uid="uid://p0bt2k2lihlx" path="res://sprites/backgrounds/plains/3.png" id="3_sfana"]
|
||||||
[ext_resource type="Texture2D" uid="uid://bcahm7wqdbn6n" path="res://sprites/backgrounds/plains/4.png" id="4_jkhju"]
|
[ext_resource type="Texture2D" uid="uid://bcahm7wqdbn6n" path="res://sprites/backgrounds/plains/4.png" id="4_8eim1"]
|
||||||
|
|
||||||
[node name="ParallaxBackground" type="ParallaxBackground"]
|
[node name="ParallaxBackground" type="ParallaxBackground"]
|
||||||
|
|
||||||
@@ -12,7 +12,7 @@ motion_scale = Vector2(0, 0)
|
|||||||
motion_mirroring = Vector2(480, 0)
|
motion_mirroring = Vector2(480, 0)
|
||||||
|
|
||||||
[node name="Sprite2D" type="Sprite2D" parent="Sky"]
|
[node name="Sprite2D" type="Sprite2D" parent="Sky"]
|
||||||
texture = ExtResource("1_rfutu")
|
texture = ExtResource("1_kdcp8")
|
||||||
centered = false
|
centered = false
|
||||||
|
|
||||||
[node name="Clouds" type="ParallaxLayer" parent="."]
|
[node name="Clouds" type="ParallaxLayer" parent="."]
|
||||||
@@ -20,7 +20,7 @@ motion_scale = Vector2(0.1, 0.1)
|
|||||||
motion_mirroring = Vector2(480, 0)
|
motion_mirroring = Vector2(480, 0)
|
||||||
|
|
||||||
[node name="Sprite2D" type="Sprite2D" parent="Clouds"]
|
[node name="Sprite2D" type="Sprite2D" parent="Clouds"]
|
||||||
texture = ExtResource("2_uysv2")
|
texture = ExtResource("2_ev808")
|
||||||
centered = false
|
centered = false
|
||||||
|
|
||||||
[node name="Hills" type="ParallaxLayer" parent="."]
|
[node name="Hills" type="ParallaxLayer" parent="."]
|
||||||
@@ -28,7 +28,7 @@ motion_scale = Vector2(0.2, 0.2)
|
|||||||
motion_mirroring = Vector2(480, 0)
|
motion_mirroring = Vector2(480, 0)
|
||||||
|
|
||||||
[node name="Sprite2D" type="Sprite2D" parent="Hills"]
|
[node name="Sprite2D" type="Sprite2D" parent="Hills"]
|
||||||
texture = ExtResource("3_l6n33")
|
texture = ExtResource("3_sfana")
|
||||||
centered = false
|
centered = false
|
||||||
|
|
||||||
[node name="Ground" type="ParallaxLayer" parent="."]
|
[node name="Ground" type="ParallaxLayer" parent="."]
|
||||||
@@ -37,5 +37,5 @@ motion_mirroring = Vector2(480, 0)
|
|||||||
|
|
||||||
[node name="Sprite2D" type="Sprite2D" parent="Ground"]
|
[node name="Sprite2D" type="Sprite2D" parent="Ground"]
|
||||||
scale = Vector2(1, 1.14074)
|
scale = Vector2(1, 1.14074)
|
||||||
texture = ExtResource("4_jkhju")
|
texture = ExtResource("4_8eim1")
|
||||||
centered = false
|
centered = false
|
@@ -17,6 +17,8 @@ config/name_localized={
|
|||||||
}
|
}
|
||||||
config/version="in-dev"
|
config/version="in-dev"
|
||||||
run/main_scene="uid://cl00e2ocomk3m"
|
run/main_scene="uid://cl00e2ocomk3m"
|
||||||
|
config/use_custom_user_dir=true
|
||||||
|
config/custom_user_dir_name="MrBrickAdventures"
|
||||||
config/features=PackedStringArray("4.4", "GL Compatibility")
|
config/features=PackedStringArray("4.4", "GL Compatibility")
|
||||||
run/max_fps=180
|
run/max_fps=180
|
||||||
boot_splash/bg_color=Color(0, 0, 0, 1)
|
boot_splash/bg_color=Color(0, 0, 0, 1)
|
||||||
@@ -153,6 +155,11 @@ pause={
|
|||||||
}
|
}
|
||||||
switch_movement={
|
switch_movement={
|
||||||
"deadzone": 0.2,
|
"deadzone": 0.2,
|
||||||
|
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194336,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
screenshot={
|
||||||
|
"deadzone": 0.2,
|
||||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194333,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194333,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -160,7 +167,6 @@ switch_movement={
|
|||||||
[internationalization]
|
[internationalization]
|
||||||
|
|
||||||
locale/translations=PackedStringArray("res://translations.en.translation", "res://translations.pl.translation")
|
locale/translations=PackedStringArray("res://translations.en.translation", "res://translations.pl.translation")
|
||||||
locale/test="pl"
|
|
||||||
|
|
||||||
[layer_names]
|
[layer_names]
|
||||||
|
|
||||||
|
@@ -4,4 +4,5 @@
|
|||||||
|
|
||||||
[resource]
|
[resource]
|
||||||
script = ExtResource("1_fudbo")
|
script = ExtResource("1_fudbo")
|
||||||
amount = 5
|
amount = 5.0
|
||||||
|
type = 0
|
||||||
|
@@ -4,4 +4,5 @@
|
|||||||
|
|
||||||
[resource]
|
[resource]
|
||||||
script = ExtResource("1_037vi")
|
script = ExtResource("1_037vi")
|
||||||
amount = 100
|
amount = 100.0
|
||||||
|
type = 0
|
||||||
|
@@ -4,5 +4,5 @@
|
|||||||
|
|
||||||
[resource]
|
[resource]
|
||||||
script = ExtResource("1_2d5tb")
|
script = ExtResource("1_2d5tb")
|
||||||
amount = 1
|
amount = 1.0
|
||||||
type = 1
|
type = 1
|
||||||
|
@@ -4,4 +4,5 @@
|
|||||||
|
|
||||||
[resource]
|
[resource]
|
||||||
script = ExtResource("1_veemo")
|
script = ExtResource("1_veemo")
|
||||||
amount = 1
|
amount = 1.0
|
||||||
|
type = 0
|
||||||
|
9
resources/collectables/small_health_potion.tres
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
[gd_resource type="Resource" script_class="CollectableResource" load_steps=2 format=3 uid="uid://2tl3yoh202no"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://cb5f0mx0hrt3b" path="res://scripts/resources/collectable_resource.gd" id="1_brkhb"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
script = ExtResource("1_brkhb")
|
||||||
|
amount = 0.25
|
||||||
|
type = 2
|
||||||
|
metadata/_custom_type_script = "uid://cb5f0mx0hrt3b"
|
@@ -4,5 +4,5 @@
|
|||||||
|
|
||||||
[resource]
|
[resource]
|
||||||
script = ExtResource("1_w50p5")
|
script = ExtResource("1_w50p5")
|
||||||
amount = 50
|
amount = 50.0
|
||||||
type = 0
|
type = 0
|
||||||
|
9
resources/levels/forest/forest_1.tres
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
[gd_resource type="Resource" script_class="LevelResource" load_steps=2 format=3 uid="uid://dsq0y2iw7tfmk"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://cp68km8bykymb" path="res://scripts/resources/level_resource.gd" id="1_8mmd7"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
script = ExtResource("1_8mmd7")
|
||||||
|
level_name = "LEVEL_5_NAME"
|
||||||
|
scene_path = "res://scenes/level_forest_5.tscn"
|
||||||
|
metadata/_custom_type_script = "uid://cp68km8bykymb"
|
@@ -11,9 +11,14 @@ name = "BRICK_POWER"
|
|||||||
description = "BRICK_POWER_DESCRIPTION"
|
description = "BRICK_POWER_DESCRIPTION"
|
||||||
node = ExtResource("1_5gnea")
|
node = ExtResource("1_5gnea")
|
||||||
config = {
|
config = {
|
||||||
|
"fire_rate": 0.6,
|
||||||
"player_controller": NodePath("."),
|
"player_controller": NodePath("."),
|
||||||
"throw_input_behavior": ExtResource("1_xwijh"),
|
"throw_input_behavior": ExtResource("1_xwijh"),
|
||||||
"timer": NodePath("ThrowTimer")
|
"timer": NodePath("ThrowTimer")
|
||||||
}
|
}
|
||||||
cost = 50
|
cost = 50
|
||||||
icon = ExtResource("2_yimbq")
|
icon = ExtResource("2_yimbq")
|
||||||
|
type = 1
|
||||||
|
is_active = false
|
||||||
|
level = 0
|
||||||
|
max_level = 3
|
||||||
|
@@ -19,3 +19,7 @@ config = {
|
|||||||
}
|
}
|
||||||
cost = 180
|
cost = 180
|
||||||
icon = ExtResource("3_wkqmb")
|
icon = ExtResource("3_wkqmb")
|
||||||
|
type = 1
|
||||||
|
is_active = false
|
||||||
|
level = 0
|
||||||
|
max_level = 1
|
||||||
|
@@ -19,3 +19,7 @@ config = {
|
|||||||
}
|
}
|
||||||
cost = 150
|
cost = 150
|
||||||
icon = ExtResource("3_w87qb")
|
icon = ExtResource("3_w87qb")
|
||||||
|
type = 1
|
||||||
|
is_active = false
|
||||||
|
level = 0
|
||||||
|
max_level = 3
|
||||||
|
@@ -19,3 +19,7 @@ config = {
|
|||||||
}
|
}
|
||||||
cost = 150
|
cost = 150
|
||||||
icon = ExtResource("3_6btth")
|
icon = ExtResource("3_6btth")
|
||||||
|
type = 1
|
||||||
|
is_active = false
|
||||||
|
level = 0
|
||||||
|
max_level = 3
|
||||||
|
@@ -16,3 +16,7 @@ config = {
|
|||||||
}
|
}
|
||||||
cost = 70
|
cost = 70
|
||||||
icon = ExtResource("1_16qcg")
|
icon = ExtResource("1_16qcg")
|
||||||
|
type = 2
|
||||||
|
is_active = false
|
||||||
|
level = 1
|
||||||
|
max_level = 1
|
||||||
|
@@ -131,7 +131,7 @@ texture = ExtResource("2_dfydr")
|
|||||||
12:11/0 = 0
|
12:11/0 = 0
|
||||||
13:11/0 = 0
|
13:11/0 = 0
|
||||||
2:2/0 = 0
|
2:2/0 = 0
|
||||||
2:2/0/probability = 0.0
|
2:2/0/probability = 0.8
|
||||||
|
|
||||||
[resource]
|
[resource]
|
||||||
sources/0 = SubResource("TileSetAtlasSource_cagp7")
|
sources/0 = SubResource("TileSetAtlasSource_cagp7")
|
||||||
|
@@ -1,10 +1,11 @@
|
|||||||
[gd_resource type="TileSet" load_steps=14 format=3 uid="uid://bc5a20s6kuy8e"]
|
[gd_resource type="TileSet" load_steps=15 format=3 uid="uid://bc5a20s6kuy8e"]
|
||||||
|
|
||||||
[ext_resource type="Texture2D" uid="uid://djifxc5x0dyrw" path="res://sprites/ppc_tileset.png" id="1_ej5iv"]
|
[ext_resource type="Texture2D" uid="uid://djifxc5x0dyrw" path="res://sprites/ppc_tileset.png" id="1_ej5iv"]
|
||||||
[ext_resource type="PackedScene" uid="uid://54w4wisfj8v8" path="res://objects/entities/coin.tscn" id="2_31a0q"]
|
[ext_resource type="PackedScene" uid="uid://54w4wisfj8v8" path="res://objects/entities/coin.tscn" id="2_31a0q"]
|
||||||
[ext_resource type="PackedScene" uid="uid://c40r76qqacqie" path="res://objects/entities/collapsing_block.tscn" id="3_31a0q"]
|
[ext_resource type="PackedScene" uid="uid://c40r76qqacqie" path="res://objects/entities/collapsing_block.tscn" id="3_31a0q"]
|
||||||
[ext_resource type="PackedScene" uid="uid://ct8fim6mduyl3" path="res://objects/entities/collapsing_bridge.tscn" id="3_x63lh"]
|
[ext_resource type="PackedScene" uid="uid://ct8fim6mduyl3" path="res://objects/entities/collapsing_bridge.tscn" id="3_x63lh"]
|
||||||
[ext_resource type="PackedScene" uid="uid://bargnp4twtmxg" path="res://objects/entities/big_coin.tscn" id="4_ov0dn"]
|
[ext_resource type="PackedScene" uid="uid://bargnp4twtmxg" path="res://objects/entities/big_coin.tscn" id="4_ov0dn"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://buff711j0f2ph" path="res://objects/entities/spike_wheel.tscn" id="4_x63lh"]
|
||||||
[ext_resource type="PackedScene" uid="uid://d08dfqmirnd66" path="res://objects/entities/big_treasure.tscn" id="5_xxibl"]
|
[ext_resource type="PackedScene" uid="uid://d08dfqmirnd66" path="res://objects/entities/big_treasure.tscn" id="5_xxibl"]
|
||||||
[ext_resource type="PackedScene" uid="uid://073ts5cxtwbl" path="res://objects/entities/treasure.tscn" id="6_fmgww"]
|
[ext_resource type="PackedScene" uid="uid://073ts5cxtwbl" path="res://objects/entities/treasure.tscn" id="6_fmgww"]
|
||||||
[ext_resource type="PackedScene" uid="uid://cm3rixnnev1pg" path="res://objects/entities/jump_pad.tscn" id="7_0kjxj"]
|
[ext_resource type="PackedScene" uid="uid://cm3rixnnev1pg" path="res://objects/entities/jump_pad.tscn" id="7_0kjxj"]
|
||||||
@@ -147,6 +148,7 @@ scenes/7/scene = ExtResource("8_83o0w")
|
|||||||
scenes/8/scene = ExtResource("9_at40q")
|
scenes/8/scene = ExtResource("9_at40q")
|
||||||
scenes/9/scene = ExtResource("10_ivcjr")
|
scenes/9/scene = ExtResource("10_ivcjr")
|
||||||
scenes/10/scene = ExtResource("3_31a0q")
|
scenes/10/scene = ExtResource("3_31a0q")
|
||||||
|
scenes/11/scene = ExtResource("4_x63lh")
|
||||||
|
|
||||||
[resource]
|
[resource]
|
||||||
physics_layer_0/collision_layer = 1
|
physics_layer_0/collision_layer = 1
|
||||||
|
@@ -1,7 +1,8 @@
|
|||||||
[gd_resource type="TileSet" load_steps=5 format=3 uid="uid://bbppo0irxdmqy"]
|
[gd_resource type="TileSet" load_steps=7 format=3 uid="uid://bbppo0irxdmqy"]
|
||||||
|
|
||||||
[ext_resource type="Texture2D" uid="uid://djifxc5x0dyrw" path="res://sprites/ppc_tileset.png" id="1_6ec4i"]
|
[ext_resource type="Texture2D" uid="uid://djifxc5x0dyrw" path="res://sprites/ppc_tileset.png" id="1_6ec4i"]
|
||||||
[ext_resource type="Texture2D" uid="uid://cw42lvnqxubq2" path="res://sprites/PS_Tileset_10_nes.png" id="2_0dgh6"]
|
[ext_resource type="Texture2D" uid="uid://cw42lvnqxubq2" path="res://sprites/PS_Tileset_10_nes.png" id="2_0dgh6"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://do6m4ry8ss01e" path="res://sprites/PS_Tileset_12_nes.png" id="3_0dgh6"]
|
||||||
|
|
||||||
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_8ljy4"]
|
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_8ljy4"]
|
||||||
texture = ExtResource("1_6ec4i")
|
texture = ExtResource("1_6ec4i")
|
||||||
@@ -183,6 +184,68 @@ texture = ExtResource("2_0dgh6")
|
|||||||
15:9/0 = 0
|
15:9/0 = 0
|
||||||
15:9/0/texture_origin = Vector2i(0, 8)
|
15:9/0/texture_origin = Vector2i(0, 8)
|
||||||
|
|
||||||
|
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_a1mhh"]
|
||||||
|
texture = ExtResource("3_0dgh6")
|
||||||
|
13:5/0 = 0
|
||||||
|
14:5/0 = 0
|
||||||
|
15:5/0 = 0
|
||||||
|
15:6/0 = 0
|
||||||
|
14:7/0 = 0
|
||||||
|
13:7/0 = 0
|
||||||
|
13:8/0 = 0
|
||||||
|
14:8/0 = 0
|
||||||
|
14:6/0 = 0
|
||||||
|
13:6/0 = 0
|
||||||
|
17:6/0 = 0
|
||||||
|
17:7/0 = 0
|
||||||
|
19:5/0 = 0
|
||||||
|
20:5/0 = 0
|
||||||
|
21:5/0 = 0
|
||||||
|
21:6/0 = 0
|
||||||
|
20:6/0 = 0
|
||||||
|
19:6/0 = 0
|
||||||
|
20:7/0 = 0
|
||||||
|
21:7/0 = 0
|
||||||
|
21:8/0 = 0
|
||||||
|
20:8/0 = 0
|
||||||
|
18:9/0 = 0
|
||||||
|
17:9/0 = 0
|
||||||
|
16:9/0 = 0
|
||||||
|
15:9/0 = 0
|
||||||
|
14:9/0 = 0
|
||||||
|
13:9/0 = 0
|
||||||
|
12:9/0 = 0
|
||||||
|
13:11/0 = 0
|
||||||
|
12:11/0 = 0
|
||||||
|
12:12/0 = 0
|
||||||
|
13:12/0 = 0
|
||||||
|
14:10/0 = 0
|
||||||
|
15:10/0 = 0
|
||||||
|
15:11/0 = 0
|
||||||
|
15:12/0 = 0
|
||||||
|
14:12/0 = 0
|
||||||
|
14:11/0 = 0
|
||||||
|
16:10/0 = 0
|
||||||
|
17:10/0 = 0
|
||||||
|
17:11/0 = 0
|
||||||
|
17:12/0 = 0
|
||||||
|
16:12/0 = 0
|
||||||
|
16:11/0 = 0
|
||||||
|
18:10/0 = 0
|
||||||
|
19:10/0 = 0
|
||||||
|
19:11/0 = 0
|
||||||
|
18:11/0 = 0
|
||||||
|
18:12/0 = 0
|
||||||
|
19:12/0 = 0
|
||||||
|
21:10/0 = 0
|
||||||
|
20:10/0 = 0
|
||||||
|
20:11/0 = 0
|
||||||
|
21:12/0 = 0
|
||||||
|
21:11/0 = 0
|
||||||
|
22:11/0 = 0
|
||||||
|
22:10/0 = 0
|
||||||
|
|
||||||
[resource]
|
[resource]
|
||||||
sources/0 = SubResource("TileSetAtlasSource_8ljy4")
|
sources/0 = SubResource("TileSetAtlasSource_8ljy4")
|
||||||
sources/1 = SubResource("TileSetAtlasSource_jjobv")
|
sources/1 = SubResource("TileSetAtlasSource_jjobv")
|
||||||
|
sources/3 = SubResource("TileSetAtlasSource_a1mhh")
|
||||||
|
@@ -1,7 +1,572 @@
|
|||||||
[gd_resource type="TileSet" load_steps=3 format=3 uid="uid://cu2sx7qigrqnv"]
|
[gd_resource type="TileSet" load_steps=5 format=3 uid="uid://cu2sx7qigrqnv"]
|
||||||
|
|
||||||
|
[ext_resource type="Texture2D" uid="uid://do6m4ry8ss01e" path="res://sprites/PS_Tileset_12_nes.png" id="1_2p3w4"]
|
||||||
[ext_resource type="Texture2D" uid="uid://cw42lvnqxubq2" path="res://sprites/PS_Tileset_10_nes.png" id="2_43n76"]
|
[ext_resource type="Texture2D" uid="uid://cw42lvnqxubq2" path="res://sprites/PS_Tileset_10_nes.png" id="2_43n76"]
|
||||||
|
|
||||||
|
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_43n76"]
|
||||||
|
texture = ExtResource("1_2p3w4")
|
||||||
|
1:0/0 = 0
|
||||||
|
1:0/0/terrain_set = 0
|
||||||
|
1:0/0/terrain = 2
|
||||||
|
1:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
1:0/0/terrains_peering_bit/right_side = 2
|
||||||
|
1:0/0/terrains_peering_bit/bottom_right_corner = 2
|
||||||
|
1:0/0/terrains_peering_bit/bottom_side = 2
|
||||||
|
2:0/0 = 0
|
||||||
|
2:0/0/terrain_set = 0
|
||||||
|
2:0/0/terrain = 2
|
||||||
|
2:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
2:0/0/terrains_peering_bit/right_side = 2
|
||||||
|
2:0/0/terrains_peering_bit/bottom_right_corner = 2
|
||||||
|
2:0/0/terrains_peering_bit/bottom_side = 2
|
||||||
|
2:0/0/terrains_peering_bit/bottom_left_corner = 2
|
||||||
|
2:0/0/terrains_peering_bit/left_side = 2
|
||||||
|
3:0/0 = 0
|
||||||
|
3:0/0/terrain_set = 0
|
||||||
|
3:0/0/terrain = 2
|
||||||
|
3:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
3:0/0/terrains_peering_bit/bottom_side = 2
|
||||||
|
3:0/0/terrains_peering_bit/bottom_left_corner = 2
|
||||||
|
3:0/0/terrains_peering_bit/left_side = 2
|
||||||
|
6:0/0 = 0
|
||||||
|
6:0/0/terrain_set = 0
|
||||||
|
6:0/0/terrain = 2
|
||||||
|
6:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
6:0/0/terrains_peering_bit/right_side = 2
|
||||||
|
6:0/0/terrains_peering_bit/bottom_side = 2
|
||||||
|
7:0/0 = 0
|
||||||
|
7:0/0/terrain_set = 0
|
||||||
|
7:0/0/terrain = 2
|
||||||
|
7:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
7:0/0/terrains_peering_bit/right_side = 2
|
||||||
|
7:0/0/terrains_peering_bit/left_side = 2
|
||||||
|
8:0/0 = 0
|
||||||
|
8:0/0/terrain_set = 0
|
||||||
|
8:0/0/terrain = 2
|
||||||
|
8:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
8:0/0/terrains_peering_bit/bottom_side = 2
|
||||||
|
8:0/0/terrains_peering_bit/left_side = 2
|
||||||
|
13:0/0 = 0
|
||||||
|
15:0/0 = 0
|
||||||
|
15:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
20:0/0 = 0
|
||||||
|
21:0/0 = 0
|
||||||
|
22:0/0 = 0
|
||||||
|
0:1/0 = 0
|
||||||
|
0:1/0/terrain_set = 0
|
||||||
|
0:1/0/terrain = 2
|
||||||
|
0:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
0:1/0/terrains_peering_bit/right_side = 2
|
||||||
|
0:1/0/terrains_peering_bit/bottom_right_corner = 2
|
||||||
|
0:1/0/terrains_peering_bit/bottom_side = 2
|
||||||
|
1:1/0 = 0
|
||||||
|
1:1/0/terrain_set = 0
|
||||||
|
1:1/0/terrain = 2
|
||||||
|
1:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
1:1/0/terrains_peering_bit/right_side = 2
|
||||||
|
1:1/0/terrains_peering_bit/bottom_right_corner = 2
|
||||||
|
1:1/0/terrains_peering_bit/bottom_side = 2
|
||||||
|
1:1/0/terrains_peering_bit/bottom_left_corner = 2
|
||||||
|
1:1/0/terrains_peering_bit/left_side = 2
|
||||||
|
1:1/0/terrains_peering_bit/top_side = 2
|
||||||
|
1:1/0/terrains_peering_bit/top_right_corner = 2
|
||||||
|
2:1/0 = 0
|
||||||
|
2:1/0/terrain_set = 0
|
||||||
|
2:1/0/terrain = 2
|
||||||
|
2:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
2:1/0/terrains_peering_bit/right_side = 2
|
||||||
|
2:1/0/terrains_peering_bit/bottom_right_corner = 2
|
||||||
|
2:1/0/terrains_peering_bit/bottom_side = 2
|
||||||
|
2:1/0/terrains_peering_bit/bottom_left_corner = 2
|
||||||
|
2:1/0/terrains_peering_bit/left_side = 2
|
||||||
|
2:1/0/terrains_peering_bit/top_left_corner = 2
|
||||||
|
2:1/0/terrains_peering_bit/top_side = 2
|
||||||
|
2:1/0/terrains_peering_bit/top_right_corner = 2
|
||||||
|
3:1/0 = 0
|
||||||
|
3:1/0/terrain_set = 0
|
||||||
|
3:1/0/terrain = 2
|
||||||
|
3:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
3:1/0/terrains_peering_bit/right_side = 2
|
||||||
|
3:1/0/terrains_peering_bit/bottom_right_corner = 2
|
||||||
|
3:1/0/terrains_peering_bit/bottom_side = 2
|
||||||
|
3:1/0/terrains_peering_bit/bottom_left_corner = 2
|
||||||
|
3:1/0/terrains_peering_bit/left_side = 2
|
||||||
|
3:1/0/terrains_peering_bit/top_left_corner = 2
|
||||||
|
3:1/0/terrains_peering_bit/top_side = 2
|
||||||
|
4:1/0 = 0
|
||||||
|
4:1/0/terrain_set = 0
|
||||||
|
4:1/0/terrain = 2
|
||||||
|
4:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
4:1/0/terrains_peering_bit/bottom_side = 2
|
||||||
|
4:1/0/terrains_peering_bit/bottom_left_corner = 2
|
||||||
|
4:1/0/terrains_peering_bit/left_side = 2
|
||||||
|
5:1/0 = 0
|
||||||
|
5:1/0/terrain_set = 0
|
||||||
|
5:1/0/terrain = 2
|
||||||
|
5:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
5:1/0/terrains_peering_bit/right_side = 2
|
||||||
|
5:1/0/terrains_peering_bit/bottom_side = 2
|
||||||
|
6:1/0 = 0
|
||||||
|
6:1/0/terrain_set = 0
|
||||||
|
6:1/0/terrain = 2
|
||||||
|
6:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
6:1/0/terrains_peering_bit/left_side = 2
|
||||||
|
6:1/0/terrains_peering_bit/top_side = 2
|
||||||
|
8:1/0 = 0
|
||||||
|
8:1/0/terrain_set = 0
|
||||||
|
8:1/0/terrain = 2
|
||||||
|
8:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
8:1/0/terrains_peering_bit/right_side = 2
|
||||||
|
8:1/0/terrains_peering_bit/top_side = 2
|
||||||
|
9:1/0 = 0
|
||||||
|
9:1/0/terrain_set = 0
|
||||||
|
9:1/0/terrain = 2
|
||||||
|
9:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
9:1/0/terrains_peering_bit/bottom_side = 2
|
||||||
|
9:1/0/terrains_peering_bit/left_side = 2
|
||||||
|
11:1/0 = 0
|
||||||
|
11:1/0/terrain_set = 0
|
||||||
|
11:1/0/terrain = 2
|
||||||
|
11:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
11:1/0/terrains_peering_bit/bottom_side = 2
|
||||||
|
13:1/0 = 0
|
||||||
|
14:1/0 = 0
|
||||||
|
14:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
15:1/0 = 0
|
||||||
|
15:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
16:1/0 = 0
|
||||||
|
17:1/0 = 0
|
||||||
|
18:1/0 = 0
|
||||||
|
18:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
19:1/0 = 0
|
||||||
|
19:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
20:1/0 = 0
|
||||||
|
21:1/0 = 0
|
||||||
|
22:1/0 = 0
|
||||||
|
0:2/0 = 0
|
||||||
|
0:2/0/terrain_set = 0
|
||||||
|
0:2/0/terrain = 2
|
||||||
|
0:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
0:2/0/terrains_peering_bit/right_side = 2
|
||||||
|
0:2/0/terrains_peering_bit/bottom_right_corner = 2
|
||||||
|
0:2/0/terrains_peering_bit/bottom_side = 2
|
||||||
|
0:2/0/terrains_peering_bit/top_side = 2
|
||||||
|
0:2/0/terrains_peering_bit/top_right_corner = 2
|
||||||
|
1:2/0 = 0
|
||||||
|
1:2/0/terrain_set = 0
|
||||||
|
1:2/0/terrain = 2
|
||||||
|
1:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
1:2/0/terrains_peering_bit/right_side = 2
|
||||||
|
1:2/0/terrains_peering_bit/bottom_right_corner = 2
|
||||||
|
1:2/0/terrains_peering_bit/bottom_side = 2
|
||||||
|
1:2/0/terrains_peering_bit/bottom_left_corner = 2
|
||||||
|
1:2/0/terrains_peering_bit/left_side = 2
|
||||||
|
1:2/0/terrains_peering_bit/top_left_corner = 2
|
||||||
|
1:2/0/terrains_peering_bit/top_side = 2
|
||||||
|
1:2/0/terrains_peering_bit/top_right_corner = 2
|
||||||
|
2:2/0 = 0
|
||||||
|
2:2/0/terrain_set = 0
|
||||||
|
2:2/0/terrain = 2
|
||||||
|
2:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
2:2/0/terrains_peering_bit/right_side = 2
|
||||||
|
2:2/0/terrains_peering_bit/bottom_right_corner = 2
|
||||||
|
2:2/0/terrains_peering_bit/bottom_side = 2
|
||||||
|
2:2/0/terrains_peering_bit/bottom_left_corner = 2
|
||||||
|
2:2/0/terrains_peering_bit/left_side = 2
|
||||||
|
2:2/0/terrains_peering_bit/top_left_corner = 2
|
||||||
|
2:2/0/terrains_peering_bit/top_side = 2
|
||||||
|
2:2/0/terrains_peering_bit/top_right_corner = 2
|
||||||
|
3:2/0 = 0
|
||||||
|
3:2/0/terrain_set = 0
|
||||||
|
3:2/0/terrain = 2
|
||||||
|
3:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
3:2/0/terrains_peering_bit/right_side = 2
|
||||||
|
3:2/0/terrains_peering_bit/bottom_right_corner = 2
|
||||||
|
3:2/0/terrains_peering_bit/bottom_side = 2
|
||||||
|
3:2/0/terrains_peering_bit/bottom_left_corner = 2
|
||||||
|
3:2/0/terrains_peering_bit/left_side = 2
|
||||||
|
3:2/0/terrains_peering_bit/top_left_corner = 2
|
||||||
|
3:2/0/terrains_peering_bit/top_side = 2
|
||||||
|
3:2/0/terrains_peering_bit/top_right_corner = 2
|
||||||
|
4:2/0 = 0
|
||||||
|
4:2/0/terrain_set = 0
|
||||||
|
4:2/0/terrain = 2
|
||||||
|
4:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
4:2/0/terrains_peering_bit/bottom_side = 2
|
||||||
|
4:2/0/terrains_peering_bit/bottom_left_corner = 2
|
||||||
|
4:2/0/terrains_peering_bit/left_side = 2
|
||||||
|
4:2/0/terrains_peering_bit/top_left_corner = 2
|
||||||
|
4:2/0/terrains_peering_bit/top_side = 2
|
||||||
|
5:2/0 = 0
|
||||||
|
5:2/0/terrain_set = 0
|
||||||
|
5:2/0/terrain = 2
|
||||||
|
5:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
5:2/0/terrains_peering_bit/bottom_side = 2
|
||||||
|
5:2/0/terrains_peering_bit/top_side = 2
|
||||||
|
9:2/0 = 0
|
||||||
|
9:2/0/terrain_set = 0
|
||||||
|
9:2/0/terrain = 2
|
||||||
|
9:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
9:2/0/terrains_peering_bit/bottom_side = 2
|
||||||
|
9:2/0/terrains_peering_bit/top_side = 2
|
||||||
|
11:2/0 = 0
|
||||||
|
11:2/0/terrain_set = 0
|
||||||
|
11:2/0/terrain = 2
|
||||||
|
11:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
11:2/0/terrains_peering_bit/bottom_side = 2
|
||||||
|
11:2/0/terrains_peering_bit/top_side = 2
|
||||||
|
16:2/0 = 0
|
||||||
|
16:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
19:2/0 = 0
|
||||||
|
19:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
20:2/0 = 0
|
||||||
|
21:2/0 = 0
|
||||||
|
22:2/0 = 0
|
||||||
|
0:3/0 = 0
|
||||||
|
0:3/0/terrain_set = 0
|
||||||
|
0:3/0/terrain = 2
|
||||||
|
0:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
0:3/0/terrains_peering_bit/right_side = 2
|
||||||
|
0:3/0/terrains_peering_bit/top_side = 2
|
||||||
|
0:3/0/terrains_peering_bit/top_right_corner = 2
|
||||||
|
1:3/0 = 0
|
||||||
|
1:3/0/terrain_set = 0
|
||||||
|
1:3/0/terrain = 2
|
||||||
|
1:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
1:3/0/terrains_peering_bit/right_side = 2
|
||||||
|
1:3/0/terrains_peering_bit/bottom_right_corner = 2
|
||||||
|
1:3/0/terrains_peering_bit/bottom_side = 2
|
||||||
|
1:3/0/terrains_peering_bit/left_side = 2
|
||||||
|
1:3/0/terrains_peering_bit/top_left_corner = 2
|
||||||
|
1:3/0/terrains_peering_bit/top_side = 2
|
||||||
|
1:3/0/terrains_peering_bit/top_right_corner = 2
|
||||||
|
2:3/0 = 0
|
||||||
|
2:3/0/terrain_set = 0
|
||||||
|
2:3/0/terrain = 2
|
||||||
|
2:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
2:3/0/terrains_peering_bit/right_side = 2
|
||||||
|
2:3/0/terrains_peering_bit/bottom_right_corner = 2
|
||||||
|
2:3/0/terrains_peering_bit/bottom_side = 2
|
||||||
|
2:3/0/terrains_peering_bit/bottom_left_corner = 2
|
||||||
|
2:3/0/terrains_peering_bit/left_side = 2
|
||||||
|
2:3/0/terrains_peering_bit/top_left_corner = 2
|
||||||
|
2:3/0/terrains_peering_bit/top_side = 2
|
||||||
|
2:3/0/terrains_peering_bit/top_right_corner = 2
|
||||||
|
3:3/0 = 0
|
||||||
|
3:3/0/terrain_set = 0
|
||||||
|
3:3/0/terrain = 2
|
||||||
|
3:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
3:3/0/terrains_peering_bit/right_side = 2
|
||||||
|
3:3/0/terrains_peering_bit/bottom_side = 2
|
||||||
|
3:3/0/terrains_peering_bit/bottom_left_corner = 2
|
||||||
|
3:3/0/terrains_peering_bit/left_side = 2
|
||||||
|
3:3/0/terrains_peering_bit/top_left_corner = 2
|
||||||
|
3:3/0/terrains_peering_bit/top_side = 2
|
||||||
|
3:3/0/terrains_peering_bit/top_right_corner = 2
|
||||||
|
4:3/0 = 0
|
||||||
|
4:3/0/terrain_set = 0
|
||||||
|
4:3/0/terrain = 2
|
||||||
|
4:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
4:3/0/terrains_peering_bit/left_side = 2
|
||||||
|
4:3/0/terrains_peering_bit/top_left_corner = 2
|
||||||
|
4:3/0/terrains_peering_bit/top_side = 2
|
||||||
|
5:3/0 = 0
|
||||||
|
5:3/0/terrain_set = 0
|
||||||
|
5:3/0/terrain = 2
|
||||||
|
5:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
5:3/0/terrains_peering_bit/right_side = 2
|
||||||
|
5:3/0/terrains_peering_bit/top_side = 2
|
||||||
|
6:3/0 = 0
|
||||||
|
6:3/0/terrain_set = 0
|
||||||
|
6:3/0/terrain = 2
|
||||||
|
6:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
6:3/0/terrains_peering_bit/bottom_side = 2
|
||||||
|
6:3/0/terrains_peering_bit/left_side = 2
|
||||||
|
8:3/0 = 0
|
||||||
|
8:3/0/terrain_set = 0
|
||||||
|
8:3/0/terrain = 2
|
||||||
|
8:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
8:3/0/terrains_peering_bit/right_side = 2
|
||||||
|
8:3/0/terrains_peering_bit/bottom_side = 2
|
||||||
|
9:3/0 = 0
|
||||||
|
9:3/0/terrain_set = 0
|
||||||
|
9:3/0/terrain = 2
|
||||||
|
9:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
9:3/0/terrains_peering_bit/left_side = 2
|
||||||
|
9:3/0/terrains_peering_bit/top_side = 2
|
||||||
|
11:3/0 = 0
|
||||||
|
11:3/0/terrain_set = 0
|
||||||
|
11:3/0/terrain = 2
|
||||||
|
11:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
11:3/0/terrains_peering_bit/top_side = 2
|
||||||
|
13:3/0 = 0
|
||||||
|
14:3/0 = 0
|
||||||
|
14:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
15:3/0 = 0
|
||||||
|
15:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
16:3/0 = 0
|
||||||
|
16:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
17:3/0 = 0
|
||||||
|
17:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
18:3/0 = 0
|
||||||
|
19:3/0 = 0
|
||||||
|
20:3/0 = 0
|
||||||
|
21:3/0 = 0
|
||||||
|
22:3/0 = 0
|
||||||
|
1:4/0 = 0
|
||||||
|
1:4/0/terrain_set = 0
|
||||||
|
1:4/0/terrain = 2
|
||||||
|
1:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
1:4/0/terrains_peering_bit/right_side = 2
|
||||||
|
1:4/0/terrains_peering_bit/top_side = 2
|
||||||
|
1:4/0/terrains_peering_bit/top_right_corner = 2
|
||||||
|
2:4/0 = 0
|
||||||
|
2:4/0/terrain_set = 0
|
||||||
|
2:4/0/terrain = 2
|
||||||
|
2:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
2:4/0/terrains_peering_bit/right_side = 2
|
||||||
|
2:4/0/terrains_peering_bit/left_side = 2
|
||||||
|
2:4/0/terrains_peering_bit/top_left_corner = 2
|
||||||
|
2:4/0/terrains_peering_bit/top_side = 2
|
||||||
|
2:4/0/terrains_peering_bit/top_right_corner = 2
|
||||||
|
3:4/0 = 0
|
||||||
|
3:4/0/terrain_set = 0
|
||||||
|
3:4/0/terrain = 2
|
||||||
|
3:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
3:4/0/terrains_peering_bit/left_side = 2
|
||||||
|
3:4/0/terrains_peering_bit/top_left_corner = 2
|
||||||
|
3:4/0/terrains_peering_bit/top_side = 2
|
||||||
|
6:4/0 = 0
|
||||||
|
6:4/0/terrain_set = 0
|
||||||
|
6:4/0/terrain = 2
|
||||||
|
6:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
6:4/0/terrains_peering_bit/right_side = 2
|
||||||
|
6:4/0/terrains_peering_bit/top_side = 2
|
||||||
|
7:4/0 = 0
|
||||||
|
7:4/0/terrain_set = 0
|
||||||
|
7:4/0/terrain = 2
|
||||||
|
7:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
7:4/0/terrains_peering_bit/right_side = 2
|
||||||
|
7:4/0/terrains_peering_bit/left_side = 2
|
||||||
|
8:4/0 = 0
|
||||||
|
8:4/0/terrain_set = 0
|
||||||
|
8:4/0/terrain = 2
|
||||||
|
8:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
8:4/0/terrains_peering_bit/left_side = 2
|
||||||
|
8:4/0/terrains_peering_bit/top_side = 2
|
||||||
|
13:4/0 = 0
|
||||||
|
15:4/0 = 0
|
||||||
|
15:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
20:4/0 = 0
|
||||||
|
21:4/0 = 0
|
||||||
|
22:4/0 = 0
|
||||||
|
11:5/0 = 0
|
||||||
|
11:5/0/terrain_set = 0
|
||||||
|
11:5/0/terrain = 2
|
||||||
|
11:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
11:5/0/terrains_peering_bit/bottom_side = 2
|
||||||
|
13:5/0 = 0
|
||||||
|
14:5/0 = 0
|
||||||
|
15:5/0 = 0
|
||||||
|
19:5/0 = 0
|
||||||
|
20:5/0 = 0
|
||||||
|
21:5/0 = 0
|
||||||
|
22:5/0 = 0
|
||||||
|
0:6/0 = 0
|
||||||
|
0:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
1:6/0 = 0
|
||||||
|
1:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
2:6/0 = 0
|
||||||
|
2:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
3:6/0 = 0
|
||||||
|
3:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
4:6/0 = 0
|
||||||
|
4:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
6:6/0 = 0
|
||||||
|
6:6/0/terrain_set = 0
|
||||||
|
6:6/0/terrain = 2
|
||||||
|
6:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
6:6/0/terrains_peering_bit/right_side = 2
|
||||||
|
7:6/0 = 0
|
||||||
|
7:6/0/terrain_set = 0
|
||||||
|
7:6/0/terrain = 2
|
||||||
|
7:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
7:6/0/terrains_peering_bit/right_side = 2
|
||||||
|
7:6/0/terrains_peering_bit/left_side = 2
|
||||||
|
8:6/0 = 0
|
||||||
|
8:6/0/terrain_set = 0
|
||||||
|
8:6/0/terrain = 2
|
||||||
|
8:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
8:6/0/terrains_peering_bit/left_side = 2
|
||||||
|
10:6/0 = 0
|
||||||
|
10:6/0/terrain_set = 0
|
||||||
|
10:6/0/terrain = 2
|
||||||
|
10:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
10:6/0/terrains_peering_bit/right_side = 2
|
||||||
|
11:6/0 = 0
|
||||||
|
11:6/0/terrain_set = 0
|
||||||
|
11:6/0/terrain = 2
|
||||||
|
11:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
11:6/0/terrains_peering_bit/bottom_side = 2
|
||||||
|
11:6/0/terrains_peering_bit/left_side = 2
|
||||||
|
11:6/0/terrains_peering_bit/top_side = 2
|
||||||
|
13:6/0 = 0
|
||||||
|
14:6/0 = 0
|
||||||
|
15:6/0 = 0
|
||||||
|
17:6/0 = 0
|
||||||
|
19:6/0 = 0
|
||||||
|
20:6/0 = 0
|
||||||
|
21:6/0 = 0
|
||||||
|
22:6/0 = 0
|
||||||
|
0:7/0 = 0
|
||||||
|
0:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
1:7/0 = 0
|
||||||
|
1:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(8, -8, -8, -8, -8, 8, 0, 0)
|
||||||
|
3:7/0 = 0
|
||||||
|
3:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, 0, 0)
|
||||||
|
4:7/0 = 0
|
||||||
|
4:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
11:7/0 = 0
|
||||||
|
11:7/0/terrain_set = 0
|
||||||
|
11:7/0/terrain = 2
|
||||||
|
11:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
11:7/0/terrains_peering_bit/top_side = 2
|
||||||
|
13:7/0 = 0
|
||||||
|
14:7/0 = 0
|
||||||
|
17:7/0 = 0
|
||||||
|
20:7/0 = 0
|
||||||
|
21:7/0 = 0
|
||||||
|
22:7/0 = 0
|
||||||
|
7:8/0 = 0
|
||||||
|
7:8/0/terrain_set = 0
|
||||||
|
7:8/0/terrain = 2
|
||||||
|
7:8/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
7:8/0/terrains_peering_bit/bottom_side = 2
|
||||||
|
13:8/0 = 0
|
||||||
|
14:8/0 = 0
|
||||||
|
20:8/0 = 0
|
||||||
|
21:8/0 = 0
|
||||||
|
0:9/0 = 0
|
||||||
|
0:9/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
1:9/0 = 0
|
||||||
|
1:9/0/physics_layer_0/polygon_0/points = PackedVector2Array(8, 8, -8, 8, -8, -8, 0, 0)
|
||||||
|
3:9/0 = 0
|
||||||
|
3:9/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 8, 8, 8, 8, -8, 0, 0)
|
||||||
|
4:9/0 = 0
|
||||||
|
4:9/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
6:9/0 = 0
|
||||||
|
6:9/0/terrain_set = 0
|
||||||
|
6:9/0/terrain = 2
|
||||||
|
6:9/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
6:9/0/terrains_peering_bit/right_side = 2
|
||||||
|
7:9/0 = 0
|
||||||
|
7:9/0/terrain_set = 0
|
||||||
|
7:9/0/terrain = 2
|
||||||
|
7:9/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
7:9/0/terrains_peering_bit/right_side = 2
|
||||||
|
7:9/0/terrains_peering_bit/left_side = 2
|
||||||
|
7:9/0/terrains_peering_bit/top_side = 2
|
||||||
|
8:9/0 = 0
|
||||||
|
8:9/0/terrain_set = 0
|
||||||
|
8:9/0/terrain = 2
|
||||||
|
8:9/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
8:9/0/terrains_peering_bit/left_side = 2
|
||||||
|
10:9/0 = 0
|
||||||
|
10:9/0/terrain_set = 0
|
||||||
|
10:9/0/terrain = 2
|
||||||
|
10:9/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
10:9/0/terrains_peering_bit/bottom_side = 2
|
||||||
|
12:9/0 = 0
|
||||||
|
13:9/0 = 0
|
||||||
|
14:9/0 = 0
|
||||||
|
15:9/0 = 0
|
||||||
|
16:9/0 = 0
|
||||||
|
17:9/0 = 0
|
||||||
|
18:9/0 = 0
|
||||||
|
0:10/0 = 0
|
||||||
|
0:10/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
1:10/0 = 0
|
||||||
|
1:10/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
2:10/0 = 0
|
||||||
|
2:10/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
3:10/0 = 0
|
||||||
|
3:10/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
4:10/0 = 0
|
||||||
|
4:10/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
10:10/0 = 0
|
||||||
|
10:10/0/terrain_set = 0
|
||||||
|
10:10/0/terrain = 2
|
||||||
|
10:10/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
10:10/0/terrains_peering_bit/right_side = 2
|
||||||
|
10:10/0/terrains_peering_bit/bottom_side = 2
|
||||||
|
10:10/0/terrains_peering_bit/top_side = 2
|
||||||
|
11:10/0 = 0
|
||||||
|
11:10/0/terrain_set = 0
|
||||||
|
11:10/0/terrain = 2
|
||||||
|
11:10/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
11:10/0/terrains_peering_bit/left_side = 2
|
||||||
|
14:10/0 = 0
|
||||||
|
15:10/0 = 0
|
||||||
|
16:10/0 = 0
|
||||||
|
17:10/0 = 0
|
||||||
|
18:10/0 = 0
|
||||||
|
19:10/0 = 0
|
||||||
|
20:10/0 = 0
|
||||||
|
21:10/0 = 0
|
||||||
|
22:10/0 = 0
|
||||||
|
6:11/0 = 0
|
||||||
|
6:11/0/terrain_set = 0
|
||||||
|
6:11/0/terrain = 2
|
||||||
|
6:11/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
6:11/0/terrains_peering_bit/right_side = 2
|
||||||
|
7:11/0 = 0
|
||||||
|
7:11/0/terrain_set = 0
|
||||||
|
7:11/0/terrain = 2
|
||||||
|
7:11/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
7:11/0/terrains_peering_bit/right_side = 2
|
||||||
|
7:11/0/terrains_peering_bit/bottom_side = 2
|
||||||
|
7:11/0/terrains_peering_bit/left_side = 2
|
||||||
|
8:11/0 = 0
|
||||||
|
8:11/0/terrain_set = 0
|
||||||
|
8:11/0/terrain = 2
|
||||||
|
8:11/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
8:11/0/terrains_peering_bit/left_side = 2
|
||||||
|
10:11/0 = 0
|
||||||
|
10:11/0/terrain_set = 0
|
||||||
|
10:11/0/terrain = 2
|
||||||
|
10:11/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
10:11/0/terrains_peering_bit/top_side = 2
|
||||||
|
12:11/0 = 0
|
||||||
|
13:11/0 = 0
|
||||||
|
14:11/0 = 0
|
||||||
|
15:11/0 = 0
|
||||||
|
16:11/0 = 0
|
||||||
|
17:11/0 = 0
|
||||||
|
18:11/0 = 0
|
||||||
|
19:11/0 = 0
|
||||||
|
20:11/0 = 0
|
||||||
|
21:11/0 = 0
|
||||||
|
22:11/0 = 0
|
||||||
|
0:12/0 = 0
|
||||||
|
1:12/0 = 0
|
||||||
|
2:12/0 = 0
|
||||||
|
3:12/0 = 0
|
||||||
|
4:12/0 = 0
|
||||||
|
7:12/0 = 0
|
||||||
|
7:12/0/terrain_set = 0
|
||||||
|
7:12/0/terrain = 2
|
||||||
|
7:12/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8)
|
||||||
|
7:12/0/terrains_peering_bit/top_side = 2
|
||||||
|
12:12/0 = 0
|
||||||
|
13:12/0 = 0
|
||||||
|
14:12/0 = 0
|
||||||
|
15:12/0 = 0
|
||||||
|
16:12/0 = 0
|
||||||
|
17:12/0 = 0
|
||||||
|
18:12/0 = 0
|
||||||
|
19:12/0 = 0
|
||||||
|
21:12/0 = 0
|
||||||
|
|
||||||
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_4xq2o"]
|
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_4xq2o"]
|
||||||
texture = ExtResource("2_43n76")
|
texture = ExtResource("2_43n76")
|
||||||
1:0/0 = 0
|
1:0/0 = 0
|
||||||
@@ -497,4 +1062,7 @@ terrain_set_0/terrain_0/name = "Village"
|
|||||||
terrain_set_0/terrain_0/color = Color(1, 1, 1, 1)
|
terrain_set_0/terrain_0/color = Color(1, 1, 1, 1)
|
||||||
terrain_set_0/terrain_1/name = "Platforms"
|
terrain_set_0/terrain_1/name = "Platforms"
|
||||||
terrain_set_0/terrain_1/color = Color(0.46875, 0.5, 0.25, 1)
|
terrain_set_0/terrain_1/color = Color(0.46875, 0.5, 0.25, 1)
|
||||||
|
terrain_set_0/terrain_2/name = "Forest"
|
||||||
|
terrain_set_0/terrain_2/color = Color(0.536634, 0.836478, 0.371357, 1)
|
||||||
sources/1 = SubResource("TileSetAtlasSource_4xq2o")
|
sources/1 = SubResource("TileSetAtlasSource_4xq2o")
|
||||||
|
sources/0 = SubResource("TileSetAtlasSource_43n76")
|
||||||
|
131
scenes/level_forest_5.tscn
Normal file
@@ -1,4 +1,4 @@
|
|||||||
[gd_scene load_steps=32 format=4 uid="uid://h60obxmju6mo"]
|
[gd_scene load_steps=33 format=4 uid="uid://h60obxmju6mo"]
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://dyp4i4ru2j2jh" path="res://objects/fxs/explosion_fx.tscn" id="1_p30ax"]
|
[ext_resource type="PackedScene" uid="uid://dyp4i4ru2j2jh" path="res://objects/fxs/explosion_fx.tscn" id="1_p30ax"]
|
||||||
[ext_resource type="PackedScene" uid="uid://dx80ivlvuuew4" path="res://objects/fxs/fire_fx.tscn" id="2_a7yjf"]
|
[ext_resource type="PackedScene" uid="uid://dx80ivlvuuew4" path="res://objects/fxs/fire_fx.tscn" id="2_a7yjf"]
|
||||||
@@ -22,6 +22,7 @@
|
|||||||
[ext_resource type="Script" uid="uid://8r1y8elyw7kt" path="res://scripts/console_management.gd" id="19_0pba3"]
|
[ext_resource type="Script" uid="uid://8r1y8elyw7kt" path="res://scripts/console_management.gd" id="19_0pba3"]
|
||||||
[ext_resource type="PackedScene" uid="uid://cawlpch2lk3a2" path="res://objects/level/world_environment.tscn" id="20_embdf"]
|
[ext_resource type="PackedScene" uid="uid://cawlpch2lk3a2" path="res://objects/level/world_environment.tscn" id="20_embdf"]
|
||||||
[ext_resource type="PackedScene" uid="uid://cywsu7yrtjdog" path="res://objects/level/global_light.tscn" id="21_fytod"]
|
[ext_resource type="PackedScene" uid="uid://cywsu7yrtjdog" path="res://objects/level/global_light.tscn" id="21_fytod"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://t6h2ra7kjyq" path="res://objects/entities/small_heal_potion.tscn" id="23_m6h4x"]
|
||||||
|
|
||||||
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_j7bvy"]
|
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_j7bvy"]
|
||||||
texture = ExtResource("7_uvxky")
|
texture = ExtResource("7_uvxky")
|
||||||
@@ -356,6 +357,15 @@ skill_manager = NodePath("../Brick Player/SkillManager")
|
|||||||
|
|
||||||
[node name="Global Light" parent="." instance=ExtResource("21_fytod")]
|
[node name="Global Light" parent="." instance=ExtResource("21_fytod")]
|
||||||
|
|
||||||
|
[node name="SmallHealPotion" parent="." instance=ExtResource("23_m6h4x")]
|
||||||
|
position = Vector2(1074, -105)
|
||||||
|
|
||||||
|
[node name="SmallHealPotion2" parent="." instance=ExtResource("23_m6h4x")]
|
||||||
|
position = Vector2(1244, -41)
|
||||||
|
|
||||||
|
[node name="SmallHealPotion3" parent="." instance=ExtResource("23_m6h4x")]
|
||||||
|
position = Vector2(1359, -42)
|
||||||
|
|
||||||
[connection signal="on_death" from="Brick Player/HealthComponent" to="UI Layer/DeathScreen" method="on_player_death"]
|
[connection signal="on_death" from="Brick Player/HealthComponent" to="UI Layer/DeathScreen" method="on_player_death"]
|
||||||
[connection signal="on_death" from="Brick Player/HealthComponent" to="UI Layer/GameOverScreen" method="on_player_death"]
|
[connection signal="on_death" from="Brick Player/HealthComponent" to="UI Layer/GameOverScreen" method="on_player_death"]
|
||||||
|
|
||||||
|
@@ -40,6 +40,9 @@ func on_timer_timeout() -> void:
|
|||||||
|
|
||||||
|
|
||||||
func throw_brick(power_multiplier: float = 1.0) -> void:
|
func throw_brick(power_multiplier: float = 1.0) -> void:
|
||||||
|
if not can_throw:
|
||||||
|
return
|
||||||
|
|
||||||
var instance: Node2D = brick_scene.instantiate()
|
var instance: Node2D = brick_scene.instantiate()
|
||||||
var init := instance.get_node_or_null("ProjectileInitComponent") as ProjectileInitComponent
|
var init := instance.get_node_or_null("ProjectileInitComponent") as ProjectileInitComponent
|
||||||
if init and player_controller.current_movement is PlatformMovement:
|
if init and player_controller.current_movement is PlatformMovement:
|
||||||
|
@@ -3,6 +3,8 @@ extends Node
|
|||||||
|
|
||||||
@export var root: Node2D
|
@export var root: Node2D
|
||||||
@export var area2d: Area2D
|
@export var area2d: Area2D
|
||||||
|
@export var hit_terrain_fx: TerrainHitFx
|
||||||
|
@export var bullet_sprite: Sprite2D
|
||||||
|
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
@@ -10,9 +12,26 @@ func _ready() -> void:
|
|||||||
area2d.area_entered.connect(on_area2d_area_entered)
|
area2d.area_entered.connect(on_area2d_area_entered)
|
||||||
|
|
||||||
|
|
||||||
func on_area2d_body_entered(_body: Node2D) -> void:
|
|
||||||
|
func on_area2d_body_entered(body: Node2D) -> void:
|
||||||
|
if body is TileMapLayer:
|
||||||
|
if bullet_sprite:
|
||||||
|
bullet_sprite.visible = false
|
||||||
|
play_terrain_hit_fx()
|
||||||
|
return
|
||||||
|
|
||||||
root.queue_free()
|
root.queue_free()
|
||||||
|
|
||||||
|
|
||||||
func on_area2d_area_entered(_area: Area2D) -> void:
|
func on_area2d_area_entered(_area: Area2D) -> void:
|
||||||
root.queue_free()
|
root.queue_free()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
func play_terrain_hit_fx() -> void:
|
||||||
|
if not hit_terrain_fx:
|
||||||
|
return
|
||||||
|
|
||||||
|
await hit_terrain_fx.trigger_fx()
|
||||||
|
|
||||||
|
root.queue_free()
|
||||||
|
@@ -8,7 +8,7 @@ var has_fade_away: bool = false
|
|||||||
@export var collision_shape: CollisionShape2D
|
@export var collision_shape: CollisionShape2D
|
||||||
@export var collectable_data: CollectableResource
|
@export var collectable_data: CollectableResource
|
||||||
@export var sfx: AudioStreamPlayer2D
|
@export var sfx: AudioStreamPlayer2D
|
||||||
signal collected(amount: int, type: CollectableResource.CollectableType)
|
signal collected(amount: Variant, type: CollectableResource.CollectableType, body: Node2D)
|
||||||
|
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
@@ -25,11 +25,14 @@ func _ready() -> void:
|
|||||||
|
|
||||||
func _on_area2d_body_entered(body: Node2D) -> void:
|
func _on_area2d_body_entered(body: Node2D) -> void:
|
||||||
if body.has_node("CanPickUpComponent"):
|
if body.has_node("CanPickUpComponent"):
|
||||||
collected.emit(collectable_data.amount, collectable_data.type)
|
collected.emit(collectable_data.amount, collectable_data.type, body)
|
||||||
if collision_shape:
|
if collision_shape:
|
||||||
collision_shape.call_deferred("set_disabled", true)
|
collision_shape.call_deferred("set_disabled", true)
|
||||||
if sfx:
|
if sfx:
|
||||||
sfx.play()
|
sfx.play()
|
||||||
if not has_fade_away:
|
if not has_fade_away and sfx:
|
||||||
await sfx.finished
|
await sfx.finished
|
||||||
root.queue_free()
|
root.queue_free()
|
||||||
|
elif not has_fade_away:
|
||||||
|
root.queue_free()
|
||||||
|
|
||||||
|
37
scripts/components/enemy_wave_trigger.gd
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
class_name EnemyWaveTrigger
|
||||||
|
extends Node
|
||||||
|
|
||||||
|
@export var area2d: Area2D
|
||||||
|
@export var path_follow_node: PathFollow2D
|
||||||
|
@export var speed: float = 100.0
|
||||||
|
@export var loop: bool = false
|
||||||
|
@export var activate_on_enter: bool = true
|
||||||
|
|
||||||
|
var active: bool = false
|
||||||
|
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
area2d.body_entered.connect(_on_body_entered)
|
||||||
|
if path_follow_node:
|
||||||
|
path_follow_node.progress = 0
|
||||||
|
path_follow_node.set_process(false)
|
||||||
|
|
||||||
|
|
||||||
|
func _process(delta: float) -> void:
|
||||||
|
if not active or not path_follow_node:
|
||||||
|
return
|
||||||
|
path_follow_node.progress += speed * delta
|
||||||
|
if path_follow_node.progress_ratio >= 1.0 and not loop:
|
||||||
|
active = false
|
||||||
|
path_follow_node.set_process(false)
|
||||||
|
|
||||||
|
|
||||||
|
func _on_body_entered(body: Node2D) -> void:
|
||||||
|
if activate_on_enter:
|
||||||
|
start_wave()
|
||||||
|
|
||||||
|
|
||||||
|
func start_wave() -> void:
|
||||||
|
if path_follow_node:
|
||||||
|
path_follow_node.set_process(true)
|
||||||
|
active = true
|
1
scripts/components/enemy_wave_trigger.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://tmahwsvpkrbv
|
40
scripts/components/heal_component.gd
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
class_name HealComponent
|
||||||
|
extends Node
|
||||||
|
|
||||||
|
@export var heal_fx: GPUParticles2D
|
||||||
|
@export var collectable: CollectableComponent
|
||||||
|
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
if not collectable:
|
||||||
|
printerr("HealComponent: No CollectableComponent assigned.")
|
||||||
|
return
|
||||||
|
|
||||||
|
collectable.collected.connect(on_collected)
|
||||||
|
|
||||||
|
|
||||||
|
func on_collected(amount: float, type: CollectableResource.CollectableType, _body: Node2D) -> void:
|
||||||
|
if type != CollectableResource.CollectableType.HEALTH:
|
||||||
|
return
|
||||||
|
|
||||||
|
if not collectable:
|
||||||
|
printerr("HealComponent: No CollectableComponent assigned.")
|
||||||
|
return
|
||||||
|
|
||||||
|
var health_component := _body.get_node_or_null("HealthComponent") as HealthComponent
|
||||||
|
if not health_component or not health_component is HealthComponent:
|
||||||
|
printerr("HealComponent: No HealthComponent found on collected body.")
|
||||||
|
return
|
||||||
|
health_component.increase_health(amount)
|
||||||
|
if heal_fx:
|
||||||
|
play_heal_fx()
|
||||||
|
else:
|
||||||
|
owner.queue_free()
|
||||||
|
|
||||||
|
|
||||||
|
func play_heal_fx() -> void:
|
||||||
|
if not heal_fx:
|
||||||
|
return
|
||||||
|
|
||||||
|
heal_fx.restart()
|
||||||
|
heal_fx.emitting = true
|
1
scripts/components/heal_component.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://cegdd1sravi5m
|
@@ -9,64 +9,40 @@ signal on_health_change(delta: float, total_health: float)
|
|||||||
signal on_death
|
signal on_death
|
||||||
|
|
||||||
|
|
||||||
func _get_delta(value: float) -> float:
|
|
||||||
var old_value = health
|
func _get_delta(new_value: float) -> float:
|
||||||
return value - old_value
|
return new_value - health
|
||||||
|
|
||||||
|
|
||||||
func set_health(new_value: float):
|
func set_health(new_value: float):
|
||||||
var delta = _get_delta(new_value)
|
_apply_health_change(new_value)
|
||||||
|
|
||||||
if sign(delta) > 0:
|
|
||||||
if heal_fx:
|
|
||||||
heal_fx.play()
|
|
||||||
elif sign(delta) < 0:
|
|
||||||
if hurt_fx:
|
|
||||||
hurt_fx.play()
|
|
||||||
|
|
||||||
await hurt_fx.finished
|
|
||||||
|
|
||||||
if new_value >= max_health:
|
|
||||||
health = max_health
|
|
||||||
on_health_change.emit(delta, health)
|
|
||||||
return
|
|
||||||
|
|
||||||
health = new_value
|
|
||||||
|
|
||||||
if health <= 0:
|
|
||||||
on_death.emit()
|
|
||||||
return
|
|
||||||
|
|
||||||
on_health_change.emit(delta, health)
|
|
||||||
|
|
||||||
|
|
||||||
func decrease_health(value: float):
|
func decrease_health(value: float):
|
||||||
var delta = _get_delta(value)
|
_apply_health_change(health - value)
|
||||||
|
|
||||||
health -= value
|
|
||||||
if hurt_fx:
|
|
||||||
hurt_fx.play()
|
|
||||||
await hurt_fx.finished
|
|
||||||
|
|
||||||
if health <= 0:
|
|
||||||
on_death.emit()
|
|
||||||
return
|
|
||||||
|
|
||||||
on_health_change.emit(delta, health)
|
|
||||||
|
|
||||||
|
|
||||||
func increase_health(value: float):
|
func increase_health(value: float):
|
||||||
var delta = _get_delta(value)
|
_apply_health_change(health + value)
|
||||||
|
|
||||||
health += value
|
|
||||||
|
|
||||||
if health >= max_health:
|
func _apply_health_change(new_health: float, play_fx: bool = true) -> void:
|
||||||
health = max_health
|
new_health = clamp(new_health, 0.0, max_health)
|
||||||
on_health_change.emit(delta, health)
|
var delta := new_health - health
|
||||||
return
|
|
||||||
|
|
||||||
health += value
|
if delta == 0.0:
|
||||||
if heal_fx:
|
return # No change
|
||||||
|
|
||||||
|
if play_fx:
|
||||||
|
if delta > 0 and heal_fx:
|
||||||
heal_fx.play()
|
heal_fx.play()
|
||||||
on_health_change.emit(delta, health)
|
elif delta < 0 and hurt_fx:
|
||||||
|
hurt_fx.play()
|
||||||
|
await hurt_fx.finished
|
||||||
|
|
||||||
|
health = new_health
|
||||||
|
|
||||||
|
if health <= 0:
|
||||||
|
on_death.emit()
|
||||||
|
else:
|
||||||
|
on_health_change.emit(delta, health)
|
||||||
|
@@ -39,7 +39,7 @@ func on_health_change(delta: float, total_health: float) -> void:
|
|||||||
await get_tree().create_timer(hit_duration).timeout
|
await get_tree().create_timer(hit_duration).timeout
|
||||||
deactivate()
|
deactivate()
|
||||||
|
|
||||||
if total_health > 0:
|
if total_health > 0 and delta < 0:
|
||||||
handle_hit_fx()
|
handle_hit_fx()
|
||||||
|
|
||||||
|
|
||||||
|
@@ -8,6 +8,7 @@ extends Node
|
|||||||
@export var root: Node2D
|
@export var root: Node2D
|
||||||
@export var bullet_spawn_right: Node2D
|
@export var bullet_spawn_right: Node2D
|
||||||
@export var bullet_spawn_left: Node2D
|
@export var bullet_spawn_left: Node2D
|
||||||
|
@export var shooting_interval_variation: float = 0.0
|
||||||
|
|
||||||
var timer: Timer
|
var timer: Timer
|
||||||
|
|
||||||
@@ -43,9 +44,16 @@ func on_timer_timeout() -> void:
|
|||||||
timer.start()
|
timer.start()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
func get_shoot_interval() -> float:
|
||||||
|
if shooting_interval_variation > 0.0:
|
||||||
|
return shoot_interval + randf_range(-shooting_interval_variation, shooting_interval_variation)
|
||||||
|
return shoot_interval
|
||||||
|
|
||||||
|
|
||||||
func setup_timer() -> void:
|
func setup_timer() -> void:
|
||||||
timer = Timer.new()
|
timer = Timer.new()
|
||||||
timer.wait_time = shoot_interval
|
timer.wait_time = get_shoot_interval()
|
||||||
timer.one_shot = false
|
timer.one_shot = false
|
||||||
timer.autostart = true
|
timer.autostart = true
|
||||||
timer.timeout.connect(on_timer_timeout)
|
timer.timeout.connect(on_timer_timeout)
|
||||||
|
@@ -43,6 +43,8 @@ func _process(_delta: float) -> void:
|
|||||||
else:
|
else:
|
||||||
rotation_target.rotation = 0
|
rotation_target.rotation = 0
|
||||||
|
|
||||||
|
calculate_jump_vars()
|
||||||
|
|
||||||
|
|
||||||
func _physics_process(delta) -> void:
|
func _physics_process(delta) -> void:
|
||||||
if not body or not enabled:
|
if not body or not enabled:
|
||||||
@@ -106,6 +108,11 @@ func handle_direction(input_dir: float) -> Vector2:
|
|||||||
return last_direction
|
return last_direction
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
func on_ship_entered() -> void:
|
func on_ship_entered() -> void:
|
||||||
rotation_target.rotation = 0
|
rotation_target.rotation = 0
|
||||||
|
|
||||||
|
|
||||||
|
func calculate_jump_vars() -> void:
|
||||||
|
jump_velocity = ((2.0 * jump_height) / jump_time_to_peak) * -1.0
|
||||||
|
jump_gravity = ((-2.0 * jump_height) / (jump_time_to_peak * jump_time_to_peak)) * -1.0
|
||||||
|
fall_gravity = ((-2.0 * jump_height) / (jump_time_to_descent * jump_time_to_descent)) * -1.0
|
67
scripts/components/progressive_damage_component.gd
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
class_name ProgressiveDamageComponent
|
||||||
|
extends Node
|
||||||
|
|
||||||
|
@export var health_component: HealthComponent
|
||||||
|
@export var sprite: Sprite2D
|
||||||
|
@export var platform_movement: PlatformMovement
|
||||||
|
@export var min_jump_height: float = 60.0
|
||||||
|
@export var jump_reduction_percentage: float = 0.1 # this is a percentage of the jump height per hit
|
||||||
|
|
||||||
|
@onready var max_health: float = health_component.max_health
|
||||||
|
|
||||||
|
var og_jump_height: float = 0.0
|
||||||
|
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
if not health_component:
|
||||||
|
printerr("ProgressiveDamageComponent: health_component is not set.")
|
||||||
|
return
|
||||||
|
if not sprite:
|
||||||
|
printerr("ProgressiveDamageComponent: sprite is not set.")
|
||||||
|
return
|
||||||
|
|
||||||
|
health_component.on_health_change.connect(on_health_change)
|
||||||
|
|
||||||
|
if platform_movement:
|
||||||
|
og_jump_height = platform_movement.jump_height
|
||||||
|
|
||||||
|
|
||||||
|
func get_damage_frame() -> int:
|
||||||
|
if not sprite or not health_component:
|
||||||
|
return 0
|
||||||
|
|
||||||
|
var frames_count := sprite.get_hframes()
|
||||||
|
if frames_count == 0:
|
||||||
|
return 0
|
||||||
|
|
||||||
|
var current_health := health_component.health
|
||||||
|
var health_ratio := current_health / max_health
|
||||||
|
return int(frames_count * (1.0 - health_ratio))
|
||||||
|
|
||||||
|
|
||||||
|
func get_jump_height() -> float:
|
||||||
|
if not platform_movement:
|
||||||
|
return 0.0
|
||||||
|
|
||||||
|
var jump_height := og_jump_height
|
||||||
|
if jump_height <= 0:
|
||||||
|
return 0.0
|
||||||
|
|
||||||
|
var damage_frame := get_damage_frame()
|
||||||
|
if damage_frame < 0 or damage_frame >= sprite.get_hframes():
|
||||||
|
return jump_height
|
||||||
|
|
||||||
|
var reduction := jump_reduction_percentage * jump_height
|
||||||
|
var calculated_jump_height := jump_height - (damage_frame * reduction)
|
||||||
|
return max(calculated_jump_height, min_jump_height)
|
||||||
|
|
||||||
|
|
||||||
|
func on_health_change(_delta: float, _total_health: float) -> void:
|
||||||
|
var frame := get_damage_frame()
|
||||||
|
if frame < 0 or frame >= sprite.get_hframes():
|
||||||
|
return
|
||||||
|
|
||||||
|
sprite.frame = frame
|
||||||
|
if platform_movement:
|
||||||
|
platform_movement.jump_height = get_jump_height()
|
||||||
|
|
1
scripts/components/progressive_damage_component.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://d32kd83lf86iy
|
@@ -19,7 +19,8 @@ func _ready() -> void:
|
|||||||
collectable.collected.connect(on_collected)
|
collectable.collected.connect(on_collected)
|
||||||
|
|
||||||
|
|
||||||
func on_collected(amount: int, type: CollectableResource.CollectableType) -> void:
|
|
||||||
|
func on_collected(amount: int, type: CollectableResource.CollectableType, _body: Node2D) -> void:
|
||||||
if type != requirement_type:
|
if type != requirement_type:
|
||||||
return
|
return
|
||||||
add_progress(amount)
|
add_progress(amount)
|
||||||
|
@@ -12,7 +12,8 @@ func _ready():
|
|||||||
coin.collected.connect(on_collected)
|
coin.collected.connect(on_collected)
|
||||||
|
|
||||||
|
|
||||||
func on_collected(amount: int, type: CollectableResource.CollectableType) -> void:
|
|
||||||
|
func on_collected(amount: int, type: CollectableResource.CollectableType, _body: Node2D) -> void:
|
||||||
if not game_manager:
|
if not game_manager:
|
||||||
return
|
return
|
||||||
if type != CollectableResource.CollectableType.COIN:
|
if type != CollectableResource.CollectableType.COIN:
|
||||||
|
@@ -4,7 +4,7 @@ extends Node
|
|||||||
@export var skill_manager: SkillManager
|
@export var skill_manager: SkillManager
|
||||||
|
|
||||||
@onready var game_manager: GM = $"/root/GameManager"
|
@onready var game_manager: GM = $"/root/GameManager"
|
||||||
|
signal skill_unlocked(skill_data: SkillData)
|
||||||
|
|
||||||
|
|
||||||
func has_enough_coins(amount: int) -> bool:
|
func has_enough_coins(amount: int) -> bool:
|
||||||
@@ -15,15 +15,20 @@ func try_unlock_skill(skill_data: SkillData) -> bool:
|
|||||||
if not game_manager:
|
if not game_manager:
|
||||||
return false
|
return false
|
||||||
|
|
||||||
if game_manager.is_skill_unlocked(skill_data.name):
|
if game_manager.is_skill_unlocked(skill_data):
|
||||||
return false
|
return false
|
||||||
|
|
||||||
if not has_enough_coins(skill_data.cost):
|
if not has_enough_coins(skill_data.cost):
|
||||||
return false
|
return false
|
||||||
|
|
||||||
game_manager.remove_coins(skill_data.cost)
|
var skill: SkillData = skill_data
|
||||||
game_manager.current_session_state["skills_unlocked"].append(skill_data.name)
|
skill.level = 1
|
||||||
skill_manager.add_skill(skill_data)
|
skill.is_active = true
|
||||||
|
|
||||||
|
game_manager.remove_coins(skill.cost)
|
||||||
|
game_manager.current_session_state["skills_unlocked"].append(skill)
|
||||||
|
skill_manager.add_skill(skill)
|
||||||
|
skill_unlocked.emit(skill)
|
||||||
return true
|
return true
|
||||||
|
|
||||||
|
|
||||||
@@ -33,6 +38,27 @@ func unlock_all_skills() -> void:
|
|||||||
|
|
||||||
for skill in available_skills:
|
for skill in available_skills:
|
||||||
skills.append(skill.name)
|
skills.append(skill.name)
|
||||||
|
skill_unlocked.emit(skill)
|
||||||
|
|
||||||
game_manager.unlock_skills(skills)
|
game_manager.unlock_skills(available_skills)
|
||||||
skill_manager.apply_unlocked_skills()
|
skill_manager.apply_unlocked_skills()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
func try_upgrade_skill(skill_data: SkillData) -> bool:
|
||||||
|
if not game_manager:
|
||||||
|
return false
|
||||||
|
|
||||||
|
if not game_manager.is_skill_unlocked(skill_data):
|
||||||
|
return false
|
||||||
|
|
||||||
|
if skill_data.level >= skill_data.max_level:
|
||||||
|
return false
|
||||||
|
|
||||||
|
if not has_enough_coins(skill_data.cost):
|
||||||
|
return false
|
||||||
|
|
||||||
|
game_manager.remove_coins(skill_data.cost)
|
||||||
|
skill_data.level += 1
|
||||||
|
skill_unlocked.emit(skill_data)
|
||||||
|
return true
|
||||||
|
21
scripts/components/spaceship_exit_component.gd
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
class_name SpaceshipExitComponent
|
||||||
|
extends Node
|
||||||
|
|
||||||
|
@export var area2d: Area2D
|
||||||
|
signal spaceship_exited
|
||||||
|
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
if not area2d:
|
||||||
|
printerr("SpaceshipExitComponent: area2d is not set.")
|
||||||
|
return
|
||||||
|
|
||||||
|
area2d.body_entered.connect(_on_area2d_body_entered)
|
||||||
|
|
||||||
|
|
||||||
|
func _on_area2d_body_entered(body: Node2D) -> void:
|
||||||
|
if not body is PlayerController:
|
||||||
|
printerr("SpaceshipExitComponent: body is not a PlayerController.")
|
||||||
|
return
|
||||||
|
print("SpaceshipExitComponent: PlayerController exited spaceship.")
|
||||||
|
spaceship_exited.emit()
|
1
scripts/components/spaceship_exit_component.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://ybmwls7hv8j3
|
24
scripts/components/terrain_hit_fx.gd
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
class_name TerrainHitFx
|
||||||
|
extends Node
|
||||||
|
|
||||||
|
var gpu_particles: Array[GPUParticles2D] = []
|
||||||
|
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
if owner is GPUParticles2D:
|
||||||
|
gpu_particles.append(owner)
|
||||||
|
|
||||||
|
for child in get_children():
|
||||||
|
if child is GPUParticles2D:
|
||||||
|
gpu_particles.append(child)
|
||||||
|
|
||||||
|
|
||||||
|
func trigger_fx() -> Signal:
|
||||||
|
for fx in gpu_particles:
|
||||||
|
if fx:
|
||||||
|
fx.restart()
|
||||||
|
fx.emitting = true
|
||||||
|
return gpu_particles[0].finished
|
||||||
|
|
||||||
|
|
||||||
|
|
1
scripts/components/terrain_hit_fx.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://djfejwp6e402k
|
@@ -56,10 +56,10 @@ func console_set_lives(amount: Variant) -> void:
|
|||||||
func console_set_health(amount: Variant) -> void:
|
func console_set_health(amount: Variant) -> void:
|
||||||
if not player_health:
|
if not player_health:
|
||||||
return
|
return
|
||||||
if not amount.is_valid_int():
|
if not amount.is_valid_float():
|
||||||
Console.print_error("Invalid amount: " + str(amount))
|
Console.print_error("Invalid amount: " + str(amount))
|
||||||
return
|
return
|
||||||
player_health.set_health(int(amount))
|
player_health.set_health(float(amount))
|
||||||
Console.print_info("Set health to " + str(amount))
|
Console.print_info("Set health to " + str(amount))
|
||||||
|
|
||||||
|
|
||||||
@@ -70,12 +70,16 @@ func console_unlock_skill(skill_name: Variant) -> void:
|
|||||||
Console.print_error("Invalid skill name: " + str(skill_name))
|
Console.print_error("Invalid skill name: " + str(skill_name))
|
||||||
return
|
return
|
||||||
|
|
||||||
game_manager.unlock_skill(skill_name)
|
|
||||||
var skill_data: SkillData = skill_manager.get_skill_by_name(skill_name)
|
var skill_data: SkillData = skill_manager.get_skill_by_name(skill_name)
|
||||||
|
skill_data.level = 1
|
||||||
|
|
||||||
if not skill_data:
|
if not skill_data:
|
||||||
Console.print_error("Skill not found: " + str(skill_name))
|
Console.print_error("Skill not found: " + str(skill_name))
|
||||||
return
|
return
|
||||||
skill_manager.add_skill(skill_data)
|
|
||||||
|
game_manager.unlock_skill(skill_data)
|
||||||
|
skill_manager.activate_skill(skill_data)
|
||||||
|
skill_unlocker.skill_unlocked.emit(skill_data)
|
||||||
Console.print_info("Unlocked skill: " + str(skill_name))
|
Console.print_info("Unlocked skill: " + str(skill_name))
|
||||||
|
|
||||||
|
|
||||||
|
@@ -68,6 +68,13 @@ func get_kid_nodes() -> Array[CollectableComponent]:
|
|||||||
return kid_nodes
|
return kid_nodes
|
||||||
|
|
||||||
|
|
||||||
|
func get_player_node() -> Node:
|
||||||
|
for node in nodes_in_scene:
|
||||||
|
if node is PlayerController:
|
||||||
|
return node
|
||||||
|
return null
|
||||||
|
|
||||||
|
|
||||||
func add_coins(amount: int) -> void:
|
func add_coins(amount: int) -> void:
|
||||||
player_state["coins"] += amount
|
player_state["coins"] += amount
|
||||||
player_state["coins"] = max(0, player_state["coins"])
|
player_state["coins"] = max(0, player_state["coins"])
|
||||||
@@ -110,23 +117,24 @@ func get_lives() -> int:
|
|||||||
return player_state["lives"]
|
return player_state["lives"]
|
||||||
|
|
||||||
|
|
||||||
func is_skill_unlocked(skill_name: String) -> bool:
|
|
||||||
return skill_name in player_state["unlocked_skills"] or skill_name in current_session_state["skills_unlocked"]
|
func is_skill_unlocked(skill: SkillData) -> bool:
|
||||||
|
return skill in player_state["unlocked_skills"] or skill in current_session_state["skills_unlocked"]
|
||||||
|
|
||||||
|
|
||||||
func unlock_skill(skill_name: String) -> void:
|
func unlock_skill(skill: SkillData) -> void:
|
||||||
if not is_skill_unlocked(skill_name):
|
if not is_skill_unlocked(skill):
|
||||||
player_state["unlocked_skills"].append(skill_name)
|
player_state["unlocked_skills"].append(skill)
|
||||||
|
|
||||||
|
|
||||||
func remove_skill(skill_name: String) -> void:
|
func remove_skill(skill: SkillData) -> void:
|
||||||
if is_skill_unlocked(skill_name):
|
if is_skill_unlocked(skill):
|
||||||
player_state["unlocked_skills"].erase(skill_name)
|
player_state["unlocked_skills"].erase(skill)
|
||||||
|
|
||||||
|
|
||||||
func unlock_skills(skill_names: Array[String]) -> void:
|
func unlock_skills(skills: Array[SkillData]) -> void:
|
||||||
for skill_name in skill_names:
|
for skill in skills:
|
||||||
unlock_skill(skill_name)
|
unlock_skill(skill)
|
||||||
|
|
||||||
|
|
||||||
func reset_player_state() -> void:
|
func reset_player_state() -> void:
|
||||||
@@ -163,7 +171,6 @@ func reset_current_session_state() -> void:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
func restart_game() -> void:
|
func restart_game() -> void:
|
||||||
reset_player_state()
|
reset_player_state()
|
||||||
reset_current_session_state()
|
reset_current_session_state()
|
||||||
@@ -206,9 +213,19 @@ func on_level_complete() -> void:
|
|||||||
var level_index = player_state["current_level"]
|
var level_index = player_state["current_level"]
|
||||||
mark_level_complete(level_index)
|
mark_level_complete(level_index)
|
||||||
add_coins(current_session_state["coins_collected"])
|
add_coins(current_session_state["coins_collected"])
|
||||||
for skill_name in current_session_state["skills_unlocked"]:
|
for skill in current_session_state["skills_unlocked"]:
|
||||||
unlock_skill(skill_name)
|
unlock_skill(skill)
|
||||||
|
|
||||||
reset_current_session_state()
|
reset_current_session_state()
|
||||||
try_to_go_to_next_level()
|
try_to_go_to_next_level()
|
||||||
SaveSystem.save_game()
|
SaveSystem.save_game()
|
||||||
|
|
||||||
|
|
||||||
|
func get_unlocked_skills() -> Array:
|
||||||
|
var skills_unlocked = player_state.get("unlocked_skills", [])
|
||||||
|
var skills_current_session = current_session_state.get("skills_unlocked", [])
|
||||||
|
if not skills_current_session:
|
||||||
|
return skills_unlocked
|
||||||
|
if not skills_unlocked:
|
||||||
|
return skills_current_session
|
||||||
|
return skills_unlocked + skills_current_session
|
||||||
|
@@ -6,5 +6,5 @@ enum CollectableType {
|
|||||||
KID,
|
KID,
|
||||||
HEALTH,
|
HEALTH,
|
||||||
}
|
}
|
||||||
@export var amount: int = 0
|
@export var amount: Variant = 0.0
|
||||||
@export var type: CollectableType = CollectableType.COIN
|
@export var type: CollectableType = CollectableType.COIN
|
@@ -1,9 +1,18 @@
|
|||||||
class_name SkillData
|
class_name SkillData
|
||||||
extends Resource
|
extends Resource
|
||||||
|
|
||||||
|
enum SkillType {
|
||||||
|
ATTACK,
|
||||||
|
THROW,
|
||||||
|
MISC,
|
||||||
|
}
|
||||||
@export var name: String = ""
|
@export var name: String = ""
|
||||||
@export var description: String = ""
|
@export var description: String = ""
|
||||||
@export var node: PackedScene
|
@export var node: PackedScene
|
||||||
@export var config: Dictionary = {}
|
@export var config: Dictionary = {}
|
||||||
@export var cost: int = 0
|
@export var cost: int = 0
|
||||||
@export var icon: Texture2D
|
@export var icon: Texture2D
|
||||||
|
@export var type: SkillType = SkillType.ATTACK
|
||||||
|
@export var is_active: bool = false
|
||||||
|
@export var level: int = 1
|
||||||
|
@export var max_level: int = 1
|
@@ -1,6 +1,6 @@
|
|||||||
class_name TapThrowInputResource
|
class_name TapThrowInputResource
|
||||||
extends ThrowInputResource
|
extends ThrowInputResource
|
||||||
|
|
||||||
func process_input(event: InputEvent) -> void:
|
func update(_delta: float) -> void:
|
||||||
if event.is_action_pressed("attack"):
|
if Input.is_action_pressed("attack"):
|
||||||
throw_requested.emit(1.0)
|
throw_requested.emit(1.0)
|
8
scripts/screenshot.gd
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
extends Node
|
||||||
|
|
||||||
|
func _process(_delta: float) -> void:
|
||||||
|
if OS.is_debug_build() and Input.is_action_just_pressed("screenshot"):
|
||||||
|
var img := get_viewport().get_texture().get_image()
|
||||||
|
var id := OS.get_unique_id() + "_" + Time.get_datetime_string_from_system()
|
||||||
|
var path := "user://screenshot_" + str(id) + ".png"
|
||||||
|
img.save_png(path)
|
1
scripts/screenshot.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://bydv4g1n5s3nf
|
@@ -16,6 +16,17 @@ func add_skill(skill_data: SkillData) -> void:
|
|||||||
if active_components.has(skill_data.name):
|
if active_components.has(skill_data.name):
|
||||||
return
|
return
|
||||||
|
|
||||||
|
if skill_data.type == SkillData.SkillType.THROW:
|
||||||
|
var unlocked_skills: Array = gm.get_unlocked_skills()
|
||||||
|
for skill in unlocked_skills:
|
||||||
|
var data = null
|
||||||
|
for s in available_skills:
|
||||||
|
if s == skill:
|
||||||
|
data = s
|
||||||
|
break
|
||||||
|
if data and data.type == SkillData.SkillType.THROW:
|
||||||
|
remove_skill(data.name)
|
||||||
|
|
||||||
var skill_instance := skill_data.node.instantiate()
|
var skill_instance := skill_data.node.instantiate()
|
||||||
for key in skill_data.config.keys():
|
for key in skill_data.config.keys():
|
||||||
if key in skill_instance:
|
if key in skill_instance:
|
||||||
@@ -44,12 +55,17 @@ func remove_skill(skill_name: String) -> void:
|
|||||||
if is_instance_valid(skill_instance):
|
if is_instance_valid(skill_instance):
|
||||||
skill_instance.queue_free()
|
skill_instance.queue_free()
|
||||||
|
|
||||||
|
var skills: Array = gm.get_unlocked_skills()
|
||||||
|
for s in skills:
|
||||||
|
if s.name == skill_name:
|
||||||
|
s.is_active = false
|
||||||
|
break
|
||||||
active_components.erase(skill_name)
|
active_components.erase(skill_name)
|
||||||
|
|
||||||
|
|
||||||
func apply_unlocked_skills() -> void:
|
func apply_unlocked_skills() -> void:
|
||||||
for skill_data in available_skills:
|
for skill_data in available_skills:
|
||||||
if gm.is_skill_unlocked(skill_data.name):
|
if gm.is_skill_unlocked(skill_data):
|
||||||
print("Applying skill: ", skill_data.name)
|
print("Applying skill: ", skill_data.name)
|
||||||
call_deferred("add_skill", skill_data)
|
call_deferred("add_skill", skill_data)
|
||||||
else:
|
else:
|
||||||
@@ -61,3 +77,27 @@ func get_skill_by_name(skill_name: String) -> SkillData:
|
|||||||
if skill_data.name == skill_name:
|
if skill_data.name == skill_name:
|
||||||
return skill_data
|
return skill_data
|
||||||
return null
|
return null
|
||||||
|
|
||||||
|
|
||||||
|
func activate_skill(skill: SkillData) -> void:
|
||||||
|
if not active_components.has(skill.name):
|
||||||
|
if skill:
|
||||||
|
add_skill(skill)
|
||||||
|
skill.is_active = true
|
||||||
|
|
||||||
|
|
||||||
|
func deactivate_skill(skill: SkillData) -> void:
|
||||||
|
if active_components.has(skill.name):
|
||||||
|
remove_skill(skill.name)
|
||||||
|
if skill:
|
||||||
|
skill.is_active = false
|
||||||
|
|
||||||
|
|
||||||
|
func toggle_skill_activation(skill: SkillData) -> void:
|
||||||
|
if not skill:
|
||||||
|
return
|
||||||
|
|
||||||
|
if active_components.has(skill.name):
|
||||||
|
deactivate_skill(skill)
|
||||||
|
else:
|
||||||
|
activate_skill(skill)
|
||||||
|
@@ -32,6 +32,8 @@ func _ready() -> void:
|
|||||||
else:
|
else:
|
||||||
continue_button.disabled = false
|
continue_button.disabled = false
|
||||||
|
|
||||||
|
continue_button.grab_focus()
|
||||||
|
|
||||||
|
|
||||||
func _on_new_game_button_pressed() -> void:
|
func _on_new_game_button_pressed() -> void:
|
||||||
if gm:
|
if gm:
|
||||||
|
@@ -3,15 +3,19 @@ extends Node
|
|||||||
|
|
||||||
@export var root: Control
|
@export var root: Control
|
||||||
@export var skill_data: Array[SkillData] = []
|
@export var skill_data: Array[SkillData] = []
|
||||||
@export var grid: GridContainer
|
@export var to_unlock_grid: GridContainer
|
||||||
|
@export var unlocked_grid: GridContainer
|
||||||
@export var font: Font
|
@export var font: Font
|
||||||
@export var skill_unlocker: SkillUnlockerComponent
|
@export var skill_unlocker: SkillUnlockerComponent
|
||||||
@export var components_to_disable: Array[Node] = []
|
@export var components_to_disable: Array[Node] = []
|
||||||
@export var marketplace_button: PackedScene
|
@export var marketplace_button: PackedScene
|
||||||
|
@export var skill_button: PackedScene
|
||||||
|
|
||||||
@onready var game_manager: GM = $"/root/GameManager"
|
@onready var game_manager: GM = $"/root/GameManager"
|
||||||
|
|
||||||
var buttons: Array[Button] = []
|
|
||||||
|
var unlock_buttons: Array[Button] = []
|
||||||
|
var skill_buttons: Array[SkillButton] = []
|
||||||
|
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
@@ -21,13 +25,17 @@ func _ready() -> void:
|
|||||||
var skills_to_unlock: Array[SkillData] = []
|
var skills_to_unlock: Array[SkillData] = []
|
||||||
|
|
||||||
for skill in skill_data:
|
for skill in skill_data:
|
||||||
if skill.name in game_manager.player_state['unlocked_skills']:
|
|
||||||
continue
|
|
||||||
skills_to_unlock.append(skill)
|
skills_to_unlock.append(skill)
|
||||||
|
|
||||||
for skill in skills_to_unlock:
|
for skill in skills_to_unlock:
|
||||||
create_upgrade_button(skill)
|
create_upgrade_button(skill)
|
||||||
|
|
||||||
|
var unlocked_skills := game_manager.get_unlocked_skills()
|
||||||
|
for skill in unlocked_skills:
|
||||||
|
create_skill_button(skill)
|
||||||
|
|
||||||
|
skill_unlocker.skill_unlocked.connect(on_skill_unlocked)
|
||||||
|
|
||||||
|
|
||||||
func _input(event: InputEvent) -> void:
|
func _input(event: InputEvent) -> void:
|
||||||
if event.is_action_pressed("show_marketplace"):
|
if event.is_action_pressed("show_marketplace"):
|
||||||
@@ -39,28 +47,40 @@ func _input(event: InputEvent) -> void:
|
|||||||
root.show()
|
root.show()
|
||||||
for component in components_to_disable:
|
for component in components_to_disable:
|
||||||
component.process_mode = PROCESS_MODE_DISABLED
|
component.process_mode = PROCESS_MODE_DISABLED
|
||||||
if buttons:
|
|
||||||
buttons[0].grab_focus()
|
|
||||||
|
|
||||||
|
|
||||||
func get_button_text(skill: SkillData) -> String:
|
func get_button_text(skill: SkillData) -> String:
|
||||||
return tr(skill.name) + " " + str(skill.cost)
|
return tr(skill.name) + " " + str(skill.cost)
|
||||||
|
|
||||||
|
|
||||||
func create_upgrade_button(skill: SkillData):
|
|
||||||
var button := marketplace_button.instantiate() as Button
|
func create_upgrade_button(skill: SkillData) -> void:
|
||||||
|
var button := marketplace_button.instantiate() as MarketplaceButton
|
||||||
button.text = get_button_text(skill)
|
button.text = get_button_text(skill)
|
||||||
button.icon = skill.icon
|
button.icon = skill.icon
|
||||||
|
button.skill_data = skill
|
||||||
|
|
||||||
button.pressed.connect(func () -> void: _on_button_pressed(skill))
|
button.pressed.connect(func () -> void: _on_button_pressed(skill))
|
||||||
|
|
||||||
buttons.append(button)
|
unlock_buttons.append(button)
|
||||||
grid.add_child(button)
|
to_unlock_grid.add_child(button)
|
||||||
grid.queue_sort()
|
to_unlock_grid.queue_sort()
|
||||||
|
|
||||||
|
|
||||||
|
func create_skill_button(skill: SkillData) -> void:
|
||||||
|
var button := skill_button.instantiate() as SkillButton
|
||||||
|
button.skill_data = skill
|
||||||
|
button.setup()
|
||||||
|
button.pressed.connect(func() -> void: on_skill_button_pressed(button))
|
||||||
|
button.activate()
|
||||||
|
|
||||||
|
skill_buttons.append(button)
|
||||||
|
unlocked_grid.add_child(button)
|
||||||
|
unlocked_grid.queue_sort()
|
||||||
|
|
||||||
|
|
||||||
func remove_button(skill: SkillData):
|
func remove_button(skill: SkillData):
|
||||||
for child in grid.get_children():
|
for child in to_unlock_grid.get_children():
|
||||||
if child.text == get_button_text(skill):
|
if child.text == get_button_text(skill):
|
||||||
child.queue_free()
|
child.queue_free()
|
||||||
break
|
break
|
||||||
@@ -70,6 +90,38 @@ func _on_button_pressed(skill: SkillData) -> void:
|
|||||||
if not skill_unlocker:
|
if not skill_unlocker:
|
||||||
return
|
return
|
||||||
|
|
||||||
if skill_unlocker.try_unlock_skill(skill):
|
if game_manager.is_skill_unlocked(skill):
|
||||||
remove_button(skill)
|
if skill.level < skill.max_level:
|
||||||
|
skill_unlocker.try_upgrade_skill(skill)
|
||||||
|
if not skill.is_active:
|
||||||
|
skill_unlocker.skill_manager.toggle_skill_activation(skill)
|
||||||
|
else:
|
||||||
|
skill_unlocker.skill_manager.toggle_skill_activation(skill)
|
||||||
|
else:
|
||||||
|
skill_unlocker.try_unlock_skill(skill)
|
||||||
|
|
||||||
|
|
||||||
|
func on_skill_unlocked(skill: SkillData) -> void:
|
||||||
|
# need to fix this method
|
||||||
|
if not skill:
|
||||||
|
return
|
||||||
|
if skill_buttons.size() == 0:
|
||||||
|
create_skill_button(skill)
|
||||||
|
|
||||||
|
for button in skill_buttons:
|
||||||
|
if button.skill_data.is_active:
|
||||||
|
button.activate()
|
||||||
|
else:
|
||||||
|
button.deactivate()
|
||||||
|
|
||||||
|
|
||||||
|
func on_skill_button_pressed(button: SkillButton) -> void:
|
||||||
|
if not skill_unlocker or not button.skill_data:
|
||||||
|
return
|
||||||
|
|
||||||
|
skill_unlocker.skill_manager.toggle_skill_activation(button.skill_data)
|
||||||
|
button.activate()
|
||||||
|
for other_button in skill_buttons:
|
||||||
|
if other_button != button:
|
||||||
|
other_button.deactivate()
|
||||||
|
|
||||||
|
48
scripts/ui/marketplace_button.gd
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
class_name MarketplaceButton
|
||||||
|
extends Button
|
||||||
|
|
||||||
|
@export var skill_data: SkillData
|
||||||
|
@export var unlocked_skill_icon: Texture2D
|
||||||
|
@export var locked_skill_icon: Texture2D
|
||||||
|
@export var skill_level_container: Container
|
||||||
|
|
||||||
|
@onready var gm: GM = $"/root/GameManager"
|
||||||
|
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
if not skill_data:
|
||||||
|
printerr("MarketplaceButton: skill_data is not set.")
|
||||||
|
if not unlocked_skill_icon or not locked_skill_icon:
|
||||||
|
printerr("MarketplaceButton: unlocked_skill_icon or locked_skill_icon is not set.")
|
||||||
|
return
|
||||||
|
if not skill_level_container:
|
||||||
|
printerr("MarketplaceButton: skill_level_container is not set.")
|
||||||
|
return
|
||||||
|
|
||||||
|
setup()
|
||||||
|
|
||||||
|
var player := gm.get_player_node()
|
||||||
|
var skill_unlocker_component := player.get_node_or_null("SkillUnlockerComponent") as SkillUnlockerComponent
|
||||||
|
if skill_unlocker_component:
|
||||||
|
skill_unlocker_component.skill_unlocked.connect(_on_skill_unlock)
|
||||||
|
|
||||||
|
|
||||||
|
func setup() -> void:
|
||||||
|
if not skill_data:
|
||||||
|
return
|
||||||
|
|
||||||
|
for i in range(skill_data.max_level):
|
||||||
|
var _icon := TextureRect.new()
|
||||||
|
_icon.texture = unlocked_skill_icon if i < skill_data.level else locked_skill_icon
|
||||||
|
skill_level_container.add_child(_icon)
|
||||||
|
|
||||||
|
|
||||||
|
func _on_skill_unlock(skill: SkillData) -> void:
|
||||||
|
if skill.name == skill_data.name:
|
||||||
|
for i in range(skill_data.max_level):
|
||||||
|
var icon := skill_level_container.get_child(i) as TextureRect
|
||||||
|
if i < skill.level:
|
||||||
|
icon.texture = unlocked_skill_icon
|
||||||
|
else:
|
||||||
|
icon.texture = locked_skill_icon
|
||||||
|
disabled = skill.level >= skill_data.max_level
|
1
scripts/ui/marketplace_button.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://dx8lex40lotr5
|
@@ -45,7 +45,6 @@ func _ready() -> void:
|
|||||||
Console.console_closed.connect(_on_console_close)
|
Console.console_closed.connect(_on_console_close)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
func _unhandled_input(event: InputEvent) -> void:
|
func _unhandled_input(event: InputEvent) -> void:
|
||||||
if event.is_action_pressed("pause") and not is_console_open:
|
if event.is_action_pressed("pause") and not is_console_open:
|
||||||
if UiManager.is_visible_on_stack(pause_menu_control):
|
if UiManager.is_visible_on_stack(pause_menu_control):
|
||||||
@@ -78,6 +77,8 @@ func _on_exit_to_menu_button_pressed() -> void:
|
|||||||
printerr("PauseMenu: Exit to menu scene not set.")
|
printerr("PauseMenu: Exit to menu scene not set.")
|
||||||
return
|
return
|
||||||
|
|
||||||
|
gm.resume_game()
|
||||||
|
gm.reset_current_session_state()
|
||||||
get_tree().change_scene_to_packed(exit_to_menu_scene)
|
get_tree().change_scene_to_packed(exit_to_menu_scene)
|
||||||
|
|
||||||
|
|
||||||
|
22
scripts/ui/skill_button.gd
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
class_name SkillButton
|
||||||
|
extends Button
|
||||||
|
|
||||||
|
@export var skill_data: SkillData
|
||||||
|
|
||||||
|
|
||||||
|
func setup() -> void:
|
||||||
|
if not skill_data:
|
||||||
|
return
|
||||||
|
|
||||||
|
icon = skill_data.icon
|
||||||
|
text = tr(skill_data.name)
|
||||||
|
|
||||||
|
|
||||||
|
func activate() -> void:
|
||||||
|
set("theme_override_colors/font_color", Color("#49aa10"))
|
||||||
|
|
||||||
|
|
||||||
|
func deactivate() -> void:
|
||||||
|
set("theme_override_colors/font_color", Color("#ffffff"))
|
||||||
|
|
||||||
|
|
1
scripts/ui/skill_button.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://0obbehfd8fki
|
BIN
sprites/MrBrick_base-sheet.png
Normal file
After Width: | Height: | Size: 577 B |
34
sprites/MrBrick_base-sheet.png.import
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://0l454rfplmqg"
|
||||||
|
path="res://.godot/imported/MrBrick_base-sheet.png-48bb6ed32601bab7bff225ba37ca675b.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://sprites/MrBrick_base-sheet.png"
|
||||||
|
dest_files=["res://.godot/imported/MrBrick_base-sheet.png-48bb6ed32601bab7bff225ba37ca675b.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
BIN
sprites/PS_Tileset_12_nes.png
Normal file
After Width: | Height: | Size: 14 KiB |
34
sprites/PS_Tileset_12_nes.png.import
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://do6m4ry8ss01e"
|
||||||
|
path="res://.godot/imported/PS_Tileset_12_nes.png-39c3c997b86dfe7b17d7d91b44ae7d73.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://sprites/PS_Tileset_12_nes.png"
|
||||||
|
dest_files=["res://.godot/imported/PS_Tileset_12_nes.png-39c3c997b86dfe7b17d7d91b44ae7d73.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
BIN
sprites/backgrounds/forest/PS_Forest_01.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
34
sprites/backgrounds/forest/PS_Forest_01.png.import
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://055an6f4wluo"
|
||||||
|
path="res://.godot/imported/PS_Forest_01.png-da6cba79b5f1706b5dbc0b3c51c01252.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://sprites/backgrounds/forest/PS_Forest_01.png"
|
||||||
|
dest_files=["res://.godot/imported/PS_Forest_01.png-da6cba79b5f1706b5dbc0b3c51c01252.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
BIN
sprites/backgrounds/forest/PS_Forest_02.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
34
sprites/backgrounds/forest/PS_Forest_02.png.import
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://dk8846ai1ht6i"
|
||||||
|
path="res://.godot/imported/PS_Forest_02.png-43be04dc74cc6fd4ea9c6246b949fa45.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://sprites/backgrounds/forest/PS_Forest_02.png"
|
||||||
|
dest_files=["res://.godot/imported/PS_Forest_02.png-43be04dc74cc6fd4ea9c6246b949fa45.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
BIN
sprites/backgrounds/forest/PS_Forest_03.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
34
sprites/backgrounds/forest/PS_Forest_03.png.import
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://bl3iv071i34ge"
|
||||||
|
path="res://.godot/imported/PS_Forest_03.png-4314bdb5f37f4636262d67e5e27bce87.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://sprites/backgrounds/forest/PS_Forest_03.png"
|
||||||
|
dest_files=["res://.godot/imported/PS_Forest_03.png-4314bdb5f37f4636262d67e5e27bce87.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
BIN
sprites/backgrounds/forest/PS_Forest_04.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
34
sprites/backgrounds/forest/PS_Forest_04.png.import
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://bcrqiyfk6fpgq"
|
||||||
|
path="res://.godot/imported/PS_Forest_04.png-ba579387b88579ce1bbc0472786a9093.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://sprites/backgrounds/forest/PS_Forest_04.png"
|
||||||
|
dest_files=["res://.godot/imported/PS_Forest_04.png-ba579387b88579ce1bbc0472786a9093.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
BIN
sprites/health_potions.png
Normal file
After Width: | Height: | Size: 476 B |
34
sprites/health_potions.png.import
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://1x4iq56rhc18"
|
||||||
|
path="res://.godot/imported/health_potions.png-2a428c62301dffcc03dfe6d0e2934ba4.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://sprites/health_potions.png"
|
||||||
|
dest_files=["res://.godot/imported/health_potions.png-2a428c62301dffcc03dfe6d0e2934ba4.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
BIN
sprites/locked_skill.png
Normal file
After Width: | Height: | Size: 124 B |
34
sprites/locked_skill.png.import
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://52adghxscdgy"
|
||||||
|
path="res://.godot/imported/locked_skill.png-48fa9e93aa2c711c18fd9edb5233eb69.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://sprites/locked_skill.png"
|
||||||
|
dest_files=["res://.godot/imported/locked_skill.png-48fa9e93aa2c711c18fd9edb5233eb69.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
BIN
sprites/unlocked_skill.png
Normal file
After Width: | Height: | Size: 124 B |
34
sprites/unlocked_skill.png.import
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://rucyqmgrdld3"
|
||||||
|
path="res://.godot/imported/unlocked_skill.png-be1990df98d42600170074fac52ea327.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://sprites/unlocked_skill.png"
|
||||||
|
dest_files=["res://.godot/imported/unlocked_skill.png-be1990df98d42600170074fac52ea327.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|