diff --git a/_graphics/bar_background.png b/_graphics/bar_background.png index ab57540..90a67a5 100644 Binary files a/_graphics/bar_background.png and b/_graphics/bar_background.png differ diff --git a/_graphics/bar_foreground.png b/_graphics/bar_foreground.png index 9ed11be..65ad068 100644 Binary files a/_graphics/bar_foreground.png and b/_graphics/bar_foreground.png differ diff --git a/scenes/enemy_crt.gd b/scenes/enemy_crt.gd new file mode 100644 index 0000000..9d03b10 --- /dev/null +++ b/scenes/enemy_crt.gd @@ -0,0 +1,56 @@ +extends Area2D + +var bullet_scene = preload("res://scenes/enemy_bullet.tscn") +var start_pos = Vector2.ZERO +var speed = 0 +var tween_speed: float = 1.4 + +var exploding = false + +var enemy_move_aggression = randf_range(5, 20) +var enemy_shoot_aggression = randf_range(4, 20) + +@onready var screensize = get_viewport_rect().size + + +func start(pos): + speed = 0 + position = Vector2(pos.x, -pos.y) + start_pos = pos + await get_tree().create_timer(randf_range(0.25, 0.55)).timeout + var tween = create_tween().set_trans(Tween.TRANS_BACK) + tween.tween_property(self, "position:y", start_pos.y, tween_speed) + await tween.finished + $MoveTimer.wait_time = enemy_move_aggression + $MoveTimer.start() + $ShootTimer.wait_time = enemy_shoot_aggression + $ShootTimer.start() + + +func _on_timer_timeout() -> void: + speed = randf_range(75, 100) + +func _on_shoot_timer_timeout(): + var b = bullet_scene.instantiate() + get_tree().root.add_child(b) + b.start(position) + $ShootTimer.wait_time = randf_range(4, 20) + $ShootTimer.start() + +func _process(delta): + position.y += speed * delta + if position.y > screensize.y + 32: + start(start_pos) + + +func explode(): + if exploding: return + exploding = true + EventBus.enemy_hit.emit(5) + speed = 0 + $AnimationPlayer.play("explode") + #set_deferred("monitoring", false) + await $AnimationPlayer.animation_finished + queue_free() + EventBus.enemy_died.emit() + diff --git a/scenes/enemy_crt.gd.uid b/scenes/enemy_crt.gd.uid new file mode 100644 index 0000000..f01a723 --- /dev/null +++ b/scenes/enemy_crt.gd.uid @@ -0,0 +1 @@ +uid://7ls7phfcupal diff --git a/scenes/enemy_crt.tscn b/scenes/enemy_crt.tscn new file mode 100644 index 0000000..25da021 --- /dev/null +++ b/scenes/enemy_crt.tscn @@ -0,0 +1,225 @@ +[gd_scene format=3 uid="uid://dm0pkef7wmwuq"] + +[ext_resource type="Script" uid="uid://i0r17jo6838m" path="res://scenes/enemy_chicken.gd" id="1_0vjqj"] +[ext_resource type="Texture2D" uid="uid://b5pswf7r8b7j4" path="res://sprites/crt.png" id="2_emiuq"] +[ext_resource type="Texture2D" uid="uid://cy4jggxmnohbb" path="res://sprites/chicken.png" id="2_ugdur"] +[ext_resource type="Texture2D" uid="uid://bm7fgqwqfqmf4" path="res://sprites/explosion_pallete-swap.png" id="3_emiuq"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_4gyqm"] +size = Vector2(45.71434, 40.000053) + +[sub_resource type="Animation" id="Animation_h1rgn"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite2D:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [0] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Sprite2D:texture") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [ExtResource("2_ugdur")] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Sprite2D:hframes") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [3] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Sprite2D:region_rect") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Rect2(0, 0, 84, 32)] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("AnimationPlayer:speed_scale") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [1.0] +} + +[sub_resource type="Animation" id="Animation_7ellt"] +resource_name = "explode" +step = 0.2 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite2D:texture") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [ExtResource("3_emiuq")] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Sprite2D:frame") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.2, 0.4, 0.6, 0.8), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 1, +"values": [0, 1, 2, 3, 4] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Sprite2D:hframes") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [5] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Sprite2D:region_rect") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Rect2(0, 0, 80, 16)] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("AnimationPlayer:speed_scale") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [1.5] +} + +[sub_resource type="Animation" id="Animation_s7c3p"] +resource_name = "flap" +length = 0.4 +loop_mode = 2 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite2D:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0.0009999999, 0.2, 0.4), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [0, 1, 2] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Sprite2D:texture") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [ExtResource("2_ugdur")] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Sprite2D:hframes") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [3] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Sprite2D:region_rect") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Rect2(0, 0, 84, 32)] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_7ellt"] +_data = { +&"RESET": SubResource("Animation_h1rgn"), +&"explode": SubResource("Animation_7ellt"), +&"flap": SubResource("Animation_s7c3p") +} + +[node name="EnemyCRT" type="Area2D" unique_id=1433837580 groups=["enemies"]] +scale = Vector2(1.1, 1.1) +script = ExtResource("1_0vjqj") + +[node name="Sprite2D" type="Sprite2D" parent="." unique_id=2115910138] +scale = Vector2(1.44, 1.44) +texture = ExtResource("2_emiuq") +hframes = 3 +region_enabled = true +region_rect = Rect2(0, 0, 96, 28) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=1841693239] +position = Vector2(-1.8732879e-06, -1.9584381e-06) +scale = Vector2(0.99999857, 0.99999857) +shape = SubResource("RectangleShape2D_4gyqm") + +[node name="MoveTimer" type="Timer" parent="." unique_id=1928257014] +one_shot = true + +[node name="ShootTimer" type="Timer" parent="." unique_id=1985644907] +one_shot = true + +[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=702523492] +active = false +libraries/ = SubResource("AnimationLibrary_7ellt") + +[connection signal="timeout" from="MoveTimer" to="." method="_on_timer_timeout"] +[connection signal="timeout" from="ShootTimer" to="." method="_on_shoot_timer_timeout"] diff --git a/scenes/main.gd b/scenes/main.gd index 9224275..ab3b803 100644 --- a/scenes/main.gd +++ b/scenes/main.gd @@ -116,6 +116,7 @@ func new_game(): # Tell the enemies to spawn! #await get_tree().create_timer(.5).timeout + $Wave.wave_count = 0 $Wave.spawn_enemies() diff --git a/scenes/main.tscn b/scenes/main.tscn index 15af6bb..85c03a1 100644 --- a/scenes/main.tscn +++ b/scenes/main.tscn @@ -79,11 +79,14 @@ offset_bottom = 36.0 [node name="Title" type="TextureRect" parent="CanvasLayer" unique_id=561106216] self_modulate = Color(0.015236704, 0.015236706, 0.0152367065, 1) material = SubResource("ShaderMaterial_kek77") -offset_left = 70.0 -offset_top = 58.0 -offset_right = 166.0 -offset_bottom = 125.0 +offset_left = 29.0 +offset_top = 101.0 +offset_right = 269.0 +offset_bottom = 166.0 +scale = Vector2(0.75, 0.75) +size_flags_horizontal = 4 texture = ExtResource("5_tipki") +stretch_mode = 3 [node name="CenterContainer" type="CenterContainer" parent="CanvasLayer" unique_id=1787047882] anchors_preset = 15 @@ -121,5 +124,6 @@ stream = ExtResource("10_choun") volume_db = -0.5 [node name="Wave" parent="." unique_id=2117861058 instance=ExtResource("11_ya4ey")] +wave_complete = null [connection signal="pressed" from="CanvasLayer/CenterContainer/Start" to="." method="_on_start_pressed"] diff --git a/scenes/player.tscn b/scenes/player.tscn index e6df011..7aa33a5 100644 --- a/scenes/player.tscn +++ b/scenes/player.tscn @@ -136,6 +136,7 @@ shape = SubResource("RectangleShape2D_op7ga") one_shot = true [node name="Explosion" parent="." unique_id=321630316 instance=ExtResource("8_dw050")] +visible = false texture = ExtResource("10_d2wvv") region_enabled = true region_rect = Rect2(0, 0, 96, 16) diff --git a/scenes/wave.gd b/scenes/wave.gd index a133424..6161c14 100644 --- a/scenes/wave.gd +++ b/scenes/wave.gd @@ -2,29 +2,49 @@ extends Node2D var wave_count: int = 0 var enemy_count: int = 0 -var enemy = preload("res://scenes/enemy_chicken.tscn") +var enemy = null @export var wave_complete: bool = false const COLS: int = 5 const ROWS: int = 3 +const CHICKEN = preload("res://scenes/enemy_chicken.tscn") +const CRT = preload("res://scenes/enemy_CRT.tscn") + func _ready(): - wave_count += 1 + wave_count = 0 EventBus.enemy_died.connect(_on_enemy_died) func spawn_enemies(): - print("Enemy Wave: ", wave_count) - for x in range(COLS): - for y in range(ROWS): - var e = enemy.instantiate() - var pos = Vector2(x * (28 + 4) + 56, 28 * 2 + y * 38) - add_child(e) - e.start(pos) - enemy_count = ROWS * COLS - await get_tree().process_frame - print_debug("Remaining enemies: ", enemy_count, ", ", get_tree().get_nodes_in_group("enemies").size()) + + if wave_count == 0: #This is for CHICKENS + print("Enemy Wave: ", wave_count) + enemy = CHICKEN + for x in range(COLS): + for y in range(ROWS): + var e = enemy.instantiate() + var pos = Vector2(x * (28 + 4) + 56, 28 * 2 + y * 38) + add_child(e) + e.start(pos) + enemy_count = ROWS * COLS + await get_tree().process_frame + print_debug("Remaining enemies: ", enemy_count, ", ", get_tree().get_nodes_in_group("enemies").size()) + + if wave_count == 1: #This is for CRTs + print("Enemy Wave: ", wave_count) + enemy = CRT + for x in range(COLS): + for y in range(ROWS): + var e = enemy.instantiate() + var pos = Vector2(x * (28 + 4) + 56, 28 * 2 + y * 38) + add_child(e) + e.start(pos) + enemy_count = ROWS * COLS + await get_tree().process_frame + print_debug("Remaining enemies: ", enemy_count, ", ", get_tree().get_nodes_in_group("enemies").size()) + func _on_enemy_died(): diff --git a/shaders/flash_white.gdshader b/shaders/flash_white.gdshader new file mode 100644 index 0000000..408db07 --- /dev/null +++ b/shaders/flash_white.gdshader @@ -0,0 +1,18 @@ +shader_type canvas_item; + +uniform float flash_value : hint_range(0.0, 1.0) = 0.0; + +void vertex() { + // Called for every vertex the material is visible on. +} + +void fragment() { + vec4 original_color = COLOR; + vec4 flash_color = vec4(1.0, 1.0, 1.0, 1.0); // White color + COLOR = mix(original_color, flash_color, flash_value); +} + +//void light() { +// // Called for every pixel for every light affecting the CanvasItem. +// // Uncomment to replace the default light processing function with this one. +//} diff --git a/shaders/flash_white.gdshader.uid b/shaders/flash_white.gdshader.uid new file mode 100644 index 0000000..ee74710 --- /dev/null +++ b/shaders/flash_white.gdshader.uid @@ -0,0 +1 @@ +uid://boub2glq4vsq5 diff --git a/sprites/crt.png b/sprites/crt.png new file mode 100644 index 0000000..66c792e Binary files /dev/null and b/sprites/crt.png differ diff --git a/sprites/crt.png.import b/sprites/crt.png.import new file mode 100644 index 0000000..b38078b --- /dev/null +++ b/sprites/crt.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b5pswf7r8b7j4" +path="res://.godot/imported/crt.png-e54154c66d7f8bd69bbbbb6583434a1a.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://sprites/crt.png" +dest_files=["res://.godot/imported/crt.png-e54154c66d7f8bd69bbbbb6583434a1a.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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/sprites/third space title.png b/sprites/third space title.png index ee850fe..96513c5 100644 Binary files a/sprites/third space title.png and b/sprites/third space title.png differ