From f1eec301672011898c4f449f8a304de1420f94b9 Mon Sep 17 00:00:00 2001 From: Henry Date: Wed, 31 Dec 2025 13:34:29 +0000 Subject: [PATCH] Decreased movement and shot delay of enemies based on number of enemies remaining; increased tween speed of enemy bounce at 25% remaining. --- enemy.gd | 10 +++++++--- main.gd | 16 ++++++++++++++++ main.tscn | 1 + player.gd | 3 +++ player.tscn | 26 +++++++++++++++++++++++++- project.godot | 1 + score_counter.gd | 4 ++++ ui.gd | 1 - 8 files changed, 57 insertions(+), 5 deletions(-) diff --git a/enemy.gd b/enemy.gd index f2a5df3..1523b21 100644 --- a/enemy.gd +++ b/enemy.gd @@ -3,9 +3,13 @@ extends Area2D var bullet_scene = preload("res://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 @@ -15,11 +19,11 @@ func start(pos): 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, 1.4) + tween.tween_property(self, "position:y", start_pos.y, tween_speed) await tween.finished - $MoveTimer.wait_time = randf_range(5, 20) + $MoveTimer.wait_time = enemy_move_aggression $MoveTimer.start() - $ShootTimer.wait_time = randf_range(4, 20) + $ShootTimer.wait_time = enemy_shoot_aggression $ShootTimer.start() diff --git a/main.gd b/main.gd index aa23f33..af54c29 100644 --- a/main.gd +++ b/main.gd @@ -40,12 +40,28 @@ func spawn_enemies(): print_debug("Remaining enemies: ", enemy_count, ", ", get_tree().get_nodes_in_group("enemies").size()) + func _on_enemy_died(): enemy_count -= 1 print_debug(enemy_count) if enemy_count == 0: print_debug("Remaining enemies: ", enemy_count, ", ", get_tree().get_nodes_in_group("enemies").size()) win_game() + if enemy_count == ROWS * COLS / 2: + print_debug("Enemy count is 50%") + update_enemy_aggression(2,10) + if enemy_count == ROWS * COLS / 4: + print_debug("Enemy count is 25%") + update_enemy_aggression(1,1) + +func update_enemy_aggression(low,high): + var nodes = get_tree().get_nodes_in_group("enemies") + + for node in nodes: + if node is Area2D: + node.enemy_move_aggression = randf_range(low,high) + node.enemy_shoot_aggression = randf_range(low,high) + node.tween_speed = min(low,high) - .75 func _on_enemy_hit(value: int): Global.score += value diff --git a/main.tscn b/main.tscn index a845595..90df166 100644 --- a/main.tscn +++ b/main.tscn @@ -86,6 +86,7 @@ offset_right = 196.0 offset_bottom = 36.0 [node name="Title" type="TextureRect" parent="CanvasLayer"] +self_modulate = Color(0.015236704, 0.015236706, 0.0152367065, 1) material = SubResource("ShaderMaterial_kek77") offset_left = 27.0 offset_top = 74.0 diff --git a/player.gd b/player.gd index 0f483bd..3683998 100644 --- a/player.gd +++ b/player.gd @@ -37,6 +37,7 @@ func start(): print(shield) shader_active = false $Ship.frame = 1 + $Ship/Boosters/BoosterBurst.hide() $Ship/Boosters.hide() $Ship.show() position = Vector2(screensize.x / 2, screensize.y) @@ -123,9 +124,11 @@ func _on_damage_taken(): func _on_player_victory() -> void: print("Victory!") + # get_node("EnemyBullet").monitoring = false #TODO make sure bullets stop monitoring! set_process(false) $Ship.frame = 1 await get_tree().create_timer(1).timeout + $Ship/Boosters/BoosterBurst.show() var tween = create_tween() tween.tween_property(self, "position:y", 60 * -1, .25).set_ease(tween.EASE_IN) await tween.finished diff --git a/player.tscn b/player.tscn index 2f69b80..ed6f018 100644 --- a/player.tscn +++ b/player.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=18 format=3 uid="uid://pyuorpwb7lpe"] +[gd_scene load_steps=20 format=3 uid="uid://pyuorpwb7lpe"] [ext_resource type="Script" uid="uid://dcrnf4r6c5qaw" path="res://player.gd" id="1_sweqy"] [ext_resource type="PackedScene" uid="uid://bwxxdrdvo3le0" path="res://bullet.tscn" id="2_1jxqw"] @@ -73,6 +73,16 @@ animations = [{ "speed": 10.0 }] +[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_dw050"] +particles_animation = true +particles_anim_h_frames = 2 +particles_anim_v_frames = 1 +particles_anim_loop = false + +[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_b26j0"] +particle_flag_disable_z = true +gravity = Vector3(0, 98, 0) + [sub_resource type="RectangleShape2D" id="RectangleShape2D_op7ga"] size = Vector2(14, 14) @@ -93,6 +103,20 @@ sprite_frames = SubResource("SpriteFrames_u1c27") animation = &"forward" autoplay = "forward" +[node name="BoosterBurst" type="GPUParticles2D" parent="Ship/Boosters"] +texture_repeat = 2 +material = SubResource("CanvasItemMaterial_dw050") +amount = 10 +texture = ExtResource("3_1jxqw") +lifetime = 0.75 +interp_to_end = 1.0 +preprocess = 1.83 +speed_scale = 15.69 +draw_order = 2 +trail_lifetime = 1.8499999999999999 +trail_sections = 2 +process_material = SubResource("ParticleProcessMaterial_b26j0") + [node name="CollisionShape2D" type="CollisionShape2D" parent="."] shape = SubResource("RectangleShape2D_op7ga") diff --git a/project.godot b/project.godot index 94dd867..8503f81 100644 --- a/project.godot +++ b/project.godot @@ -26,6 +26,7 @@ window/size/viewport_height=320 window/size/window_width_override=720 window/size/window_height_override=960 window/stretch/mode="canvas_items" +window/movie_file="/Users/henryfaber/Downloads/shmup_capture.avi" [editor] diff --git a/score_counter.gd b/score_counter.gd index ac10812..214ec7c 100644 --- a/score_counter.gd +++ b/score_counter.gd @@ -18,3 +18,7 @@ func display_digits(n): for i in 8: get_child(i).texture.region = Rect2(digit_coords[int(s[i])], Vector2(8, 8)) + # var tween = create_tween() + # tween.tween_property(get_node("HBoxContainer/ScoreCounter/Digit0"), "scale", scale + Vector2(.5,.5), .15) + # await get_tree().create_timer(.25).timeout + # tween.tween_property(get_node("HBoxContainer/ScoreCounter/Digit0"), "scale", scale + Vector2(-.5,-.5), .15) diff --git a/ui.gd b/ui.gd index 2b67631..2ab18e3 100644 --- a/ui.gd +++ b/ui.gd @@ -13,7 +13,6 @@ func _ready(): func update_score(value): score_counter.display_digits(value) - func _on_shield_changed(max_value: int, old_value: int, new_value: int) -> void: shield_bar.max_value = max_value shield_bar.value = old_value