From 26803702b1b1c3ba39c2403c550846c3977846b1 Mon Sep 17 00:00:00 2001 From: Henry Date: Sun, 15 Feb 2026 22:58:40 +0000 Subject: [PATCH] Added rough CRT enemy; roughed in wave tracking and enemy switching; new game resets wave_count to 0. --- _graphics/bar_background.png | Bin 599 -> 169 bytes _graphics/bar_foreground.png | Bin 629 -> 184 bytes scenes/enemy_crt.gd | 56 ++++++++ scenes/enemy_crt.gd.uid | 1 + scenes/enemy_crt.tscn | 225 +++++++++++++++++++++++++++++++ scenes/main.gd | 1 + scenes/main.tscn | 12 +- scenes/player.tscn | 1 + scenes/wave.gd | 44 ++++-- shaders/flash_white.gdshader | 18 +++ shaders/flash_white.gdshader.uid | 1 + sprites/crt.png | Bin 0 -> 401 bytes sprites/crt.png.import | 40 ++++++ sprites/third space title.png | Bin 422 -> 692 bytes 14 files changed, 383 insertions(+), 16 deletions(-) create mode 100644 scenes/enemy_crt.gd create mode 100644 scenes/enemy_crt.gd.uid create mode 100644 scenes/enemy_crt.tscn create mode 100644 shaders/flash_white.gdshader create mode 100644 shaders/flash_white.gdshader.uid create mode 100644 sprites/crt.png create mode 100644 sprites/crt.png.import diff --git a/_graphics/bar_background.png b/_graphics/bar_background.png index ab575400f4de550facd75473935548f7238eefe7..90a67a5b4d815eebe0b5a37cfc6a44f5acfde2f9 100644 GIT binary patch delta 152 zcmcc4vXXIvWIZzj1A~Sxe=v|@Nq6*hWMJ6XSMxh?GLSDF;1l8sq$MPkHFX^=9AbS! za`Q8)x+|NP_I7TaH{sXXyRkrN&XOR%V21xtV9qrA3Q$nR)5S4FVrp`N0`rDq1;#P~ u`N(O_a~qjMZP{~K4AvYika)?!aN+`^VCCGC*QNqBFnGH9xvX!lvI6-5sS%!O zzP=1vKsE;h6Qd9VGmymygbeMO3@l(a1A`inW?*1mz=)7tzyy~SSip>6gA}TD#J>R= z5}6qiQ4-E(HYzo1&C7s~{IQsCFRFRw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+UU-@r)U$VeBcLbtdwuOzWTH?LS3VhGF}m(=3qqRfJl%=|nBkhzIT z`K2YcN=hJ$-~i&zlFT%OO?kyoZvj2150cS0)HBeBn+?=z0}{3JFUm{>+6*$^&d>&| z5=9JZkBvUaawNwFep@7-AuqoFE~WaItare@|8g z+l2dvO(si;C~zNaYmiuy)wYuTWolF5iKXtm2?+^NH6O&7Ee#njF<;_l+pvW}NJZ>` gu+Ywn<`rKU8B7ZLbMJS&RshA3r>mdKI;Vst0Kl`MQ2+n{ diff --git a/_graphics/bar_foreground.png b/_graphics/bar_foreground.png index 9ed11be6f23b3b94993039d75c6f6e8f5b3f9223..65ad068fee2cd765dee0bcbe6a0a9f80ea0c5dd7 100644 GIT binary patch delta 167 zcmey$vV(DgWIZzj1A~Sxe=v|@Nq6*hWMJ6XSMxh?GLSDF;1l8sq$MPkHFX^=9AbS! za`Q8)x+|NP_I7TaH{sXXyRkrN&XOR%V21xtV9qrA3Q*A4)5S4FVrp`N0`rDq1;#Rg z`J$W!8;lD!Y}#~yQCpjxnO&RPSZ2cn1?`43jkc{4e9E#64C~^VH5(g`iU9R9c)I$z JtaD0e0sw*hHXr~1 literal 629 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-5sS%!O zzP=1vKsE;h6Qd9VGmymygbeMO3@l(a1A`inW?*1mz=)7tzyy~SSip>6gA}TD#J>R= z5}6qiQ4-E(HYzo1&C7s~{IQsCFRFRw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+UU-@r)U$VeBcLbtdwuOzWTH?LS3VhGF}m(=3qqRfJl%=|nBkhzIT z`K2YcN=hJ$-~i&zlFT%OO?kyoZvj2150cS0)HBeBn+?=z0}{3JFUm{>+6*$^&d>&| z5=9JZkBvUaawNwS6TY(KmJ;1?PwfrL{F5d1rP{ zKC6F_b$W8s<`XGAdl)qm8{U{F)gJNiG|{uG;7;OK 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 0000000000000000000000000000000000000000..66c792e7827bb49406efefa1d58b99c4a9ac6e17 GIT binary patch literal 401 zcmeAS@N?(olHy`uVBq!ia0vp^2|z5%!3-pme$5mGQjEnx?oJHr&dIz4a-;)%LR^8g zgru^juA_xRtWQX8enwSyW%JVB&aLw%{91cA7AVbG666=m@E;1ynPy)Bn#1qu;uzx5 zxp(Sqp=Jdh7e({G|MlMqXtFqNV2w@x^3Y{EFVi{KpOa%&8rzANSTbC>Q_Zl#(&g%% z39tTsx*Jm(GUeO0L!Vy#p1Iv^zSpyz&Fh|3p0976vyE%^Cf?R#Pv0k)I;c#W+v_qz zVE5aPx#8&FJCMF0Q*7#SleEkQUyT})JMZ)kdpd4r{miM5`P`mNnv00009bW%=J0RR90 z|NsC0|2G1g)BpeiGD$>1RA_l1BZLhYFStq`vvEs=Pt4wK|48n1G;I^;Y$Dt*xawyu}fr2p?bkw31 zuPahl(`Jn}bJgLOpyNI*W;$E@Q zK@b|zDr4@Z<<`Z{q%`-Xm2d-S;WW{iR=~Yai|b}mTC4CKo|V!Pks}H^Ez<#MbG=f= zR;RVrVGnJp!$m7)Y%f|q=ACJiojr5#b2td075548v{E&J{VOxdTkh0tQ(8IVs?l;< z?!rad;#q0{TEzpMmMKBMg0TpvWmRp_lAN8rXwQYK&}J|?EuECb(vQsI{0dDZ6VM7bH8=};&_?VoSiiApBX*9)4eMmIu(>s@ zXLr$n)>^8>^|owx(eMm}X#WM$t}Y*Jql3^MUkii#()OY)ySs4F^1L32mbn{6%e_lF z7C13$S^>6z)>Ody2GPQ|OwwqJr#Ri& ztOxpM-HS_d5Q=GS@ej-*y*yJQxj90O^=O6nWU2`PCcT=#5)87mvfEdM0MfY>26et% aoJc?S0J9A}uSJUh00003 literal 422 zcmeAS@N?(olHy`uVBq!ia0vp^2|(=3!3HFg7ceXUQjEnx?oJHr&dIz4vJ*UA978JR zyuGt=Qj>v*+rtMRHk5s{YuGzCf3+xUq6sJG9EInvuepjn|6Xw&QF1KaOS zwDKzsV>rW*z{U`Lm$~Ssblqkq70)J~oyK!xR*DwAdZ%7m^YXp-dh=4-tbP0l+XkK7p}N8