From 3a76ac8145aa00b2a6d016c08bd93fb1376441fc Mon Sep 17 00:00:00 2001 From: edgul Date: Mon, 25 May 2026 21:03:17 -0400 Subject: [PATCH] added multiple levels, added slime and player damage and death --- assets/graphics/enemies/slime_purple.png | Bin 0 -> 1030 bytes .../graphics/enemies/slime_purple.png.import | 40 ++ project.godot | 4 + scenes/{game_node.tscn => level1.tscn} | 24 +- scenes/level2.tscn | 426 ++++++++++++++++++ scenes/level3.tscn | 426 ++++++++++++++++++ scenes/slime.tscn | 72 +++ scripts/game_controller.gd | 60 ++- scripts/player.gd | 6 + scripts/scene_manager.gd | 23 +- scripts/slime.gd | 41 ++ scripts/slime.gd.uid | 1 + 12 files changed, 1109 insertions(+), 14 deletions(-) create mode 100644 assets/graphics/enemies/slime_purple.png create mode 100644 assets/graphics/enemies/slime_purple.png.import rename scenes/{game_node.tscn => level1.tscn} (92%) create mode 100644 scenes/level2.tscn create mode 100644 scenes/level3.tscn create mode 100644 scenes/slime.tscn create mode 100644 scripts/slime.gd create mode 100644 scripts/slime.gd.uid diff --git a/assets/graphics/enemies/slime_purple.png b/assets/graphics/enemies/slime_purple.png new file mode 100644 index 0000000000000000000000000000000000000000..76f564e1d18d3f4b59c032ee8233ebf4665af431 GIT binary patch literal 1030 zcmeAS@N?(olHy`uVBq!ia0vp^2|(<@!3HEb(?2AGr~;43Vg?3oVGw3ym^DX&fq{94 zr;B4q#hkZu_UB)A5IH_yFgSBs)oT$}vmn=*zw9@ptqPdBe?d}nV{fk>$4CBvg?)Ed z_vO50>IiWPSm-r%m!<3^wh~P~_4RS~ zpI=Gub+-QhIeq%h`RaxX{5TJNc>dLzfkEQSwe9u4|AzdIT*^2{!A86~-QWe|7ymwB zC>Ti{|81}_`+UPPl@+TN=sEg&On58UrMgnvLQXF0_ys@bQ1@EdnLWo=s>t&5b6*sD zcFMcwU?tm(D_Xg)W-Wc$-E!h}Crjk()1K3gUwWA?xq;Wdw18cHo3k~Zx-$Fb`AU$*-@DD zmGPf?jG6V$dCTQj>{2>(Zt>F0fcfj}50vb4xa*Xko3|y%e%9UPUyOMTg5ncDvEEv- z-pIj{ckVgygWdnMA2Z(bzqjb#^{`seQ^pPQ$9_6a&90O2#S*<mC1;UMyZZkxfN& z@uKHWkGnrH91Z`H^EmwCk41a3FUGWg-!^5J_|wx1K5Uz!#D3x7Zw}ELVrNTt9P8IR z_1(WOXsY%rc>^6i*W&vj&+HC_UuW8s@vbNLPX_a void: print("scene manager is ready") - game_node.destroy.connect(destroy) + GameController.destroy.connect(destroy) + GameController.level_change_signal.connect(change_scene) build_level() func _process(delta: float) -> void: @@ -14,6 +16,21 @@ func _process(delta: float) -> void: func build_level() -> void: update_crates() + if enemies: + update_enemies() + if player: + GameController.player = player + +func update_enemies(): + for enemy in enemies.get_children(): + if not enemy.slime_damage.is_connected(GameController._on_slime_damage): + enemy.slime_damage.connect(GameController._on_slime_damage) + enemy.slime_struck.connect(GameController._on_slime_struck) + GameController.add_enemy(enemy) + +func change_scene(level): + print("changing scene to ", level) + get_tree().call_deferred("change_scene_to_file", level) func make_grenade(grenade_pos: Transform2D, grenade_dir: int) -> void: print("scene manager making grenade") @@ -30,7 +47,7 @@ func update_crates() -> void: if not obj.tree_exited.is_connected(update_crates): obj.tree_exited.connect(update_crates) crate_total += 1 - game_node.set_crate_num(crate_total) + GameController.set_crate_num(crate_total) func destroy(body): if body is BrownBox: diff --git a/scripts/slime.gd b/scripts/slime.gd new file mode 100644 index 0000000..1ff937d --- /dev/null +++ b/scripts/slime.gd @@ -0,0 +1,41 @@ +class_name Slime extends Area2D + +@onready var animated_sprite_2d = $AnimatedSprite2D +@onready var left_cast = $LeftCast +@onready var right_cast = $RightCast +@onready var left_down_cast = $LeftDownCast +@onready var right_down_cast = $RightDownCast + +signal slime_damage(body, slime) +signal slime_struck(body, slime) + +var speed:int = 100 +var direction = 1 + +func _ready(): + pass + +func turn_right(): + direction = 1 + animated_sprite_2d.flip_h = false + +func turn_left(): + direction = -1 + animated_sprite_2d.flip_h = true + +func _process(delta: float): + if right_cast.is_colliding() and not right_cast.get_collider() is Player: + turn_left() + elif left_cast.is_colliding() and not left_cast.get_collider() is Player: + turn_right() + if not right_down_cast.is_colliding(): + turn_left() + elif not left_down_cast.is_colliding(): + turn_right() + position.x += direction*speed*delta + +func _on_body_entered(body): + if body is Player: + slime_damage.emit(body, self) + if body is Grenade: + slime_struck.emit(body, self) diff --git a/scripts/slime.gd.uid b/scripts/slime.gd.uid new file mode 100644 index 0000000..c5b7c9d --- /dev/null +++ b/scripts/slime.gd.uid @@ -0,0 +1 @@ +uid://bl1mwmhvr6pcx