diff --git a/Alien.gd b/Alien.gd new file mode 100644 index 0000000..18ea701 --- /dev/null +++ b/Alien.gd @@ -0,0 +1,34 @@ +extends CharacterBody2D + +class_name Alien + +signal alien_died(value : int) + +@export var hits : int = 5 +@export var points : int = 500 + +func _ready() -> void: + $Sprite2D.play("default") + move_random() + +func move_random() -> void: + velocity = Vector2(randf() - 0.5, randf() - 0.5).normalized() * 30 + get_tree().create_timer(randf() * 3).timeout.connect(move_random) + +func _physics_process(delta: float) -> void: + if position.y < 28: + position.y += delta * 30 + else: + move_and_slide() + +func hit() -> void: + hits -= 1 + if hits <= 0: + alien_died.emit(points) + get_parent().call_deferred("remove_child", self) + call_deferred("queue_free") + else: + $AlienSound.play() + var tween = get_tree().create_tween() + $Sprite2D.modulate = Color(1, 1, 1, 0) + tween.tween_property($Sprite2D, "modulate", Color(1, 1, 1, 1), 0.3) diff --git a/Alien.tscn b/Alien.tscn new file mode 100644 index 0000000..d6a3f94 --- /dev/null +++ b/Alien.tscn @@ -0,0 +1,95 @@ +[gd_scene load_steps=21 format=3 uid="uid://bob33k7lrnm6o"] + +[ext_resource type="Script" path="res://Alien.gd" id="1_ciw1s"] +[ext_resource type="Texture2D" uid="uid://deqh06kv1anp5" path="res://Aliens/Tri/Tri-0001.png" id="2_1hklp"] +[ext_resource type="AudioStream" uid="uid://sfyq2erohryl" path="res://Sounds/AlienHit.wav" id="2_j1jdb"] +[ext_resource type="Texture2D" uid="uid://dsuvjulxsa5l" path="res://Aliens/Tri/Tri-0002.png" id="3_1x3cl"] +[ext_resource type="Texture2D" uid="uid://b8in8j4yaxowb" path="res://Aliens/Tri/Tri-0003.png" id="4_nyt8o"] +[ext_resource type="Texture2D" uid="uid://0upjpvbh4oeg" path="res://Aliens/Tri/Tri-0004.png" id="5_x2w4f"] +[ext_resource type="Texture2D" uid="uid://dpoftuxompm4s" path="res://Aliens/Tri/Tri-0005.png" id="6_bae3i"] +[ext_resource type="Texture2D" uid="uid://5pwc323g6n8c" path="res://Aliens/Tri/Tri-0006.png" id="7_vmnl7"] +[ext_resource type="Texture2D" uid="uid://btnvtnpebha76" path="res://Aliens/Tri/Tri-0007.png" id="8_06vyj"] +[ext_resource type="Texture2D" uid="uid://bhux6lxg17klj" path="res://Aliens/Tri/Tri-0008.png" id="9_juw8u"] +[ext_resource type="Texture2D" uid="uid://2q8t5flat6dl" path="res://Aliens/Tri/Tri-0009.png" id="10_ig0fr"] +[ext_resource type="Texture2D" uid="uid://bayl5uu7b1akh" path="res://Aliens/Tri/Tri-0010.png" id="11_pvk2s"] +[ext_resource type="Texture2D" uid="uid://d51nga80ks41" path="res://Aliens/Tri/Tri-0011.png" id="12_3racv"] +[ext_resource type="Texture2D" uid="uid://dlvu83w7pugwa" path="res://Aliens/Tri/Tri-0012.png" id="13_5ljjq"] +[ext_resource type="Texture2D" uid="uid://qrrrwetvtu3a" path="res://Aliens/Tri/Tri-0013.png" id="14_wewpv"] +[ext_resource type="Texture2D" uid="uid://i6e0y736pxql" path="res://Aliens/Tri/Tri-0014.png" id="15_arfuj"] +[ext_resource type="Texture2D" uid="uid://cguwuqqbomqx1" path="res://Aliens/Tri/Tri-0015.png" id="16_diyot"] +[ext_resource type="Texture2D" uid="uid://e8700wifkedm" path="res://Aliens/Tri/Tri-0016.png" id="17_8rd6i"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_kcrvk"] +size = Vector2(24, 24) + +[sub_resource type="SpriteFrames" id="SpriteFrames_nevay"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": ExtResource("2_1hklp") +}, { +"duration": 1.0, +"texture": ExtResource("3_1x3cl") +}, { +"duration": 1.0, +"texture": ExtResource("4_nyt8o") +}, { +"duration": 1.0, +"texture": ExtResource("5_x2w4f") +}, { +"duration": 1.0, +"texture": ExtResource("6_bae3i") +}, { +"duration": 1.0, +"texture": ExtResource("7_vmnl7") +}, { +"duration": 1.0, +"texture": ExtResource("8_06vyj") +}, { +"duration": 1.0, +"texture": ExtResource("9_juw8u") +}, { +"duration": 1.0, +"texture": ExtResource("10_ig0fr") +}, { +"duration": 1.0, +"texture": ExtResource("11_pvk2s") +}, { +"duration": 1.0, +"texture": ExtResource("12_3racv") +}, { +"duration": 1.0, +"texture": ExtResource("13_5ljjq") +}, { +"duration": 1.0, +"texture": ExtResource("14_wewpv") +}, { +"duration": 1.0, +"texture": ExtResource("15_arfuj") +}, { +"duration": 1.0, +"texture": ExtResource("16_diyot") +}, { +"duration": 1.0, +"texture": ExtResource("17_8rd6i") +}], +"loop": true, +"name": &"default", +"speed": 12.0 +}] + +[node name="Alien" type="CharacterBody2D"] +position = Vector2(64, 32) +collision_layer = 32 +collision_mask = 16 +script = ExtResource("1_ciw1s") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource("RectangleShape2D_kcrvk") + +[node name="Sprite2D" type="AnimatedSprite2D" parent="."] +sprite_frames = SubResource("SpriteFrames_nevay") + +[node name="AlienSound" type="AudioStreamPlayer" parent="."] +stream = ExtResource("2_j1jdb") +bus = &"Effects" diff --git a/Aliens/Tri/Tri-0001.png b/Aliens/Tri/Tri-0001.png new file mode 100644 index 0000000..0d10c07 Binary files /dev/null and b/Aliens/Tri/Tri-0001.png differ diff --git a/Aliens/Tri/Tri-0001.png.import b/Aliens/Tri/Tri-0001.png.import new file mode 100644 index 0000000..2aa1486 --- /dev/null +++ b/Aliens/Tri/Tri-0001.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://deqh06kv1anp5" +path="res://.godot/imported/Tri-0001.png-add91fcd7a06353d37f4d29009170085.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Aliens/Tri/Tri-0001.png" +dest_files=["res://.godot/imported/Tri-0001.png-add91fcd7a06353d37f4d29009170085.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 diff --git a/Aliens/Tri/Tri-0002.png b/Aliens/Tri/Tri-0002.png new file mode 100644 index 0000000..05b2f2f Binary files /dev/null and b/Aliens/Tri/Tri-0002.png differ diff --git a/Aliens/Tri/Tri-0002.png.import b/Aliens/Tri/Tri-0002.png.import new file mode 100644 index 0000000..a11b35b --- /dev/null +++ b/Aliens/Tri/Tri-0002.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dsuvjulxsa5l" +path="res://.godot/imported/Tri-0002.png-07e567acb4608321964766495e6492a9.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Aliens/Tri/Tri-0002.png" +dest_files=["res://.godot/imported/Tri-0002.png-07e567acb4608321964766495e6492a9.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 diff --git a/Aliens/Tri/Tri-0003.png b/Aliens/Tri/Tri-0003.png new file mode 100644 index 0000000..e315767 Binary files /dev/null and b/Aliens/Tri/Tri-0003.png differ diff --git a/Aliens/Tri/Tri-0003.png.import b/Aliens/Tri/Tri-0003.png.import new file mode 100644 index 0000000..97cecf7 --- /dev/null +++ b/Aliens/Tri/Tri-0003.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b8in8j4yaxowb" +path="res://.godot/imported/Tri-0003.png-b1a5ceccf6138637f097330d988dc7f4.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Aliens/Tri/Tri-0003.png" +dest_files=["res://.godot/imported/Tri-0003.png-b1a5ceccf6138637f097330d988dc7f4.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 diff --git a/Aliens/Tri/Tri-0004.png b/Aliens/Tri/Tri-0004.png new file mode 100644 index 0000000..2ecbed7 Binary files /dev/null and b/Aliens/Tri/Tri-0004.png differ diff --git a/Aliens/Tri/Tri-0004.png.import b/Aliens/Tri/Tri-0004.png.import new file mode 100644 index 0000000..1fea354 --- /dev/null +++ b/Aliens/Tri/Tri-0004.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://0upjpvbh4oeg" +path="res://.godot/imported/Tri-0004.png-f18fd6d4cdbff0987da377969c236304.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Aliens/Tri/Tri-0004.png" +dest_files=["res://.godot/imported/Tri-0004.png-f18fd6d4cdbff0987da377969c236304.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 diff --git a/Aliens/Tri/Tri-0005.png b/Aliens/Tri/Tri-0005.png new file mode 100644 index 0000000..51efb50 Binary files /dev/null and b/Aliens/Tri/Tri-0005.png differ diff --git a/Aliens/Tri/Tri-0005.png.import b/Aliens/Tri/Tri-0005.png.import new file mode 100644 index 0000000..0cfc4e7 --- /dev/null +++ b/Aliens/Tri/Tri-0005.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dpoftuxompm4s" +path="res://.godot/imported/Tri-0005.png-74cb6ce197fa3f5bf3c377ebb93d3184.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Aliens/Tri/Tri-0005.png" +dest_files=["res://.godot/imported/Tri-0005.png-74cb6ce197fa3f5bf3c377ebb93d3184.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 diff --git a/Aliens/Tri/Tri-0006.png b/Aliens/Tri/Tri-0006.png new file mode 100644 index 0000000..987dc6e Binary files /dev/null and b/Aliens/Tri/Tri-0006.png differ diff --git a/Aliens/Tri/Tri-0006.png.import b/Aliens/Tri/Tri-0006.png.import new file mode 100644 index 0000000..f39d623 --- /dev/null +++ b/Aliens/Tri/Tri-0006.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://5pwc323g6n8c" +path="res://.godot/imported/Tri-0006.png-3ac9e8db2165119fccabceee0ff17491.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Aliens/Tri/Tri-0006.png" +dest_files=["res://.godot/imported/Tri-0006.png-3ac9e8db2165119fccabceee0ff17491.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 diff --git a/Aliens/Tri/Tri-0007.png b/Aliens/Tri/Tri-0007.png new file mode 100644 index 0000000..4b4eca4 Binary files /dev/null and b/Aliens/Tri/Tri-0007.png differ diff --git a/Aliens/Tri/Tri-0007.png.import b/Aliens/Tri/Tri-0007.png.import new file mode 100644 index 0000000..5141c06 --- /dev/null +++ b/Aliens/Tri/Tri-0007.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://btnvtnpebha76" +path="res://.godot/imported/Tri-0007.png-cab1e046ee6b2bb20c8fe3713ce193c8.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Aliens/Tri/Tri-0007.png" +dest_files=["res://.godot/imported/Tri-0007.png-cab1e046ee6b2bb20c8fe3713ce193c8.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 diff --git a/Aliens/Tri/Tri-0008.png b/Aliens/Tri/Tri-0008.png new file mode 100644 index 0000000..9efc95a Binary files /dev/null and b/Aliens/Tri/Tri-0008.png differ diff --git a/Aliens/Tri/Tri-0008.png.import b/Aliens/Tri/Tri-0008.png.import new file mode 100644 index 0000000..93712c7 --- /dev/null +++ b/Aliens/Tri/Tri-0008.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bhux6lxg17klj" +path="res://.godot/imported/Tri-0008.png-0cdffe76aaafbf0f669005eda804fbfe.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Aliens/Tri/Tri-0008.png" +dest_files=["res://.godot/imported/Tri-0008.png-0cdffe76aaafbf0f669005eda804fbfe.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 diff --git a/Aliens/Tri/Tri-0009.png b/Aliens/Tri/Tri-0009.png new file mode 100644 index 0000000..7081c1f Binary files /dev/null and b/Aliens/Tri/Tri-0009.png differ diff --git a/Aliens/Tri/Tri-0009.png.import b/Aliens/Tri/Tri-0009.png.import new file mode 100644 index 0000000..0f78579 --- /dev/null +++ b/Aliens/Tri/Tri-0009.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://2q8t5flat6dl" +path="res://.godot/imported/Tri-0009.png-9648e2e371867637bc89616e26e46b23.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Aliens/Tri/Tri-0009.png" +dest_files=["res://.godot/imported/Tri-0009.png-9648e2e371867637bc89616e26e46b23.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 diff --git a/Aliens/Tri/Tri-0010.png b/Aliens/Tri/Tri-0010.png new file mode 100644 index 0000000..f3a6751 Binary files /dev/null and b/Aliens/Tri/Tri-0010.png differ diff --git a/Aliens/Tri/Tri-0010.png.import b/Aliens/Tri/Tri-0010.png.import new file mode 100644 index 0000000..5ee4ab9 --- /dev/null +++ b/Aliens/Tri/Tri-0010.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bayl5uu7b1akh" +path="res://.godot/imported/Tri-0010.png-6132c6d355dd292114c6158c50d421dd.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Aliens/Tri/Tri-0010.png" +dest_files=["res://.godot/imported/Tri-0010.png-6132c6d355dd292114c6158c50d421dd.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 diff --git a/Aliens/Tri/Tri-0011.png b/Aliens/Tri/Tri-0011.png new file mode 100644 index 0000000..8db4474 Binary files /dev/null and b/Aliens/Tri/Tri-0011.png differ diff --git a/Aliens/Tri/Tri-0011.png.import b/Aliens/Tri/Tri-0011.png.import new file mode 100644 index 0000000..cb59fc4 --- /dev/null +++ b/Aliens/Tri/Tri-0011.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://d51nga80ks41" +path="res://.godot/imported/Tri-0011.png-1764b09d0f5a85c6112aa8f0c71fe9ed.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Aliens/Tri/Tri-0011.png" +dest_files=["res://.godot/imported/Tri-0011.png-1764b09d0f5a85c6112aa8f0c71fe9ed.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 diff --git a/Aliens/Tri/Tri-0012.png b/Aliens/Tri/Tri-0012.png new file mode 100644 index 0000000..b367586 Binary files /dev/null and b/Aliens/Tri/Tri-0012.png differ diff --git a/Aliens/Tri/Tri-0012.png.import b/Aliens/Tri/Tri-0012.png.import new file mode 100644 index 0000000..0e97517 --- /dev/null +++ b/Aliens/Tri/Tri-0012.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dlvu83w7pugwa" +path="res://.godot/imported/Tri-0012.png-f92231825c23ffbde964b7e9b2adfb4f.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Aliens/Tri/Tri-0012.png" +dest_files=["res://.godot/imported/Tri-0012.png-f92231825c23ffbde964b7e9b2adfb4f.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 diff --git a/Aliens/Tri/Tri-0013.png b/Aliens/Tri/Tri-0013.png new file mode 100644 index 0000000..7c33b69 Binary files /dev/null and b/Aliens/Tri/Tri-0013.png differ diff --git a/Aliens/Tri/Tri-0013.png.import b/Aliens/Tri/Tri-0013.png.import new file mode 100644 index 0000000..20efdb9 --- /dev/null +++ b/Aliens/Tri/Tri-0013.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://qrrrwetvtu3a" +path="res://.godot/imported/Tri-0013.png-972d1b6c47a35b932665ee4fceb39c4f.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Aliens/Tri/Tri-0013.png" +dest_files=["res://.godot/imported/Tri-0013.png-972d1b6c47a35b932665ee4fceb39c4f.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 diff --git a/Aliens/Tri/Tri-0014.png b/Aliens/Tri/Tri-0014.png new file mode 100644 index 0000000..4835032 Binary files /dev/null and b/Aliens/Tri/Tri-0014.png differ diff --git a/Aliens/Tri/Tri-0014.png.import b/Aliens/Tri/Tri-0014.png.import new file mode 100644 index 0000000..1f5dfb5 --- /dev/null +++ b/Aliens/Tri/Tri-0014.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://i6e0y736pxql" +path="res://.godot/imported/Tri-0014.png-968ab6a7bdcad39d721097ae920e8656.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Aliens/Tri/Tri-0014.png" +dest_files=["res://.godot/imported/Tri-0014.png-968ab6a7bdcad39d721097ae920e8656.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 diff --git a/Aliens/Tri/Tri-0015.png b/Aliens/Tri/Tri-0015.png new file mode 100644 index 0000000..09550ba Binary files /dev/null and b/Aliens/Tri/Tri-0015.png differ diff --git a/Aliens/Tri/Tri-0015.png.import b/Aliens/Tri/Tri-0015.png.import new file mode 100644 index 0000000..ed336ad --- /dev/null +++ b/Aliens/Tri/Tri-0015.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cguwuqqbomqx1" +path="res://.godot/imported/Tri-0015.png-6b6a34ae38c32dd6d88c17be06188759.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Aliens/Tri/Tri-0015.png" +dest_files=["res://.godot/imported/Tri-0015.png-6b6a34ae38c32dd6d88c17be06188759.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 diff --git a/Aliens/Tri/Tri-0016.png b/Aliens/Tri/Tri-0016.png new file mode 100644 index 0000000..b07318d Binary files /dev/null and b/Aliens/Tri/Tri-0016.png differ diff --git a/Aliens/Tri/Tri-0016.png.import b/Aliens/Tri/Tri-0016.png.import new file mode 100644 index 0000000..f6d6f33 --- /dev/null +++ b/Aliens/Tri/Tri-0016.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://e8700wifkedm" +path="res://.godot/imported/Tri-0016.png-8b3e819334af3e34e7b38877035723d0.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Aliens/Tri/Tri-0016.png" +dest_files=["res://.godot/imported/Tri-0016.png-8b3e819334af3e34e7b38877035723d0.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 diff --git a/Ball/Ball.gd b/Ball/Ball.gd index f8fb7a0..99180a3 100644 --- a/Ball/Ball.gd +++ b/Ball/Ball.gd @@ -8,6 +8,7 @@ signal hit_brick(ball : Node, brick : Node) signal hit_paddle(ball : Node) signal hit_floor(ball : Node) signal hit_wall(ball : Node) +signal hit_alien(ball : Node, alien : Node) var captured : bool = false var capture_object : Node2D @@ -15,7 +16,7 @@ var capture_offset : Vector2 = Vector2.ZERO var speed : float = 100 -func _physics_process(delta: float) -> void: +func _physics_process(_delta: float) -> void: # angular_velocity = 0 rotation = 0 if captured: @@ -50,6 +51,10 @@ func release() -> void: func _on_body_exited(body: Node) -> void: + if body is Alien: + body.hit() + hit_alien.emit(self, body) + return if body is Brick: if not body.visible: return @@ -81,7 +86,7 @@ func slowdown() -> void: speed = 100 -func _on_body_entered(body: Node) -> void: +func _on_body_entered(_body: Node) -> void: pass # Replace with function body. func enable_sparkles() -> void: @@ -89,3 +94,6 @@ func enable_sparkles() -> void: func disable_sparkles() -> void: $CPUParticles2D.emitting = false + +func is_sparkles() -> bool: + return $CPUParticles2D.emitting diff --git a/Ball/Ball.tscn b/Ball/Ball.tscn index 693aaba..dbdb3dc 100644 --- a/Ball/Ball.tscn +++ b/Ball/Ball.tscn @@ -14,8 +14,8 @@ radius = 3.0 colors = PackedColorArray(1, 1, 0, 1, 1, 1, 0, 0) [node name="Ball" type="RigidBody2D"] -collision_layer = 4 -collision_mask = 5 +collision_layer = 8 +collision_mask = 37 mass = 0.01 physics_material_override = ExtResource("1_vk3rj") gravity_scale = 0.0 diff --git a/Brick/Brick.gd b/Brick/Brick.gd index be58f73..7865a1a 100644 --- a/Brick/Brick.gd +++ b/Brick/Brick.gd @@ -47,7 +47,7 @@ func _show_block() -> void: tween.tween_property($TextureRect, "modulate", original_color, 0.25) visible = true if not pass_mode: - collision_layer = 1 + collision_layer = 0b10001 func type(base : int, color : Color) -> void: @@ -78,15 +78,13 @@ func type(base : int, color : Color) -> void: func _on_area_2d_body_entered(body: Node2D) -> void: if not pass_mode: return if body is Ball: - print("Area hit ball") body._on_body_exited(self) - pass # Replace with function body. func enable_pass() -> void: - collision_layer = 0 + collision_layer = 0b10000 pass_mode = true func disable_pass() -> void: if visible: - collision_layer = 1 + collision_layer = 0b10001 pass_mode = false diff --git a/Brick/Brick.tscn b/Brick/Brick.tscn index 7b84c4a..cea97e2 100644 --- a/Brick/Brick.tscn +++ b/Brick/Brick.tscn @@ -11,6 +11,8 @@ size = Vector2(32, 16) size = Vector2(32, 16) [node name="Brick" type="StaticBody2D"] +collision_layer = 17 +collision_mask = 17 input_pickable = true physics_material_override = ExtResource("1_it5u2") script = ExtResource("1_eylhu") @@ -38,8 +40,8 @@ texture = ExtResource("2_v230s") stretch_mode = 2 [node name="Area2D" type="Area2D" parent="."] -collision_layer = 4 -collision_mask = 4 +collision_layer = 8 +collision_mask = 8 [node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"] shape = SubResource("RectangleShape2D_wi5j7") diff --git a/Dunkanoid.gd b/Dunkanoid.gd index 305cba2..2083a35 100644 --- a/Dunkanoid.gd +++ b/Dunkanoid.gd @@ -3,6 +3,27 @@ extends Node2D var _Brick = preload("res://Brick/Brick.tscn") var _Ball = preload("res://Ball/Ball.tscn") var _Upgrade = preload("res://Upgrade/Upgrade.tscn") +var _Alien = preload("res://Alien.tscn") + +@onready var ScoreNode = $ScoreCard/Score/ScoreBox +@onready var LivesNode = $ScoreCard/Lives/LivesBox +@onready var RunTimeNode = $ScoreCard/RunTime/RunTime +@onready var BestTimeNode = $ScoreCard/BestTime/BestTime +@onready var BricksNode = $Bricks +@onready var BackgroundNode = $Background +@onready var PaddleNode = $Paddle +@onready var PipesNode = $Pipes +@onready var AliensNode = $Aliens +@onready var RunTimerNode = $RunTimer +@onready var NewBestNode = $NewBestTime +@onready var NewBestTimeNode = $NewBestTime/HBoxContainer/BestTime +@onready var StartTitleNode = $Start/VBoxContainer/PanelContainer/VBoxContainer/Title +@onready var StartRoundNode = $Start/VBoxContainer/PanelContainer/VBoxContainer/Round +@onready var StartNode = $Start +@onready var PowerballTimerNode = $PowerBallTimer +@onready var FloorSoundNode = $Sounds/FloorSound +@onready var UpgradeSoundNode = $Sounds/UpgradeCollected +@onready var AlienDieSoundNode = $Sounds/AlienDie var bricks : Array = [] var balls : Array[Node] = [] @@ -42,44 +63,51 @@ func _ready() -> void: new_level() Music.play_game() +var opened: bool = false + func _process(delta : float) -> void: if OS.has_feature("editor"): if Input.is_action_just_pressed("cheat"): - for i in 10: - add_ball() + spawn_alien() + for i in 50: + add_ball() if mode == MODE_EXIT: - if $Paddle.global_position.x - ($Paddle.width / 2) <= 20: + if PaddleNode.global_position.x - (PaddleNode.width / 2) <= 20: level = level_data.left leave(-1) - if $Paddle.global_position.x + ($Paddle.width / 2) >= 412: + if PaddleNode.global_position.x + (PaddleNode.width / 2) >= 412: level = level_data.right leave(+1) if mode == MODE_LEAVE: - $Paddle.global_position.x += (delta * leave_direction * 20.0) - if $Paddle.global_position.x < -16 or $Paddle.global_position.x > 428: + PaddleNode.global_position.x += (delta * leave_direction * 20.0) + if PaddleNode.global_position.x < -16 or PaddleNode.global_position.x > 462: + if opened: + PipesNode.close_door(Pipes.BOTTOM_LEFT) + PipesNode.close_door(Pipes.BOTTOM_RIGHT) + opened = false if not Music.jingle_playing: new_level() else: if Input.is_action_pressed("left"): - var leftmost = 16 + $Paddle.width / 2 - $Paddle.position.x -= delta * PADDLE_SPEED - $Paddle.position.y = 340 - if $Paddle.position.x < leftmost: - $Paddle.position.x = leftmost + var leftmost = 16 + PaddleNode.width / 2 + PaddleNode.position.x -= delta * PADDLE_SPEED + PaddleNode.position.y = 340 + if PaddleNode.position.x < leftmost: + PaddleNode.position.x = leftmost if Input.is_action_pressed("right"): - var rightmost = 432 - $Paddle.width / 2 - $Paddle.position.x += delta * PADDLE_SPEED - $Paddle.position.y = 340 - if $Paddle.position.x > rightmost: - $Paddle.position.x = rightmost + var rightmost = 432 - PaddleNode.width / 2 + PaddleNode.position.x += delta * PADDLE_SPEED + PaddleNode.position.y = 340 + if PaddleNode.position.x > rightmost: + PaddleNode.position.x = rightmost if Input.is_action_just_pressed("fire"): if mode == MODE_PLAY: if level_starting: level_starting = false - $RunTimer.start() + RunTimerNode.start() time_run = true for ball in balls: if (ball.captured): @@ -87,7 +115,7 @@ func _process(delta : float) -> void: if time_run: - $ScoreCard/RunTime.text = "%02d:%05.2f" % [$RunTimer.elapsed_time / 60000, $RunTimer.elapsed_time % 60000 / 1000.0] + RunTimeNode.text = "%02d:%05.2f" % [RunTimerNode.elapsed_time / 60000, RunTimerNode.elapsed_time % 60000 / 1000.0] func leave(dir : int) -> void: @@ -95,37 +123,38 @@ func leave(dir : int) -> void: leave_direction = dir func new_level() -> void: - $NewBestTime.visible = false + NewBestNode.visible = false time_run = false level_starting = true - $Paddle.normal() - $Paddle.position.x = 224 + PaddleNode.normal() + PaddleNode.position.x = 224 mode = MODE_WAIT - $Exits.visible = false for ball in balls: + if ball.get_parent() != self: + print("For some reason this ball's parent has got lost") remove_child(ball) ball.queue_free() balls.clear() for brick in bricks: - $Bricks.remove_child(brick) + BricksNode.remove_child(brick) brick.queue_free() bricks.clear() chr += 1 level_data = load_level_from_disk(level) - $ScoreCard/BestTime.text = format_time(Global.get_best_time(level_data.name)) - $Start/VBoxContainer/PanelContainer/VBoxContainer/Title.text = level - $Start/VBoxContainer/PanelContainer/VBoxContainer/Round.text = "ROUND %3d" % [chr] - $Background.texture = load("res://Backgrounds/%s.png" % level_data.background) - $Background.modulate = Color("#%s" % level_data.get("tint", "FFFFFF")) + BestTimeNode.text = format_time(Global.get_best_time(level_data.name)) + StartTitleNode.text = level + StartRoundNode.text = "ROUND %3d" % [chr] + BackgroundNode.texture = load("res://Backgrounds/%s.png" % level_data.background) + BackgroundNode.modulate = Color("#%s" % level_data.get("tint", "FFFFFF")) load_level(level_data.data) var ball = _Ball.instantiate() - ball.capture($Paddle, Vector2((randf() * 32) - 16, 8)) + ball.capture(PaddleNode, Vector2((randf() * 32) - 16, 8)) ball.hit_paddle.connect(_on_hit_paddle) ball.hit_floor.connect(_on_hit_floor) add_child(ball) balls.push_back(ball) - $Start.visible = true + StartNode.visible = true Music.jingle_finished.connect(_on_start_round_finished) Music.jingle(Music.JINGLE_LEVEL_START) @@ -148,7 +177,7 @@ func _brick_destroyed(brick) -> void: upgrade.set_upgrade("R", Color.LIGHT_CORAL) 5: upgrade.set_upgrade("P", Color.AQUAMARINE) - add_child(upgrade) + call_deferred("add_child", upgrade) bricks.erase(brick) var brick_count = 0 for abrick in bricks: @@ -157,30 +186,36 @@ func _brick_destroyed(brick) -> void: if brick_count == 0: for ball in balls: - remove_child(ball) - ball.queue_free() + call_deferred("remove_child", ball) + ball.call_deferred("queue_free") balls.clear() for c in get_children(): if c is Upgrade: - remove_child(c) - c.queue_free() + call_deferred("remove_child", c) + c.call_deferred("queue_free") + + for c in AliensNode.get_children(): + AliensNode.call_deferred("remove_child", c) + c.call_deferred("queue_free") mode = MODE_EXIT - $Exits.visible = true + PipesNode.open_door(Pipes.BOTTOM_LEFT) + PipesNode.open_door(Pipes.BOTTOM_RIGHT) + opened = true Music.jingle(Music.JINGLE_LEVEL_WON) - var elapsed = $RunTimer.elapsed_time + var elapsed = RunTimerNode.elapsed_time var best = Global.get_best_time(level_data.name) if elapsed < best: Global.set_best_time(level_data.name, elapsed) - $RunTimer.pause() - $NewBestTime/BestTime.text = format_time(elapsed) - $NewBestTime.visible = true + RunTimerNode.pause() + NewBestTimeNode.text = format_time(elapsed) + NewBestNode.visible = true func format_time(time : int) -> String: if time > 3600000: return "--:--.--" - return "%02d:%05.2f" % [time / 60000, time % 60000 / 1000.0] + return "%02d:%05.2f" % [int(time / 60000.0), time % 60000 / 1000.0] func _input(event: InputEvent) -> void: if paused: @@ -188,20 +223,20 @@ func _input(event: InputEvent) -> void: if event is InputEventMouseMotion: if mode != MODE_LEAVE: if Global.relative_mouse: - var leftmost = 16 + $Paddle.width / 2 - var rightmost = 432 - $Paddle.width / 2 - $Paddle.position.x += event.relative.x - $Paddle.position.y = 340 - if $Paddle.position.x < leftmost: - $Paddle.position.x = leftmost - if $Paddle.position.x > rightmost: - $Paddle.position.x = rightmost + var leftmost = 16 + PaddleNode.width / 2 + var rightmost = 432 - PaddleNode.width / 2 + PaddleNode.position.x += event.relative.x + PaddleNode.position.y = 340 + if PaddleNode.position.x < leftmost: + PaddleNode.position.x = leftmost + if PaddleNode.position.x > rightmost: + PaddleNode.position.x = rightmost else: - $Paddle.position = Vector2(min(max(16 + $Paddle.width/2, event.position.x), 432-$Paddle.width/2), 340) + PaddleNode.position = Vector2(min(max(16 + PaddleNode.width/2, event.position.x), 432-PaddleNode.width/2), 340) if event is InputEventMouseButton: if mode == MODE_PLAY: if level_starting: - $RunTimer.start() + RunTimerNode.start() level_starting = false time_run = true @@ -210,30 +245,30 @@ func _input(event: InputEvent) -> void: ball.release() func _on_hit_paddle(ball) -> void: - if $Paddle.is_capture(): - var diff = $Paddle.global_position.x - ball.global_position.x - ball.capture($Paddle, Vector2(diff, 8)) + if PaddleNode.is_capture(): + var diff = PaddleNode.global_position.x - ball.global_position.x + ball.capture(PaddleNode, Vector2(diff, 8)) func _on_hit_floor(ball) -> void: - $Sounds/FloorSound.play() + FloorSoundNode.play() balls.erase(ball) - remove_child(ball) + call_deferred("remove_child", ball) ball.call_deferred("queue_free") if balls.size() == 0: for c in get_children(): if c is Upgrade: remove_child(c) c.queue_free() - $Paddle.normal() + PaddleNode.normal() ball = _Ball.instantiate() - ball.capture($Paddle, Vector2((randf() * 32) - 16, 8)) + ball.capture(PaddleNode, Vector2((randf() * 32) - 16, 8)) ball.hit_paddle.connect(_on_hit_paddle) ball.hit_floor.connect(_on_hit_floor) add_child(ball) balls.push_back(ball) Music.jingle_finished.connect(_on_start_round_finished) Music.jingle(Music.JINGLE_LEVEL_START) - $Start.visible = true + StartNode.visible = true mode = MODE_WAIT lives -= 1 if lives <= 0: @@ -245,14 +280,14 @@ func _on_round_won_finished() -> void: func _on_update_score(score) -> void: - $ScoreCard/ScoreBox.text = "%08d" % score + ScoreNode.text = "%08d" % score pass # Replace with function body. func _on_upgrade_collected(code : String) -> void: - $Sounds/UpgradeCollected.play() + UpgradeSoundNode.play() match code: "C": - $Paddle.capture() + PaddleNode.capture() "T": add_ball() add_ball() @@ -260,9 +295,9 @@ func _on_upgrade_collected(code : String) -> void: for ball in balls: ball.slowdown() "E": - $Paddle.big() + PaddleNode.big() "R": - $Paddle.small() + PaddleNode.small() "P": start_powerball() @@ -276,9 +311,11 @@ func add_ball() -> void: newball.hit_paddle.connect(_on_hit_paddle) newball.hit_floor.connect(_on_hit_floor) newball.speed = balls[0].speed + if balls[0].is_sparkles(): + newball.enable_sparkles() if balls[0].captured: - newball.capture($Paddle, Vector2((randf() - 0.5) * 32, 8)) - add_child(newball) + newball.capture(PaddleNode, Vector2((randf() - 0.5) * 32, 8)) + call_deferred("add_child", newball) balls.push_back(newball) @@ -319,21 +356,21 @@ func load_level(data) -> void: brick.position = Vector2(x * 32 + 16 + 16, y * 16 + 8 + 16) bricks.push_back(brick) brick.brick_destroyed.connect(_brick_destroyed) - $Bricks.add_child(brick) + BricksNode.add_child(brick) -func _on_start_round_finished(item : int) -> void: +func _on_start_round_finished(_item : int) -> void: Music.jingle_finished.disconnect(_on_start_round_finished) - $Start.visible = false + StartNode.visible = false mode = MODE_PLAY func _on_update_lives() -> void: - $ScoreCard/LivesBox.text = "%d" % lives + LivesNode.text = "%d" % lives -func load_level_from_disk(name : String) -> Dictionary: - if FileAccess.file_exists("user://Levels/%s.json" % name): - return JSON.parse_string(FileAccess.get_file_as_string("user://Levels/%s.json" % name)) - if FileAccess.file_exists("res://Levels/%s.json" % name): - return JSON.parse_string(FileAccess.get_file_as_string("res://Levels/%s.json" % name)) +func load_level_from_disk(lname : String) -> Dictionary: + if FileAccess.file_exists("user://Levels/%s.json" % lname): + return JSON.parse_string(FileAccess.get_file_as_string("user://Levels/%s.json" % lname)) + if FileAccess.file_exists("res://Levels/%s.json" % lname): + return JSON.parse_string(FileAccess.get_file_as_string("res://Levels/%s.json" % lname)) return JSON.parse_string(FileAccess.get_file_as_string("res://Levels/NOTFOUND.json")) func _on_paddle_effect_finished(effect: int) -> void: @@ -345,16 +382,53 @@ func _on_paddle_effect_finished(effect: int) -> void: func start_powerball() -> void: for ball in balls: ball.enable_sparkles() - for brick in $Bricks.get_children(): + for brick in BricksNode.get_children(): brick.enable_pass() - $PowerBallTimer.start(10) + PowerballTimerNode.start(10) func stop_powerball() -> void: for ball in balls: ball.disable_sparkles() - for brick in $Bricks.get_children(): + for brick in BricksNode.get_children(): brick.disable_pass() func _on_power_ball_timer_timeout() -> void: stop_powerball() + +func spawn_alien() -> void: + if AliensNode.get_child_count() < 3: + var door : int = Pipes.TOP_LEFT if randf() < 0.5 else Pipes.TOP_RIGHT + PipesNode.open_door(door) + +func _on_pipes_door_opened(door) -> void: + match door: + Pipes.TOP_LEFT: + var alien = _Alien.instantiate() + alien.position = Vector2(128, -12) + alien.velocity = Vector2(0, 50) + alien.alien_died.connect(_alien_died) + AliensNode.add_child(alien) + get_tree().create_timer(2).timeout.connect(_close_top_left) + pass + Pipes.TOP_RIGHT: + var alien = _Alien.instantiate() + alien.position = Vector2(320, -12) + alien.velocity = Vector2(0, 50) + alien.alien_died.connect(_alien_died) + AliensNode.add_child(alien) + get_tree().create_timer(2).timeout.connect(_close_top_right) + pass + +func _close_top_left() -> void: + PipesNode.close_door(Pipes.TOP_LEFT) + +func _close_top_right() -> void: + PipesNode.close_door(Pipes.TOP_RIGHT) + +func _on_alien_timer_timeout() -> void: + spawn_alien() + +func _alien_died(points : int) -> void: + Global.score += points + AlienDieSoundNode.play() diff --git a/Dunkanoid.tscn b/Dunkanoid.tscn index 05a06fd..19e7ac7 100644 --- a/Dunkanoid.tscn +++ b/Dunkanoid.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=17 format=3 uid="uid://4q0epdnb0x4s"] +[gd_scene load_steps=27 format=3 uid="uid://4q0epdnb0x4s"] [ext_resource type="Script" path="res://Dunkanoid.gd" id="1_kv4if"] [ext_resource type="PackedScene" uid="uid://dndemjw7up2r6" path="res://Paddle/Paddle.tscn" id="2_26c5i"] @@ -9,9 +9,19 @@ [ext_resource type="PhysicsMaterial" uid="uid://cql6t5hd40fgn" path="res://CorePhysics.tres" id="7_300m5"] [ext_resource type="AudioStream" uid="uid://bojc0es7165ed" path="res://Sounds/Collected.wav" id="8_fpbsr"] [ext_resource type="Theme" uid="uid://cfvww0geatnnk" path="res://MainTheme.tres" id="8_wcf7g"] +[ext_resource type="AudioStream" uid="uid://cpf0y72o6wrv2" path="res://Sounds/AlienDie.wav" id="9_lt28f"] [ext_resource type="Material" uid="uid://bv4vhjg83fqpn" path="res://ArkanoidMaterial.tres" id="9_ouuij"] [ext_resource type="Script" path="res://Paused.gd" id="12_8qv0d"] [ext_resource type="Script" path="res://RunTimer.gd" id="12_nyw3s"] +[ext_resource type="Script" path="res://Pipes.gd" id="13_12te1"] +[ext_resource type="Texture2D" uid="uid://biqt5k34w683i" path="res://Pipes/vPipe.png" id="14_33cmo"] +[ext_resource type="Texture2D" uid="uid://cg5olju1mcceh" path="res://Pipes/hPipe.png" id="15_n2p48"] +[ext_resource type="Texture2D" uid="uid://bh8om6bv1qumy" path="res://Pipes/vPipeEndLow.png" id="16_osyku"] +[ext_resource type="Texture2D" uid="uid://n81u6nrroi18" path="res://Pipes/CornerTopLeft.png" id="17_jvxfq"] +[ext_resource type="Texture2D" uid="uid://btiaapyjul68s" path="res://Pipes/CornerTopRight.png" id="18_2ed71"] +[ext_resource type="Texture2D" uid="uid://1ar54kb0l0sm" path="res://Pipes/vPipeEndHigh.png" id="19_6cngp"] +[ext_resource type="Texture2D" uid="uid://bj28rs6816gn8" path="res://Pipes/hPipeEndLeft.png" id="20_fr68l"] +[ext_resource type="Texture2D" uid="uid://dnm2slmsm5wnw" path="res://Pipes/hPipeEndRight.png" id="21_hha8q"] [sub_resource type="WorldBoundaryShape2D" id="WorldBoundaryShape2D_jsudl"] normal = Vector2(0, 1) @@ -47,6 +57,8 @@ input_pickable = false physics_material_override = null [node name="Wall" type="StaticBody2D" parent="."] +collision_layer = 17 +collision_mask = 17 physics_material_override = ExtResource("7_300m5") script = ExtResource("4_evt42") @@ -60,7 +72,8 @@ shape = SubResource("WorldBoundaryShape2D_3e48c") shape = SubResource("WorldBoundaryShape2D_jt2f6") [node name="Floor" type="StaticBody2D" parent="."] -collision_layer = 3 +collision_layer = 19 +collision_mask = 17 script = ExtResource("5_sravy") [node name="Bottom" type="CollisionShape2D" parent="Floor"] @@ -76,33 +89,9 @@ bus = &"Effects" stream = ExtResource("8_fpbsr") bus = &"Effects" -[node name="ColorRect" type="ColorRect" parent="."] -offset_right = 16.0 -offset_bottom = 360.0 - -[node name="ColorRect2" type="ColorRect" parent="."] -offset_left = 432.0 -offset_right = 448.0 -offset_bottom = 360.0 - -[node name="ColorRect3" type="ColorRect" parent="."] -offset_right = 432.0 -offset_bottom = 16.0 - -[node name="Exits" type="Node2D" parent="."] - -[node name="Left" type="ColorRect" parent="Exits"] -offset_top = 312.0 -offset_right = 16.0 -offset_bottom = 360.0 -color = Color(0, 0, 1, 1) - -[node name="Right" type="ColorRect" parent="Exits"] -offset_left = 432.0 -offset_top = 312.0 -offset_right = 448.0 -offset_bottom = 360.0 -color = Color(0, 0, 1, 1) +[node name="AlienDie" type="AudioStreamPlayer" parent="Sounds"] +stream = ExtResource("9_lt28f") +bus = &"Effects" [node name="ColorRect4" type="ColorRect" parent="."] offset_left = 448.0 @@ -113,11 +102,12 @@ color = Color(0, 0, 0, 1) [node name="Bricks" type="Node2D" parent="."] +[node name="Aliens" type="Node2D" parent="."] + [node name="RunTimer" type="Node" parent="."] script = ExtResource("12_nyw3s") [node name="NewBestTime" type="VBoxContainer" parent="."] -visible = false offset_right = 448.0 offset_bottom = 360.0 @@ -133,14 +123,27 @@ text = "NEW BEST TIME" horizontal_alignment = 1 vertical_alignment = 1 -[node name="BestTime" type="Label" parent="NewBestTime"] +[node name="HBoxContainer" type="HBoxContainer" parent="NewBestTime"] +layout_mode = 2 + +[node name="HSeparator" type="HSeparator" parent="NewBestTime/HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +theme = ExtResource("8_wcf7g") + +[node name="BestTime" type="Label" parent="NewBestTime/HBoxContainer"] layout_mode = 2 theme = ExtResource("8_wcf7g") theme_type_variation = &"Numbers" -text = "00:00" +text = "00:00.00" horizontal_alignment = 1 vertical_alignment = 1 +[node name="HSeparator2" type="HSeparator" parent="NewBestTime/HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +theme = ExtResource("8_wcf7g") + [node name="VSeparator2" type="VSeparator" parent="NewBestTime"] layout_mode = 2 size_flags_vertical = 3 @@ -149,7 +152,7 @@ theme = ExtResource("8_wcf7g") [node name="ScoreCard" type="VBoxContainer" parent="."] offset_left = 448.0 offset_top = 40.0 -offset_right = 640.0 +offset_right = 641.0 offset_bottom = 312.0 [node name="ScoreLabel" type="Label" parent="ScoreCard"] @@ -159,7 +162,15 @@ text = "SCORE" horizontal_alignment = 1 vertical_alignment = 1 -[node name="ScoreBox" type="Label" parent="ScoreCard"] +[node name="Score" type="HBoxContainer" parent="ScoreCard"] +layout_mode = 2 + +[node name="HSeparator" type="HSeparator" parent="ScoreCard/Score"] +layout_mode = 2 +size_flags_horizontal = 3 +theme = ExtResource("8_wcf7g") + +[node name="ScoreBox" type="Label" parent="ScoreCard/Score"] layout_mode = 2 theme = ExtResource("8_wcf7g") theme_type_variation = &"Numbers" @@ -167,6 +178,11 @@ text = "00000000" horizontal_alignment = 1 vertical_alignment = 1 +[node name="HSeparator2" type="HSeparator" parent="ScoreCard/Score"] +layout_mode = 2 +size_flags_horizontal = 3 +theme = ExtResource("8_wcf7g") + [node name="VSeparator" type="VSeparator" parent="ScoreCard"] layout_mode = 2 size_flags_vertical = 3 @@ -179,7 +195,15 @@ text = "LIVES" horizontal_alignment = 1 vertical_alignment = 1 -[node name="LivesBox" type="Label" parent="ScoreCard"] +[node name="Lives" type="HBoxContainer" parent="ScoreCard"] +layout_mode = 2 + +[node name="HSeparator" type="HSeparator" parent="ScoreCard/Lives"] +layout_mode = 2 +size_flags_horizontal = 3 +theme = ExtResource("8_wcf7g") + +[node name="LivesBox" type="Label" parent="ScoreCard/Lives"] layout_mode = 2 theme = ExtResource("8_wcf7g") theme_type_variation = &"Numbers" @@ -187,6 +211,11 @@ text = "3" horizontal_alignment = 1 vertical_alignment = 1 +[node name="HSeparator2" type="HSeparator" parent="ScoreCard/Lives"] +layout_mode = 2 +size_flags_horizontal = 3 +theme = ExtResource("8_wcf7g") + [node name="VSeparator2" type="VSeparator" parent="ScoreCard"] layout_mode = 2 size_flags_vertical = 3 @@ -199,7 +228,15 @@ text = "TIME" horizontal_alignment = 1 vertical_alignment = 1 -[node name="RunTime" type="Label" parent="ScoreCard"] +[node name="RunTime" type="HBoxContainer" parent="ScoreCard"] +layout_mode = 2 + +[node name="HSeparator" type="HSeparator" parent="ScoreCard/RunTime"] +layout_mode = 2 +size_flags_horizontal = 3 +theme = ExtResource("8_wcf7g") + +[node name="RunTime" type="Label" parent="ScoreCard/RunTime"] layout_mode = 2 theme = ExtResource("8_wcf7g") theme_type_variation = &"Numbers" @@ -207,6 +244,11 @@ text = "00:00.00" horizontal_alignment = 1 vertical_alignment = 1 +[node name="HSeparator2" type="HSeparator" parent="ScoreCard/RunTime"] +layout_mode = 2 +size_flags_horizontal = 3 +theme = ExtResource("8_wcf7g") + [node name="VSeparator3" type="VSeparator" parent="ScoreCard"] layout_mode = 2 size_flags_vertical = 3 @@ -219,7 +261,15 @@ text = "BEST TIME" horizontal_alignment = 1 vertical_alignment = 1 -[node name="BestTime" type="Label" parent="ScoreCard"] +[node name="BestTime" type="HBoxContainer" parent="ScoreCard"] +layout_mode = 2 + +[node name="HSeparator" type="HSeparator" parent="ScoreCard/BestTime"] +layout_mode = 2 +size_flags_horizontal = 3 +theme = ExtResource("8_wcf7g") + +[node name="BestTime" type="Label" parent="ScoreCard/BestTime"] layout_mode = 2 theme = ExtResource("8_wcf7g") theme_type_variation = &"Numbers" @@ -227,6 +277,11 @@ text = "00:00.00" horizontal_alignment = 1 vertical_alignment = 1 +[node name="HSeparator2" type="HSeparator" parent="ScoreCard/BestTime"] +layout_mode = 2 +size_flags_horizontal = 3 +theme = ExtResource("8_wcf7g") + [node name="Start" type="Node2D" parent="."] [node name="VBoxContainer" type="VBoxContainer" parent="Start"] @@ -328,7 +383,182 @@ theme = ExtResource("8_wcf7g") [node name="PowerBallTimer" type="Timer" parent="."] one_shot = true +[node name="Pipes" type="Node2D" parent="."] +script = ExtResource("13_12te1") + +[node name="LeftDoor" type="TextureRect" parent="Pipes"] +offset_top = 312.0 +offset_right = 16.0 +offset_bottom = 360.0 +texture = ExtResource("14_33cmo") +metadata/open = Vector2(0, 265) +metadata/closed = Vector2(0, 312) + +[node name="RightDoor" type="TextureRect" parent="Pipes"] +offset_left = 432.0 +offset_top = 312.0 +offset_right = 448.0 +offset_bottom = 360.0 +texture = ExtResource("14_33cmo") +metadata/open = Vector2(432, 265) +metadata/closed = Vector2(432, 312) + +[node name="TopDoor1L" type="TextureRect" parent="Pipes"] +offset_left = 112.0 +offset_right = 128.0 +offset_bottom = 16.0 +texture = ExtResource("15_n2p48") +metadata/open = Vector2(96, 0) +metadata/closed = Vector2(112, 0) + +[node name="TopDoor1R" type="TextureRect" parent="Pipes"] +offset_left = 128.0 +offset_right = 144.0 +offset_bottom = 16.0 +texture = ExtResource("15_n2p48") +metadata/open = Vector2(144, 0) +metadata/closed = Vector2(128, 0) + +[node name="TopDoor2L" type="TextureRect" parent="Pipes"] +offset_left = 304.0 +offset_right = 320.0 +offset_bottom = 16.0 +texture = ExtResource("15_n2p48") +metadata/open = Vector2(288, 0) +metadata/closed = Vector2(304, 0) + +[node name="TopDoor2R" type="TextureRect" parent="Pipes"] +offset_left = 320.0 +offset_right = 336.0 +offset_bottom = 16.0 +texture = ExtResource("15_n2p48") +metadata/open = Vector2(336, 0) +metadata/closed = Vector2(320, 0) + +[node name="LeftWall" type="TextureRect" parent="Pipes"] +offset_top = 16.0 +offset_right = 16.0 +offset_bottom = 296.0 +texture = ExtResource("14_33cmo") + +[node name="RightWall" type="TextureRect" parent="Pipes"] +offset_left = 432.0 +offset_top = 16.0 +offset_right = 448.0 +offset_bottom = 296.0 +texture = ExtResource("14_33cmo") + +[node name="LeftLowEnd" type="TextureRect" parent="Pipes"] +offset_top = 296.0 +offset_right = 16.0 +offset_bottom = 312.0 +texture = ExtResource("16_osyku") + +[node name="RightLowEnd" type="TextureRect" parent="Pipes"] +offset_left = 432.0 +offset_top = 296.0 +offset_right = 448.0 +offset_bottom = 312.0 +texture = ExtResource("16_osyku") + +[node name="LeftCorner" type="TextureRect" parent="Pipes"] +offset_right = 16.0 +offset_bottom = 16.0 +texture = ExtResource("17_jvxfq") + +[node name="RightCorner" type="TextureRect" parent="Pipes"] +offset_left = 432.0 +offset_right = 448.0 +offset_bottom = 16.0 +texture = ExtResource("18_2ed71") + +[node name="LeftJoin1" type="TextureRect" parent="Pipes"] +offset_top = 96.0 +offset_right = 16.0 +offset_bottom = 112.0 +texture = ExtResource("16_osyku") + +[node name="LeftJoin15" type="TextureRect" parent="Pipes"] +offset_left = 432.0 +offset_top = 162.0 +offset_right = 448.0 +offset_bottom = 178.0 +texture = ExtResource("16_osyku") + +[node name="LeftJoin2" type="TextureRect" parent="Pipes"] +offset_top = 16.0 +offset_right = 16.0 +offset_bottom = 32.0 +texture = ExtResource("19_6cngp") + +[node name="LeftJoin16" type="TextureRect" parent="Pipes"] +offset_left = 432.0 +offset_top = 16.0 +offset_right = 448.0 +offset_bottom = 32.0 +texture = ExtResource("19_6cngp") + +[node name="LeftJoin3" type="TextureRect" parent="Pipes"] +offset_left = 16.0 +offset_right = 32.0 +offset_bottom = 16.0 +texture = ExtResource("20_fr68l") + +[node name="LeftJoin5" type="TextureRect" parent="Pipes"] +offset_left = 144.0 +offset_right = 160.0 +offset_bottom = 16.0 +texture = ExtResource("20_fr68l") + +[node name="LeftJoin11" type="TextureRect" parent="Pipes"] +offset_left = 336.0 +offset_right = 352.0 +offset_bottom = 16.0 +texture = ExtResource("20_fr68l") + +[node name="LeftJoin6" type="TextureRect" parent="Pipes"] +offset_left = 96.0 +offset_right = 112.0 +offset_bottom = 16.0 +texture = ExtResource("21_hha8q") + +[node name="LeftJoin9" type="TextureRect" parent="Pipes"] +offset_left = 288.0 +offset_right = 304.0 +offset_bottom = 16.0 +texture = ExtResource("21_hha8q") + +[node name="LeftJoin4" type="TextureRect" parent="Pipes"] +offset_left = 32.0 +offset_right = 96.0 +offset_bottom = 16.0 +texture = ExtResource("15_n2p48") + +[node name="LeftJoin8" type="TextureRect" parent="Pipes"] +offset_left = 160.0 +offset_right = 288.0 +offset_bottom = 16.0 +texture = ExtResource("15_n2p48") + +[node name="LeftJoin12" type="TextureRect" parent="Pipes"] +offset_left = 352.0 +offset_right = 416.0 +offset_bottom = 16.0 +texture = ExtResource("15_n2p48") + +[node name="LeftJoin17" type="TextureRect" parent="Pipes"] +offset_left = 416.0 +offset_right = 432.0 +offset_bottom = 16.0 +texture = ExtResource("21_hha8q") + +[node name="AlienTimer" type="Timer" parent="."] +wait_time = 30.0 +autostart = true + [connection signal="update_lives" from="." to="." method="_on_update_lives"] [connection signal="effect_finished" from="Paddle" to="." method="_on_paddle_effect_finished"] [connection signal="pressed" from="Paused/VBoxContainer/HBoxContainer/Quit" to="Paused" method="_on_quit_pressed"] [connection signal="timeout" from="PowerBallTimer" to="." method="_on_power_ball_timer_timeout"] +[connection signal="door_opened" from="Pipes" to="." method="_on_pipes_door_opened"] +[connection signal="timeout" from="AlienTimer" to="." method="_on_alien_timer_timeout"] diff --git a/GameOver.tscn b/GameOver.tscn index 1280b63..d179fec 100644 --- a/GameOver.tscn +++ b/GameOver.tscn @@ -43,7 +43,15 @@ text = "Score" horizontal_alignment = 1 vertical_alignment = 1 -[node name="ScoreBox" type="Label" parent="VBoxContainer"] +[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"] +layout_mode = 2 + +[node name="HSeparator" type="HSeparator" parent="VBoxContainer/HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +theme = ExtResource("3_km2fx") + +[node name="ScoreBox" type="Label" parent="VBoxContainer/HBoxContainer"] layout_mode = 2 theme = ExtResource("3_km2fx") theme_type_variation = &"Numbers" @@ -51,6 +59,11 @@ text = "00000000" horizontal_alignment = 1 vertical_alignment = 1 +[node name="HSeparator2" type="HSeparator" parent="VBoxContainer/HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +theme = ExtResource("3_km2fx") + [node name="VSeparator3" type="VSeparator" parent="VBoxContainer"] layout_mode = 2 size_flags_vertical = 3 diff --git a/Global.gd b/Global.gd index 1360dca..bee2d8b 100644 --- a/Global.gd +++ b/Global.gd @@ -48,8 +48,8 @@ func _ready() -> void: else: highscore = 0 relative_mouse = true - music_volume = AudioServer.get_bus_volume_db(1) - effects_volume = AudioServer.get_bus_volume_db(2) + music_volume = int(AudioServer.get_bus_volume_db(1)) + effects_volume = int(AudioServer.get_bus_volume_db(2)) best_times = {} _loading = false diff --git a/MainTheme.tres b/MainTheme.tres index 261a430..974fb0c 100644 --- a/MainTheme.tres +++ b/MainTheme.tres @@ -1,4 +1,4 @@ -[gd_resource type="Theme" load_steps=16 format=3 uid="uid://cfvww0geatnnk"] +[gd_resource type="Theme" load_steps=17 format=3 uid="uid://cfvww0geatnnk"] [ext_resource type="FontFile" uid="uid://dfkm2dibf0c3b" path="res://Fonts/fonts-DSEG_v046/DSEG7-Classic-MINI/DSEG7ClassicMini-Italic.ttf" id="1_17to7"] [ext_resource type="FontFile" uid="uid://bx41ej4o03nbx" path="res://Fonts/arkanoid/Arka_solid.ttf" id="1_s07ae"] @@ -85,6 +85,15 @@ corner_radius_top_right = 3 corner_radius_bottom_right = 3 corner_radius_bottom_left = 3 +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_8xhb1"] +bg_color = Color(0.6, 0.6, 0.6, 0) +corner_radius_top_left = 40 +corner_radius_top_right = 40 +corner_radius_bottom_right = 40 +corner_radius_bottom_left = 40 +shadow_color = Color(0.909804, 0.584314, 0.207843, 0.235294) +shadow_size = 10 + [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_sf0ln"] bg_color = Color(0, 0, 0, 1) @@ -138,6 +147,7 @@ Numbers/constants/shadow_offset_y = 0 Numbers/constants/shadow_outline_size = 3 Numbers/font_sizes/font_size = 18 Numbers/fonts/font = ExtResource("1_17to7") +Numbers/styles/normal = SubResource("StyleBoxFlat_8xhb1") PanelContainer/styles/panel = SubResource("StyleBoxFlat_sf0ln") RoundStart/base_type = &"PanelContainer" RoundStart/styles/panel = SubResource("StyleBoxFlat_mruxx") diff --git a/Pipes.gd b/Pipes.gd new file mode 100644 index 0000000..439816a --- /dev/null +++ b/Pipes.gd @@ -0,0 +1,81 @@ +extends Node2D + +class_name Pipes + +signal door_opened(door : int) +signal door_closed(door : int) + +enum { + TOP_LEFT, + TOP_RIGHT, + BOTTOM_LEFT, + BOTTOM_RIGHT +} + +func open_door(door : int) -> void: + match door: + TOP_LEFT: + var tween = get_tree().create_tween().set_parallel(true) + tween.tween_property($TopDoor1L, "position", $TopDoor1L.get_meta("open"), 1) + tween.tween_property($TopDoor1R, "position", $TopDoor1R.get_meta("open"), 1) + tween.finished.connect(_top_left_opened) + TOP_RIGHT: + var tween = get_tree().create_tween().set_parallel(true) + tween.tween_property($TopDoor2L, "position", $TopDoor2L.get_meta("open"), 1) + tween.tween_property($TopDoor2R, "position", $TopDoor2R.get_meta("open"), 1) + tween.finished.connect(_top_right_opened) + BOTTOM_LEFT: + var tween = get_tree().create_tween().set_parallel(true) + tween.tween_property($LeftDoor, "position", $LeftDoor.get_meta("open"), 1) + tween.finished.connect(_bottom_left_opened) + BOTTOM_RIGHT: + var tween = get_tree().create_tween().set_parallel(true) + tween.tween_property($RightDoor, "position", $RightDoor.get_meta("open"), 1) + tween.finished.connect(_bottom_right_opened) + +func _top_left_opened() -> void: + door_opened.emit(TOP_LEFT) + +func _top_right_opened() -> void: + door_opened.emit(TOP_RIGHT) + +func _bottom_left_opened() -> void: + door_opened.emit(BOTTOM_LEFT) + +func _bottom_right_opened() -> void: + door_opened.emit(BOTTOM_LEFT) + + + +func close_door(door : int) -> void: + match door: + TOP_LEFT: + var tween = get_tree().create_tween().set_parallel(true) + tween.tween_property($TopDoor1L, "position", $TopDoor1L.get_meta("closed"), 1) + tween.tween_property($TopDoor1R, "position", $TopDoor1R.get_meta("closed"), 1) + tween.finished.connect(_top_left_closed) + TOP_RIGHT: + var tween = get_tree().create_tween().set_parallel(true) + tween.tween_property($TopDoor2L, "position", $TopDoor2L.get_meta("closed"), 1) + tween.tween_property($TopDoor2R, "position", $TopDoor2R.get_meta("closed"), 1) + tween.finished.connect(_top_right_closed) + BOTTOM_LEFT: + var tween = get_tree().create_tween().set_parallel(true) + tween.tween_property($LeftDoor, "position", $LeftDoor.get_meta("closed"), 1) + tween.finished.connect(_bottom_left_closed) + BOTTOM_RIGHT: + var tween = get_tree().create_tween().set_parallel(true) + tween.tween_property($RightDoor, "position", $RightDoor.get_meta("closed"), 1) + tween.finished.connect(_bottom_right_closed) + +func _top_left_closed() -> void: + door_closed.emit(TOP_LEFT) + +func _top_right_closed() -> void: + door_closed.emit(TOP_RIGHT) + +func _bottom_left_closed() -> void: + door_closed.emit(BOTTOM_LEFT) + +func _bottom_right_closed() -> void: + door_closed.emit(BOTTOM_LEFT) diff --git a/Pipes/CornerTopLeft.png b/Pipes/CornerTopLeft.png new file mode 100644 index 0000000..11b2870 Binary files /dev/null and b/Pipes/CornerTopLeft.png differ diff --git a/Pipes/CornerTopLeft.png.import b/Pipes/CornerTopLeft.png.import new file mode 100644 index 0000000..8c21784 --- /dev/null +++ b/Pipes/CornerTopLeft.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://n81u6nrroi18" +path="res://.godot/imported/CornerTopLeft.png-9c7801ca96786af1b30bcf44c473aade.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Pipes/CornerTopLeft.png" +dest_files=["res://.godot/imported/CornerTopLeft.png-9c7801ca96786af1b30bcf44c473aade.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 diff --git a/Pipes/CornerTopRight.png b/Pipes/CornerTopRight.png new file mode 100644 index 0000000..4f9df5b Binary files /dev/null and b/Pipes/CornerTopRight.png differ diff --git a/Pipes/CornerTopRight.png.import b/Pipes/CornerTopRight.png.import new file mode 100644 index 0000000..1a38e63 --- /dev/null +++ b/Pipes/CornerTopRight.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://btiaapyjul68s" +path="res://.godot/imported/CornerTopRight.png-95804b50e9085e82822dd334fc2012c2.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Pipes/CornerTopRight.png" +dest_files=["res://.godot/imported/CornerTopRight.png-95804b50e9085e82822dd334fc2012c2.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 diff --git a/Pipes/hPipe.png b/Pipes/hPipe.png new file mode 100644 index 0000000..8305ad5 Binary files /dev/null and b/Pipes/hPipe.png differ diff --git a/Pipes/hPipe.png.import b/Pipes/hPipe.png.import new file mode 100644 index 0000000..cf1b26e --- /dev/null +++ b/Pipes/hPipe.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cg5olju1mcceh" +path="res://.godot/imported/hPipe.png-dd737fb114781ca561fdf4c32a7a82f5.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Pipes/hPipe.png" +dest_files=["res://.godot/imported/hPipe.png-dd737fb114781ca561fdf4c32a7a82f5.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 diff --git a/Pipes/hPipeEndLeft.png b/Pipes/hPipeEndLeft.png new file mode 100644 index 0000000..3970de1 Binary files /dev/null and b/Pipes/hPipeEndLeft.png differ diff --git a/Pipes/hPipeEndLeft.png.import b/Pipes/hPipeEndLeft.png.import new file mode 100644 index 0000000..cb59df4 --- /dev/null +++ b/Pipes/hPipeEndLeft.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bj28rs6816gn8" +path="res://.godot/imported/hPipeEndLeft.png-25343b46ddf5e7283a3aba2a3b5f9576.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Pipes/hPipeEndLeft.png" +dest_files=["res://.godot/imported/hPipeEndLeft.png-25343b46ddf5e7283a3aba2a3b5f9576.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 diff --git a/Pipes/hPipeEndRight.png b/Pipes/hPipeEndRight.png new file mode 100644 index 0000000..374a7e8 Binary files /dev/null and b/Pipes/hPipeEndRight.png differ diff --git a/Pipes/hPipeEndRight.png.import b/Pipes/hPipeEndRight.png.import new file mode 100644 index 0000000..48306e8 --- /dev/null +++ b/Pipes/hPipeEndRight.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dnm2slmsm5wnw" +path="res://.godot/imported/hPipeEndRight.png-e22e44e2c095687eff82351e852cfc9a.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Pipes/hPipeEndRight.png" +dest_files=["res://.godot/imported/hPipeEndRight.png-e22e44e2c095687eff82351e852cfc9a.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 diff --git a/Pipes/vPipe.png b/Pipes/vPipe.png new file mode 100644 index 0000000..1b7c881 Binary files /dev/null and b/Pipes/vPipe.png differ diff --git a/Pipes/vPipe.png.import b/Pipes/vPipe.png.import new file mode 100644 index 0000000..b007d1c --- /dev/null +++ b/Pipes/vPipe.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://biqt5k34w683i" +path="res://.godot/imported/vPipe.png-8c7ec6430c180095d6ace49edd67760d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Pipes/vPipe.png" +dest_files=["res://.godot/imported/vPipe.png-8c7ec6430c180095d6ace49edd67760d.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 diff --git a/Pipes/vPipeEndHigh.png b/Pipes/vPipeEndHigh.png new file mode 100644 index 0000000..45ab951 Binary files /dev/null and b/Pipes/vPipeEndHigh.png differ diff --git a/Pipes/vPipeEndHigh.png.import b/Pipes/vPipeEndHigh.png.import new file mode 100644 index 0000000..0c4314c --- /dev/null +++ b/Pipes/vPipeEndHigh.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://1ar54kb0l0sm" +path="res://.godot/imported/vPipeEndHigh.png-f79454df341f72f97605f3dd6885d0f8.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Pipes/vPipeEndHigh.png" +dest_files=["res://.godot/imported/vPipeEndHigh.png-f79454df341f72f97605f3dd6885d0f8.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 diff --git a/Pipes/vPipeEndLow.png b/Pipes/vPipeEndLow.png new file mode 100644 index 0000000..ad6fe41 Binary files /dev/null and b/Pipes/vPipeEndLow.png differ diff --git a/Pipes/vPipeEndLow.png.import b/Pipes/vPipeEndLow.png.import new file mode 100644 index 0000000..018e251 --- /dev/null +++ b/Pipes/vPipeEndLow.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bh8om6bv1qumy" +path="res://.godot/imported/vPipeEndLow.png-aa228021fc62aafe6d852b4176ec3de7.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Pipes/vPipeEndLow.png" +dest_files=["res://.godot/imported/vPipeEndLow.png-aa228021fc62aafe6d852b4176ec3de7.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 diff --git a/Sounds/AlienDie.wav b/Sounds/AlienDie.wav new file mode 100644 index 0000000..f080785 Binary files /dev/null and b/Sounds/AlienDie.wav differ diff --git a/Sounds/AlienDie.wav.import b/Sounds/AlienDie.wav.import new file mode 100644 index 0000000..fa1eca9 --- /dev/null +++ b/Sounds/AlienDie.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://cpf0y72o6wrv2" +path="res://.godot/imported/AlienDie.wav-f584a9487163e66e8e70219dc289f113.sample" + +[deps] + +source_file="res://Sounds/AlienDie.wav" +dest_files=["res://.godot/imported/AlienDie.wav-f584a9487163e66e8e70219dc289f113.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=0 diff --git a/Sounds/AlienHit.wav b/Sounds/AlienHit.wav new file mode 100644 index 0000000..1fd7d6b Binary files /dev/null and b/Sounds/AlienHit.wav differ diff --git a/Sounds/AlienHit.wav.import b/Sounds/AlienHit.wav.import new file mode 100644 index 0000000..9d065b1 --- /dev/null +++ b/Sounds/AlienHit.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://sfyq2erohryl" +path="res://.godot/imported/AlienHit.wav-fc14161267e2dcec4bd378e6681216e1.sample" + +[deps] + +source_file="res://Sounds/AlienHit.wav" +dest_files=["res://.godot/imported/AlienHit.wav-fc14161267e2dcec4bd378e6681216e1.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=0 diff --git a/Upgrade/Upgrade.gd b/Upgrade/Upgrade.gd index b201ea5..55335c1 100644 --- a/Upgrade/Upgrade.gd +++ b/Upgrade/Upgrade.gd @@ -16,11 +16,11 @@ func set_upgrade(chr : String, color : Color) -> void: func _on_body_entered(body: Node) -> void: if body is Floor: - get_parent().remove_child(self) - queue_free() + get_parent().call_deferred("remove_child", self) + call_deferred("queue_free") return if body is Paddle: upgrade_collected.emit(character) - get_parent().remove_child(self) - queue_free() + get_parent().call_deferred("remove_child", self) + call_deferred("queue_free") diff --git a/project.godot b/project.godot index 1acd802..ee97645 100644 --- a/project.godot +++ b/project.godot @@ -11,7 +11,7 @@ config_version=5 [application] config/name="Dunkanoid" -config/version="0.5.5" +config/version="0.6.1" run/main_scene="res://Intro.tscn" config/features=PackedStringArray("4.2", "Forward Plus") run/max_fps=30 @@ -103,6 +103,13 @@ play={ ] } +[layer_names] + +2d_physics/layer_1="Brick Bounce" +2d_physics/layer_2="Upgrade" +2d_physics/layer_5="Brick Pass" +2d_physics/layer_6="Alien Hit" + [physics] 2d/default_gravity=0.0 @@ -112,5 +119,6 @@ play={ [rendering] +textures/vram_compression/import_etc2_astc=true anti_aliasing/screen_space_roughness_limiter/enabled=false environment/defaults/default_clear_color=Color(0, 0, 0, 1)