From 8b90d78c14de124d431e1b05a704ad283c53a3fa Mon Sep 17 00:00:00 2001 From: TaylorB Date: Mon, 8 Sep 2025 20:57:14 -0400 Subject: [PATCH] lots of damage --- Assets/Graphics/Enemies/slime_purple.png | Bin 0 -> 1030 bytes .../Graphics/Enemies/slime_purple.png.import | 34 + Scenes/Crate.tscn | 2 +- Scenes/coin.tscn | 4 +- Scenes/reallygoodgame.tscn | 126 +++- Scenes/reallygoodgame2.tscn | 592 ++++++++++++++++++ Scenes/reallygoodgame3.tscn | 586 +++++++++++++++++ Scenes/slime.tscn | 74 +++ project.godot | 4 + scripts/coin.gd | 5 +- scripts/gamecontroller.gd | 59 +- scripts/rscs/PlayerStats.tres | 12 + scripts/rscs/characterstats.gd | 10 + scripts/rscs/characterstats.gd.uid | 1 + scripts/rscs/slimeStats.tres | 12 + scripts/scene_manager.gd | 47 +- scripts/slime.gd | 37 ++ scripts/slime.gd.uid | 1 + 18 files changed, 1574 insertions(+), 32 deletions(-) create mode 100644 Assets/Graphics/Enemies/slime_purple.png create mode 100644 Assets/Graphics/Enemies/slime_purple.png.import create mode 100644 Scenes/reallygoodgame2.tscn create mode 100644 Scenes/reallygoodgame3.tscn create mode 100644 Scenes/slime.tscn create mode 100644 scripts/rscs/PlayerStats.tres create mode 100644 scripts/rscs/characterstats.gd create mode 100644 scripts/rscs/characterstats.gd.uid create mode 100644 scripts/rscs/slimeStats.tres 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("coin collision") - coincollectedsignal.emit(body,self) + if body is Player: + coincollectedsignal.emit(body,self) diff --git a/scripts/gamecontroller.gd b/scripts/gamecontroller.gd index 2e0e19f..18dd48e 100644 --- a/scripts/gamecontroller.gd +++ b/scripts/gamecontroller.gd @@ -1,11 +1,44 @@ extends Node2D signal playerDamage +signal destroySignal(body) +signal levelChangeSignal(level) + +var timer = Timer.new() +var timeAvailable:int = 5 + +var levels = ["res://Scenes/reallygoodgame.tscn", "res://Scenes/reallygoodgame2.tscn", "res://Scenes/reallygoodgame3.tscn"] +var timers = [500,500,500] +var currentLevel = 0 + +#character stats +var enemy:CharacterStats +var player:CharacterStats +var playerCurrentHealth:int + # Called when the node enters the scene tree for the first time. func _ready() -> void: - pass # Replace with function body. - + enemy = load("res://scripts/rscs/slimeStats.tres") + player = load("res://scripts/rscs/PlayerStats.tres") + playerCurrentHealth = player.starting_health + + + # Replace with function body. + add_child(timer) + timer.wait_time = 1 + timer.one_shot = false + timer.connect("timeout", secondCounter) + timer.start() +func secondCounter(): + timeAvailable -=1 + if timeAvailable <=0: + print("you lose") + levelChangeSignal.emit(levels[currentLevel]) + +func reset(): + timeAvailable = timers[currentLevel] + # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta: float) -> void: pass @@ -20,8 +53,8 @@ func _on_trigger(effect: Variant, body: Variant) -> void: playerDamage.emit() if body.name == "world-boundary": return - if not body is Player: - body.queue_free() + #if not body is Player: + # body.queue_free() func bulletDamage(target: Node2D, bullet: Node2D): print("GC sees a hit") @@ -30,5 +63,21 @@ func bulletDamage(target: Node2D, bullet: Node2D): func coincollected(body, coin): print("coincollected") - coin.queue_free() + destroySignal.emit(coin) +func totalcoincount(count): + print("GC knows total coins"+str(count)) + if count == 0: + currentLevel +=1 + if currentLevel >= levels.size(): + currentLevel = 0 + levelChangeSignal.emit(levels[currentLevel]) + +func playerAttacked(body, slime): + print("player attacked") + print("damage : "+str(enemy.meleeDamage) ) + print("player health : "+str(player.health)) + playerCurrentHealth -= enemy.meleeDamage + if playerCurrentHealth <=0: + print("you died") + diff --git a/scripts/rscs/PlayerStats.tres b/scripts/rscs/PlayerStats.tres new file mode 100644 index 0000000..e3eed69 --- /dev/null +++ b/scripts/rscs/PlayerStats.tres @@ -0,0 +1,12 @@ +[gd_resource type="Resource" script_class="CharacterStats" load_steps=2 format=3 uid="uid://dwjbdmn7rqrq"] + +[ext_resource type="Script" uid="uid://dketxenj4lhi2" path="res://scripts/rscs/characterstats.gd" id="1_sf2cn"] + +[resource] +script = ExtResource("1_sf2cn") +health = 100 +max_health = 100 +starting_health = 100 +meleeDamage = 100 +rangeDamage = 0 +metadata/_custom_type_script = "uid://dketxenj4lhi2" diff --git a/scripts/rscs/characterstats.gd b/scripts/rscs/characterstats.gd new file mode 100644 index 0000000..82fb991 --- /dev/null +++ b/scripts/rscs/characterstats.gd @@ -0,0 +1,10 @@ +class_name CharacterStats extends Resource + +#health +@export var health:int = 100 +@export var max_health:int =100 +@export var starting_health:int =100 + +#damage dealing +@export var meleeDamage:int = 10 +@export var rangeDamage:int = 0 diff --git a/scripts/rscs/characterstats.gd.uid b/scripts/rscs/characterstats.gd.uid new file mode 100644 index 0000000..4f7dd85 --- /dev/null +++ b/scripts/rscs/characterstats.gd.uid @@ -0,0 +1 @@ +uid://dketxenj4lhi2 diff --git a/scripts/rscs/slimeStats.tres b/scripts/rscs/slimeStats.tres new file mode 100644 index 0000000..300c580 --- /dev/null +++ b/scripts/rscs/slimeStats.tres @@ -0,0 +1,12 @@ +[gd_resource type="Resource" script_class="CharacterStats" load_steps=2 format=3 uid="uid://biwt82n31llbp"] + +[ext_resource type="Script" uid="uid://dketxenj4lhi2" path="res://scripts/rscs/characterstats.gd" id="1_ppipo"] + +[resource] +script = ExtResource("1_ppipo") +health = 100 +max_health = 100 +starting_health = 100 +meleeDamage = 100 +rangeDamage = 0 +metadata/_custom_type_script = "uid://dketxenj4lhi2" diff --git a/scripts/scene_manager.gd b/scripts/scene_manager.gd index e12fca3..f0be2b6 100644 --- a/scripts/scene_manager.gd +++ b/scripts/scene_manager.gd @@ -1,20 +1,49 @@ class_name SCENEMANAGER extends Node2D const bulletscn = preload("res://Scenes/bullet.tscn") -@onready var game: Node2D = $".." @onready var triggers: Node2D = $"../Triggers" @onready var coins: Node2D = $"../Coins" +@onready var enemies: Node2D = $"../enemies" + + func _ready() -> void: + Gamecontroller.reset() + + + if triggers: for obj in triggers.get_children(): if obj is Trigger: - obj.areaTriggerSignal.connect(game._on_trigger) + obj.areaTriggerSignal.connect(Gamecontroller._on_trigger) if coins: - for obj in coins.get_children(): - if obj is coin: - obj.coincollectedsignal.connect(game.coincollected) + Updatecoins() + if enemies: + updateEnemies() + + Gamecontroller.destroySignal.connect(destroy) + Gamecontroller.levelChangeSignal.connect(changeScene) + +func updateEnemies(): + for obj in enemies.get_children(): + if obj is Slime: + if not obj.playerDamageSignal.is_connected(Gamecontroller.playerAttacked): + obj.playerDamageSignal.connect(Gamecontroller.playerAttacked) + +func Updatecoins(): + var coincount = 0 + for obj in coins.get_children(): + if obj is Coin: + if not obj.coincollectedsignal.is_connected(Gamecontroller.coincollected): + obj.coincollectedsignal.connect(Gamecontroller.coincollected) + print("hooked up") + #connect tree exit + if not obj.tree_exited.is_connected(Updatecoins): + obj.tree_exited.connect(Updatecoins) + coincount +=1 + Gamecontroller.totalcoincount(coincount) + var bullets: Array[Bullet] = [] const MAX_BULLETS = 10 @@ -25,7 +54,7 @@ func bulletFactory() -> Bullet: if len(bullets) < MAX_BULLETS: # create new bujllet var b = bulletscn.instantiate() - b.bulletDamageSignal.connect(game.bulletDamage) + b.bulletDamageSignal.connect(Gamecontroller.bulletDamage) add_child(b) bullets.append(b) return b @@ -44,3 +73,9 @@ func makeBullet(pos: Transform2D, dir: int) -> Node2D: b.setSpeed(dir * 700) return b +func destroy(body): + body.queue_free() + print("destroy") + +func changeScene(level): + get_tree().call_deferred("change_scene_to_file", level) diff --git a/scripts/slime.gd b/scripts/slime.gd new file mode 100644 index 0000000..b85ff36 --- /dev/null +++ b/scripts/slime.gd @@ -0,0 +1,37 @@ +class_name Slime extends Area2D +@onready var slime_graphic: AnimatedSprite2D = $SlimeGraphic +@onready var right_cast: RayCast2D = $"right cast" +@onready var left_cast: RayCast2D = $"left cast" +@onready var left_down_cast: RayCast2D = $"left down cast" +@onready var right_down_cast: RayCast2D = $"right down cast" + +var speed:int = 100 +var direction = 1 + +signal playerDamageSignal(body, slime) + +# Called when the node enters the scene tree for the first time. +func _ready() -> void: + pass # Replace with function body. + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta: float) -> void: + position.x += direction * speed * delta + if not right_down_cast.is_colliding(): + direction = -1 + if not left_down_cast.is_colliding(): + direction = 1 + if left_cast.is_colliding() && direction == -1: + direction = 1 + if right_cast.is_colliding() && direction == 1: + direction = -1 + + slime_graphic.flip_h = direction == -1 + + + +func _on_body_entered(body: Node2D) -> void: + if body is Player: + print("slime attack") + playerDamageSignal.emit(body, self) diff --git a/scripts/slime.gd.uid b/scripts/slime.gd.uid new file mode 100644 index 0000000..83306ec --- /dev/null +++ b/scripts/slime.gd.uid @@ -0,0 +1 @@ +uid://da1ki5gcro7rb