From 27492663fd577430dd532cb125ed9abc814d106f Mon Sep 17 00:00:00 2001 From: "Bung1r (Benny)" <144744252+bung1r@users.noreply.github.com> Date: Sat, 28 Feb 2026 16:09:53 -0800 Subject: [PATCH 1/4] Added a real ability framework Pretty cool, right? --- Ability/OtherAbilities/sprint_ability.gd | 14 ++++++++ Ability/OtherAbilities/sprint_ability.gd.uid | 1 + Ability/ability.gd | 38 ++++++++++++++++++++ Ability/ability.gd.uid | 1 + Ability/ability_logic.gd | 14 ++++++++ Ability/ability_logic.gd.uid | 1 + Base/Power_up.tscn | 6 ++-- Base/character_stats.gd | 8 +++++ Base/character_stats.gd.uid | 1 + Base/stats_logic.gd | 19 ++++++++++ Base/stats_logic.gd.uid | 1 + Player/Player.tscn | 16 ++++++++- Player/ability_manager.gd | 37 +++++++++++++++++++ Player/ability_manager.gd.uid | 1 + project.godot | 1 + 15 files changed, 154 insertions(+), 5 deletions(-) create mode 100644 Ability/OtherAbilities/sprint_ability.gd create mode 100644 Ability/OtherAbilities/sprint_ability.gd.uid create mode 100644 Ability/ability.gd create mode 100644 Ability/ability.gd.uid create mode 100644 Ability/ability_logic.gd create mode 100644 Ability/ability_logic.gd.uid create mode 100644 Base/character_stats.gd create mode 100644 Base/character_stats.gd.uid create mode 100644 Base/stats_logic.gd create mode 100644 Base/stats_logic.gd.uid create mode 100644 Player/ability_manager.gd create mode 100644 Player/ability_manager.gd.uid diff --git a/Ability/OtherAbilities/sprint_ability.gd b/Ability/OtherAbilities/sprint_ability.gd new file mode 100644 index 0000000..17f7dcf --- /dev/null +++ b/Ability/OtherAbilities/sprint_ability.gd @@ -0,0 +1,14 @@ +extends AbilityLogic + +func use(user): + #if (ability_active == false): return + #ability_active = true + user.speed_multiplier = 1.5 + (data.level * 0.1) + +func while_use(user): + data.add_exp(1) + +func stop_use(user): + #ability_active = false + user.speed_multiplier = 1 + diff --git a/Ability/OtherAbilities/sprint_ability.gd.uid b/Ability/OtherAbilities/sprint_ability.gd.uid new file mode 100644 index 0000000..a4546d6 --- /dev/null +++ b/Ability/OtherAbilities/sprint_ability.gd.uid @@ -0,0 +1 @@ +uid://bym661bu8r72n diff --git a/Ability/ability.gd b/Ability/ability.gd new file mode 100644 index 0000000..3b77451 --- /dev/null +++ b/Ability/ability.gd @@ -0,0 +1,38 @@ + +extends Resource +class_name AbilityData + +@export var name: String +@export var base_damage := 10.0 +@export var cooldown := 0.5 +@export var consumption := 10.0 # IS IT STAMINA??? I DONT KNOW I FORGOT TS GAME IS DOOMED BRO +@export var hp_consumption := 0.0 + +@export var level := 1 +@export var exp := 0.0 +@export var starting_exp := 100.0 +@export var exp_scaling := 100.0 # +100 exp needed for every additional level +@export var exp_to_level := 100.0 + +func get_damage(): + return base_damage * level + +func add_exp(amount): + exp += amount + calc_level() + +func calc_level(): # calc is short for calculator by the way + while (exp >= exp_to_level): + exp -= exp_to_level + level += 1 + exp_to_level = level * exp_scaling + + +# 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: + pass diff --git a/Ability/ability.gd.uid b/Ability/ability.gd.uid new file mode 100644 index 0000000..8e6cc52 --- /dev/null +++ b/Ability/ability.gd.uid @@ -0,0 +1 @@ +uid://cdrbhji2r6eti diff --git a/Ability/ability_logic.gd b/Ability/ability_logic.gd new file mode 100644 index 0000000..8f1de02 --- /dev/null +++ b/Ability/ability_logic.gd @@ -0,0 +1,14 @@ +extends Node +class_name AbilityLogic + +@export var data: AbilityData +# make sure to override this. +func use(user): + pass + +func stop_use(user): + pass + +func while_use(user, delta: float): + pass + diff --git a/Ability/ability_logic.gd.uid b/Ability/ability_logic.gd.uid new file mode 100644 index 0000000..98532e7 --- /dev/null +++ b/Ability/ability_logic.gd.uid @@ -0,0 +1 @@ +uid://c14dw11f4rkhi diff --git a/Base/Power_up.tscn b/Base/Power_up.tscn index 5187eed..745b948 100644 --- a/Base/Power_up.tscn +++ b/Base/Power_up.tscn @@ -1,7 +1,6 @@ -[gd_scene load_steps=4 format=3 uid="uid://dtn477wyv7hn7"] +[gd_scene load_steps=3 format=3 uid="uid://dtn477wyv7hn7"] -[ext_resource type="Texture2D" uid="uid://e306v7nsc7us" path="res://Projectiles/icon.svg" id="1_ci57c"] -[ext_resource type="Script" path="res://Base/power_up.gd" id="1_g3h1e"] +[ext_resource type="Script" uid="uid://cknqloq6salyv" path="res://Base/power_up.gd" id="1_g3h1e"] [sub_resource type="RectangleShape2D" id="RectangleShape2D_qtu7q"] size = Vector2(112, 112) @@ -15,7 +14,6 @@ metadata/_edit_group_ = true [node name="Sprite2D" type="Sprite2D" parent="."] use_parent_material = true -texture = ExtResource("1_ci57c") [node name="CollisionShape2D" type="CollisionShape2D" parent="."] shape = SubResource("RectangleShape2D_qtu7q") diff --git a/Base/character_stats.gd b/Base/character_stats.gd new file mode 100644 index 0000000..1794abc --- /dev/null +++ b/Base/character_stats.gd @@ -0,0 +1,8 @@ +extends Resource +class_name CharacterStats + +@export var max_health := 100 +@export var max_stamina := 100 # lowkey don't know if we're using stamin or not :sob: +@export var attack_power := 10 +@export var defense := 2 +@export var speed := 200 diff --git a/Base/character_stats.gd.uid b/Base/character_stats.gd.uid new file mode 100644 index 0000000..df60664 --- /dev/null +++ b/Base/character_stats.gd.uid @@ -0,0 +1 @@ +uid://cpsdfxvk7n8cb diff --git a/Base/stats_logic.gd b/Base/stats_logic.gd new file mode 100644 index 0000000..81d3975 --- /dev/null +++ b/Base/stats_logic.gd @@ -0,0 +1,19 @@ +extends Node +@export var data : CharacterStats +var health := 0 +var stamina := 0 +var speed := 0 + +# Called when the node enters the scene tree for the first time. +func _ready() -> void: + health = data.max_health + speed = data.speed + stamina = data.max_stamina + +func take_damage(amount): + health -= amount + if health <= 0: + die() + +func die(): + get_parent().queue_free() diff --git a/Base/stats_logic.gd.uid b/Base/stats_logic.gd.uid new file mode 100644 index 0000000..158c7a1 --- /dev/null +++ b/Base/stats_logic.gd.uid @@ -0,0 +1 @@ +uid://dok7riwyll54e diff --git a/Player/Player.tscn b/Player/Player.tscn index 55f3cd7..968ba57 100644 --- a/Player/Player.tscn +++ b/Player/Player.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=23 format=3 uid="uid://d2l1oof6loxxe"] +[gd_scene load_steps=27 format=3 uid="uid://d2l1oof6loxxe"] [ext_resource type="Script" uid="uid://css8fudk4wvua" path="res://Base/finite_state_machine.gd" id="1_6ddrn"] [ext_resource type="Script" uid="uid://d0hh4ylil2c42" path="res://Player/player.gd" id="1_62trq"] @@ -6,7 +6,10 @@ [ext_resource type="Resource" uid="uid://dvyc820lqfjrx" path="res://Player/DefaultPlayerCharacter.tres" id="3_vcj7w"] [ext_resource type="Texture2D" uid="uid://cjooboer2dbvg" path="res://Player/test_attack-Sheet.png" id="6_1m13p"] [ext_resource type="Script" uid="uid://c2e8n7ejelcjv" path="res://Player/player_movement.gd" id="8_ip4se"] +[ext_resource type="Script" uid="uid://dok7riwyll54e" path="res://Base/stats_logic.gd" id="8_s1rgi"] [ext_resource type="Script" uid="uid://b1ogharj5fnex" path="res://Player/player_default.gd" id="8_u63yy"] +[ext_resource type="Script" uid="uid://cpsdfxvk7n8cb" path="res://Base/character_stats.gd" id="9_j23h2"] +[ext_resource type="Script" uid="uid://g8nsp75yfies" path="res://Player/ability_manager.gd" id="10_0j2ni"] [sub_resource type="AtlasTexture" id="AtlasTexture_3kltw"] atlas = ExtResource("3_lnawk") @@ -181,6 +184,10 @@ _data = { &"walk": SubResource("Animation_13m0h") } +[sub_resource type="Resource" id="Resource_0j2ni"] +script = ExtResource("9_j23h2") +metadata/_custom_type_script = "uid://cpsdfxvk7n8cb" + [node name="Player" type="CharacterBody2D" groups=["Bodies", "Player"]] collision_layer = 2 collision_mask = 5 @@ -238,3 +245,10 @@ script = ExtResource("8_ip4se") actor = NodePath("../..") animator = NodePath("../../AnimatedSprite2D") animation = NodePath("../../AnimationPlayer") + +[node name="Stats" type="Node" parent="."] +script = ExtResource("8_s1rgi") +data = SubResource("Resource_0j2ni") + +[node name="AbilityManager" type="Node" parent="."] +script = ExtResource("10_0j2ni") diff --git a/Player/ability_manager.gd b/Player/ability_manager.gd new file mode 100644 index 0000000..2dd0dee --- /dev/null +++ b/Player/ability_manager.gd @@ -0,0 +1,37 @@ +extends Node + +@export var slottedAbilities: Array[AbilityLogic] = [] +var abilitiesInfo := {} + +@export var movementAbility : AbilityLogic # will probably only be sprinting by the way lol. + +# Called when the node enters the scene tree for the first time. +func _ready() -> void: + for ability in slottedAbilities: + abilitiesInfo.set(ability, { + Ability = ability, + Active = false, + Cooldown = 0, + }) + +func use_ability(ability_logic: AbilityLogic): + if abilitiesInfo[ability_logic].Cooldown > 0: return + var abilityInfo = abilitiesInfo[ability_logic] + abilityInfo.Active = true + abilityInfo.Cooldown = abilitiesInfo.Ability.Data.Cooldown + abilitiesInfo.Ability.use(get_parent()) + +func stop_using_ability(ability_logic: AbilityLogic): + var abilityInfo = abilitiesInfo[ability_logic] + abilityInfo.Active = false + abilityInfo.Cooldown = abilitiesInfo.Ability.Data.Cooldown + abilitiesInfo.Ability.stop_use(get_parent()) + +func _process(delta): + for values in abilitiesInfo: + values.Cooldown = max(0, values.Cooldown - delta) + if (values.Active): + values.Ability.while_use(get_parent(), delta) + + + diff --git a/Player/ability_manager.gd.uid b/Player/ability_manager.gd.uid new file mode 100644 index 0000000..97f9012 --- /dev/null +++ b/Player/ability_manager.gd.uid @@ -0,0 +1 @@ +uid://g8nsp75yfies diff --git a/project.godot b/project.godot index c8b9bd9..2447b05 100644 --- a/project.godot +++ b/project.godot @@ -26,6 +26,7 @@ window/stretch/mode="canvas_items" [file_customization] folder_colors={ +"res://Ability/": "orange", "res://Base/": "red", "res://Misc/": "yellow", "res://Player/": "blue" From 836b51aa58ed56b24d15ce1c75ce34d543aad031 Mon Sep 17 00:00:00 2001 From: "Bung1r (Benny)" <144744252+bung1r@users.noreply.github.com> Date: Wed, 4 Mar 2026 17:16:03 -0800 Subject: [PATCH 2/4] Completed Ability Frameworks Sprint + Sample ability added They can level up! --- Ability/OtherAbilities/practice_ability.gd | 13 +++++++ .../OtherAbilities/practice_ability.gd.uid | 1 + Ability/OtherAbilities/practice_ability.tres | 15 ++++++++ Ability/OtherAbilities/sprint_ability.gd | 12 +++---- Ability/OtherAbilities/sprint_ability.tres | 14 ++++++++ Ability/ability.gd | 1 + Ability/ability_logic.gd | 2 +- Base/character_stats.gd | 8 ----- Base/character_stats.gd.uid | 1 - Base/stats_logic.gd | 19 ---------- Base/stats_logic.gd.uid | 1 - Player/Player.tscn | 25 ++++++------- Player/player.gd | 7 ++++ Player/player_ability.gd | 36 +++++++++++++++++++ Player/player_ability.gd.uid | 1 + Player/player_default.gd | 10 +++++- Player/player_movement.gd | 23 ++++++++++-- project.godot | 10 ++++++ 18 files changed, 145 insertions(+), 54 deletions(-) create mode 100644 Ability/OtherAbilities/practice_ability.gd create mode 100644 Ability/OtherAbilities/practice_ability.gd.uid create mode 100644 Ability/OtherAbilities/practice_ability.tres create mode 100644 Ability/OtherAbilities/sprint_ability.tres delete mode 100644 Base/character_stats.gd delete mode 100644 Base/character_stats.gd.uid delete mode 100644 Base/stats_logic.gd delete mode 100644 Base/stats_logic.gd.uid create mode 100644 Player/player_ability.gd create mode 100644 Player/player_ability.gd.uid diff --git a/Ability/OtherAbilities/practice_ability.gd b/Ability/OtherAbilities/practice_ability.gd new file mode 100644 index 0000000..6433032 --- /dev/null +++ b/Ability/OtherAbilities/practice_ability.gd @@ -0,0 +1,13 @@ +extends AbilityLogic + +func use(user): + print(data.name + " has started.") + data.add_exp(50) + pass + +func stop_use(user): + print(data.name+" has stopped.") + pass + +func while_use(user, delta: float): + pass diff --git a/Ability/OtherAbilities/practice_ability.gd.uid b/Ability/OtherAbilities/practice_ability.gd.uid new file mode 100644 index 0000000..3f0502b --- /dev/null +++ b/Ability/OtherAbilities/practice_ability.gd.uid @@ -0,0 +1 @@ +uid://ckychlwohd8nf diff --git a/Ability/OtherAbilities/practice_ability.tres b/Ability/OtherAbilities/practice_ability.tres new file mode 100644 index 0000000..a4d305e --- /dev/null +++ b/Ability/OtherAbilities/practice_ability.tres @@ -0,0 +1,15 @@ +[gd_resource type="Resource" load_steps=4 format=3 uid="uid://c4sd6smpa721x"] + +[ext_resource type="Script" uid="uid://cdrbhji2r6eti" path="res://Ability/ability.gd" id="1_70usm"] +[ext_resource type="Script" uid="uid://ckychlwohd8nf" path="res://Ability/OtherAbilities/practice_ability.gd" id="1_i4u7c"] + +[sub_resource type="Resource" id="Resource_itdyd"] +script = ExtResource("1_70usm") +name = "Practice Ability" +base_damage = 1000.0 +metadata/_custom_type_script = "uid://cdrbhji2r6eti" + +[resource] +script = ExtResource("1_i4u7c") +data = SubResource("Resource_itdyd") +metadata/_custom_type_script = "uid://c14dw11f4rkhi" diff --git a/Ability/OtherAbilities/sprint_ability.gd b/Ability/OtherAbilities/sprint_ability.gd index 17f7dcf..488919c 100644 --- a/Ability/OtherAbilities/sprint_ability.gd +++ b/Ability/OtherAbilities/sprint_ability.gd @@ -1,14 +1,12 @@ extends AbilityLogic func use(user): - #if (ability_active == false): return - #ability_active = true - user.speed_multiplier = 1.5 + (data.level * 0.1) + print("started sprinting") -func while_use(user): - data.add_exp(1) +func while_use(user, delta): + data.add_exp(20 * delta) func stop_use(user): - #ability_active = false - user.speed_multiplier = 1 + print("stopped sprinting") + pass diff --git a/Ability/OtherAbilities/sprint_ability.tres b/Ability/OtherAbilities/sprint_ability.tres new file mode 100644 index 0000000..76864cb --- /dev/null +++ b/Ability/OtherAbilities/sprint_ability.tres @@ -0,0 +1,14 @@ +[gd_resource type="Resource" load_steps=4 format=3 uid="uid://wwa6n3kvae7i"] + +[ext_resource type="Script" uid="uid://cdrbhji2r6eti" path="res://Ability/ability.gd" id="1_80pgq"] +[ext_resource type="Script" uid="uid://bym661bu8r72n" path="res://Ability/OtherAbilities/sprint_ability.gd" id="2_0q0tn"] + +[sub_resource type="Resource" id="Resource_t24na"] +script = ExtResource("1_80pgq") +name = "Sprint" +metadata/_custom_type_script = "uid://cdrbhji2r6eti" + +[resource] +script = ExtResource("2_0q0tn") +data = SubResource("Resource_t24na") +metadata/_custom_type_script = "uid://c14dw11f4rkhi" diff --git a/Ability/ability.gd b/Ability/ability.gd index 3b77451..ec62e92 100644 --- a/Ability/ability.gd +++ b/Ability/ability.gd @@ -26,6 +26,7 @@ func calc_level(): # calc is short for calculator by the way exp -= exp_to_level level += 1 exp_to_level = level * exp_scaling + print(name+" has leveled up to Level "+str(level)) # Called when the node enters the scene tree for the first time. diff --git a/Ability/ability_logic.gd b/Ability/ability_logic.gd index 8f1de02..4fe81e7 100644 --- a/Ability/ability_logic.gd +++ b/Ability/ability_logic.gd @@ -1,4 +1,4 @@ -extends Node +extends Resource class_name AbilityLogic @export var data: AbilityData diff --git a/Base/character_stats.gd b/Base/character_stats.gd deleted file mode 100644 index 1794abc..0000000 --- a/Base/character_stats.gd +++ /dev/null @@ -1,8 +0,0 @@ -extends Resource -class_name CharacterStats - -@export var max_health := 100 -@export var max_stamina := 100 # lowkey don't know if we're using stamin or not :sob: -@export var attack_power := 10 -@export var defense := 2 -@export var speed := 200 diff --git a/Base/character_stats.gd.uid b/Base/character_stats.gd.uid deleted file mode 100644 index df60664..0000000 --- a/Base/character_stats.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://cpsdfxvk7n8cb diff --git a/Base/stats_logic.gd b/Base/stats_logic.gd deleted file mode 100644 index 81d3975..0000000 --- a/Base/stats_logic.gd +++ /dev/null @@ -1,19 +0,0 @@ -extends Node -@export var data : CharacterStats -var health := 0 -var stamina := 0 -var speed := 0 - -# Called when the node enters the scene tree for the first time. -func _ready() -> void: - health = data.max_health - speed = data.speed - stamina = data.max_stamina - -func take_damage(amount): - health -= amount - if health <= 0: - die() - -func die(): - get_parent().queue_free() diff --git a/Base/stats_logic.gd.uid b/Base/stats_logic.gd.uid deleted file mode 100644 index 158c7a1..0000000 --- a/Base/stats_logic.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://dok7riwyll54e diff --git a/Player/Player.tscn b/Player/Player.tscn index 968ba57..dbad64b 100644 --- a/Player/Player.tscn +++ b/Player/Player.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=27 format=3 uid="uid://d2l1oof6loxxe"] +[gd_scene load_steps=26 format=3 uid="uid://d2l1oof6loxxe"] [ext_resource type="Script" uid="uid://css8fudk4wvua" path="res://Base/finite_state_machine.gd" id="1_6ddrn"] [ext_resource type="Script" uid="uid://d0hh4ylil2c42" path="res://Player/player.gd" id="1_62trq"] @@ -6,10 +6,10 @@ [ext_resource type="Resource" uid="uid://dvyc820lqfjrx" path="res://Player/DefaultPlayerCharacter.tres" id="3_vcj7w"] [ext_resource type="Texture2D" uid="uid://cjooboer2dbvg" path="res://Player/test_attack-Sheet.png" id="6_1m13p"] [ext_resource type="Script" uid="uid://c2e8n7ejelcjv" path="res://Player/player_movement.gd" id="8_ip4se"] -[ext_resource type="Script" uid="uid://dok7riwyll54e" path="res://Base/stats_logic.gd" id="8_s1rgi"] +[ext_resource type="Resource" uid="uid://wwa6n3kvae7i" path="res://Ability/OtherAbilities/sprint_ability.tres" id="8_p7tob"] [ext_resource type="Script" uid="uid://b1ogharj5fnex" path="res://Player/player_default.gd" id="8_u63yy"] -[ext_resource type="Script" uid="uid://cpsdfxvk7n8cb" path="res://Base/character_stats.gd" id="9_j23h2"] -[ext_resource type="Script" uid="uid://g8nsp75yfies" path="res://Player/ability_manager.gd" id="10_0j2ni"] +[ext_resource type="Script" uid="uid://b5pm23s8n8nke" path="res://Player/player_ability.gd" id="8_v0k0e"] +[ext_resource type="Resource" uid="uid://c4sd6smpa721x" path="res://Ability/OtherAbilities/practice_ability.tres" id="9_5wa8t"] [sub_resource type="AtlasTexture" id="AtlasTexture_3kltw"] atlas = ExtResource("3_lnawk") @@ -184,10 +184,6 @@ _data = { &"walk": SubResource("Animation_13m0h") } -[sub_resource type="Resource" id="Resource_0j2ni"] -script = ExtResource("9_j23h2") -metadata/_custom_type_script = "uid://cpsdfxvk7n8cb" - [node name="Player" type="CharacterBody2D" groups=["Bodies", "Player"]] collision_layer = 2 collision_mask = 5 @@ -245,10 +241,11 @@ script = ExtResource("8_ip4se") actor = NodePath("../..") animator = NodePath("../../AnimatedSprite2D") animation = NodePath("../../AnimationPlayer") +movementAbility = ExtResource("8_p7tob") -[node name="Stats" type="Node" parent="."] -script = ExtResource("8_s1rgi") -data = SubResource("Resource_0j2ni") - -[node name="AbilityManager" type="Node" parent="."] -script = ExtResource("10_0j2ni") +[node name="PlayerAbility" type="Node" parent="FiniteStateMachine" node_paths=PackedStringArray("actor", "animator", "animation")] +script = ExtResource("8_v0k0e") +actor = NodePath("../..") +animator = NodePath("../../AnimatedSprite2D") +animation = NodePath("../../AnimationPlayer") +ability = ExtResource("9_5wa8t") diff --git a/Player/player.gd b/Player/player.gd index 5762115..0a1c3de 100644 --- a/Player/player.gd +++ b/Player/player.gd @@ -18,17 +18,24 @@ var example : bool = true @onready var fsm: FiniteStateMachine = $FiniteStateMachine @onready var player_movement: PlayerMovement = $FiniteStateMachine/PlayerMovement @onready var player_default: PlayerDefault = $FiniteStateMachine/PlayerDefault +@onready var player_ability : PlayerAbility = $FiniteStateMachine/PlayerAbility func _ready() -> void: # FSM Signals default_signals() movement_signals() + ability_signals() func movement_signals() -> void: player_movement.default.connect(fsm.change_state.bind(player_default)) + player_movement.ability.connect(fsm.change_state.bind(player_ability)) func default_signals() -> void: player_default.walk.connect(fsm.change_state.bind(player_movement)) + player_default.ability.connect(fsm.change_state.bind(player_ability)) + +func ability_signals() -> void: + player_ability.default.connect(fsm.change_state.bind(player_default)) func _physics_process(_delta: float) -> void: move_and_slide() diff --git a/Player/player_ability.gd b/Player/player_ability.gd new file mode 100644 index 0000000..af7db4f --- /dev/null +++ b/Player/player_ability.gd @@ -0,0 +1,36 @@ +extends State +class_name PlayerAbility + +@export var actor: Player +@export var animator: AnimatedSprite2D +@export var animation: AnimationPlayer + +@export var ability : AbilityLogic + +signal default + +var timeStarted : float + +# Called when the node enters the scene tree for the first time. +func _ready() -> void: + set_physics_process(false) + set_process(false) + +func _enter_state() -> void: + set_physics_process(true) + set_process(true) + timeStarted = Time.get_ticks_msec() + ability.use(actor) + +func _exit_state() -> void: + set_process(false) + set_physics_process(false) + ability.stop_use(actor) + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta: float) -> void: + if (Time.get_ticks_msec() - timeStarted > ability.data.cooldown * 1000): + default.emit() + return + ability.while_use(actor, delta) + pass diff --git a/Player/player_ability.gd.uid b/Player/player_ability.gd.uid new file mode 100644 index 0000000..f0fc15d --- /dev/null +++ b/Player/player_ability.gd.uid @@ -0,0 +1 @@ +uid://b5pm23s8n8nke diff --git a/Player/player_default.gd b/Player/player_default.gd index 485a5fe..8e5f296 100644 --- a/Player/player_default.gd +++ b/Player/player_default.gd @@ -2,6 +2,7 @@ class_name PlayerDefault extends State signal walk +signal ability @export var actor: Player @export var animation: AnimationPlayer @@ -21,10 +22,17 @@ func _physics_process(delta: float) -> void: var input_axis_y := Input.get_axis("move_up", "move_down") handle_friction_x(input_axis_x,delta) handle_friction_y(input_axis_y,delta) + animator.play("idle") # Cases - if (input_axis_x != 0 or input_axis_y != 0): walk.emit() + if (input_axis_x != 0 or input_axis_y != 0): + walk.emit() + return + + if (Input.is_action_just_pressed("ability1")): + ability.emit() + return func handle_friction_x(input_axis: float, delta: float) -> void: if (input_axis == 0): diff --git a/Player/player_movement.gd b/Player/player_movement.gd index dabd55f..85cc77b 100644 --- a/Player/player_movement.gd +++ b/Player/player_movement.gd @@ -4,8 +4,12 @@ extends State @export var actor: Player @export var animator: AnimatedSprite2D @export var animation: AnimationPlayer +@export var movementAbility : AbilityLogic signal default +signal ability + +var speedMultiplier : float = 1 func _ready() -> void: set_physics_process(false) @@ -22,6 +26,7 @@ func _exit_state() -> void: func _physics_process(delta: float) -> void: var input_axis_x := Input.get_axis("move_left", "move_right") var input_axis_y := Input.get_axis("move_up", "move_down") + handle_sprint(delta) handle_acceleration_x(input_axis_x,delta) handle_acceleration_y(input_axis_y,delta) handle_friction_x(input_axis_x,delta) @@ -34,11 +39,11 @@ func _process(_delta: float) -> void: func handle_acceleration_x(input_axis: float, delta: float) -> void: if (input_axis != 0): - actor.velocity.x = move_toward(actor.velocity.x, input_axis * actor.character_data.speed, actor.character_data.acceleration * delta) + actor.velocity.x = move_toward(actor.velocity.x, input_axis * actor.character_data.speed * speedMultiplier, actor.character_data.acceleration * delta) func handle_acceleration_y(input_axis: float, delta: float) -> void: if (input_axis != 0): - actor.velocity.y = move_toward(actor.velocity.y, input_axis * actor.character_data.speed, actor.character_data.acceleration * delta) + actor.velocity.y = move_toward(actor.velocity.y, input_axis * actor.character_data.speed * speedMultiplier, actor.character_data.acceleration * delta) func handle_friction_x(input_axis: float, delta: float) -> void: if (input_axis == 0): @@ -48,5 +53,19 @@ func handle_friction_y(input_axis: float, delta: float) -> void: if (input_axis == 0): actor.velocity.y = move_toward(actor.velocity.y, 0, actor.character_data.friction * delta) +func handle_sprint(delta : float): + if (Input.is_action_just_pressed("sprint")): + movementAbility.use(actor) + + if (Input.is_action_pressed("sprint")): + speedMultiplier = 1.3 + movementAbility.while_use(actor, delta) + else: + speedMultiplier = 1 + + if (Input.is_action_just_released("sprint")): + speedMultiplier = 1 + movementAbility.stop_use(actor) + func update_animation() -> void: animator.play("walk") diff --git a/project.godot b/project.godot index 2447b05..5dc332a 100644 --- a/project.godot +++ b/project.godot @@ -58,6 +58,16 @@ move_down={ , Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194322,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) ] } +ability1={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":81,"key_label":0,"unicode":113,"location":0,"echo":false,"script":null) +] +} +sprint={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194325,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} [rendering] From c20a33019cf573cd031391de0e8e7fc62c0de359 Mon Sep 17 00:00:00 2001 From: "Bung1r (Benny)" <144744252+bung1r@users.noreply.github.com> Date: Wed, 22 Apr 2026 17:05:18 -0700 Subject: [PATCH 3/4] enemy + ability (Press Q) i'm so gool. there's an enemy --- .../AbilityTemplateScripts/melee_ability.gd | 24 +++++++ .../melee_ability.gd.uid | 1 + .../practice_ability.gd | 0 .../practice_ability.gd.uid | 0 .../sprint_ability.gd | 0 .../sprint_ability.gd.uid | 0 Ability/AbilityTres/melee_big_hit.tres | 17 +++++ .../practice_ability.tres | 2 +- .../sprint_ability.tres | 2 +- Ability/ability.gd | 6 ++ Ability/ability_logic.gd | 4 ++ Ability/hitbox.gd | 32 ++++++++++ Ability/hitbox.gd.uid | 1 + Ability/hitbox.tscn | 20 ++++++ Enemy/Enemy.tscn | 60 ++++++++++++++++++ Enemy/enemy.gd | 32 ++++++++++ Enemy/enemy.gd.uid | 1 + Enemy/veriglius.jpg | Bin 0 -> 6174 bytes Enemy/veriglius.jpg.import | 40 ++++++++++++ Heals/Heart.tscn | 2 +- Main.tscn | 13 +++- Main.tscn3245094987.tmp | 35 ++++++++++ Misc/gallopon.jpg | Bin 0 -> 9651 bytes Misc/gallopon.jpg.import | 40 ++++++++++++ Player/Player.tscn | 17 ++--- Player/player_ability.gd | 10 +++ project.godot | 2 +- 27 files changed, 348 insertions(+), 13 deletions(-) create mode 100644 Ability/AbilityTemplateScripts/melee_ability.gd create mode 100644 Ability/AbilityTemplateScripts/melee_ability.gd.uid rename Ability/{OtherAbilities => AbilityTemplateScripts}/practice_ability.gd (100%) rename Ability/{OtherAbilities => AbilityTemplateScripts}/practice_ability.gd.uid (100%) rename Ability/{OtherAbilities => AbilityTemplateScripts}/sprint_ability.gd (100%) rename Ability/{OtherAbilities => AbilityTemplateScripts}/sprint_ability.gd.uid (100%) create mode 100644 Ability/AbilityTres/melee_big_hit.tres rename Ability/{OtherAbilities => AbilityTres}/practice_ability.tres (89%) rename Ability/{OtherAbilities => AbilityTres}/sprint_ability.tres (88%) create mode 100644 Ability/hitbox.gd create mode 100644 Ability/hitbox.gd.uid create mode 100644 Ability/hitbox.tscn create mode 100644 Enemy/Enemy.tscn create mode 100644 Enemy/enemy.gd create mode 100644 Enemy/enemy.gd.uid create mode 100644 Enemy/veriglius.jpg create mode 100644 Enemy/veriglius.jpg.import create mode 100644 Main.tscn3245094987.tmp create mode 100644 Misc/gallopon.jpg create mode 100644 Misc/gallopon.jpg.import diff --git a/Ability/AbilityTemplateScripts/melee_ability.gd b/Ability/AbilityTemplateScripts/melee_ability.gd new file mode 100644 index 0000000..30eba44 --- /dev/null +++ b/Ability/AbilityTemplateScripts/melee_ability.gd @@ -0,0 +1,24 @@ +extends AbilityLogic + +var HitboxScene = preload("res://Ability/hitbox.tscn") + + +func use(user): + if (data.melee_hitbox_enable): + melee_attack(user) + data.add_exp(50) + pass + +func stop_use(user): + print(data.name+" has stopped.") + pass + +func while_use(user, delta: float): + pass + + +func melee_attack(user): + var hitbox = HitboxScene.instantiate() + hitbox.initHitbox(data, user) + print("you melee attacked, what???") + diff --git a/Ability/AbilityTemplateScripts/melee_ability.gd.uid b/Ability/AbilityTemplateScripts/melee_ability.gd.uid new file mode 100644 index 0000000..bc06d08 --- /dev/null +++ b/Ability/AbilityTemplateScripts/melee_ability.gd.uid @@ -0,0 +1 @@ +uid://dah4filbmo0p7 diff --git a/Ability/OtherAbilities/practice_ability.gd b/Ability/AbilityTemplateScripts/practice_ability.gd similarity index 100% rename from Ability/OtherAbilities/practice_ability.gd rename to Ability/AbilityTemplateScripts/practice_ability.gd diff --git a/Ability/OtherAbilities/practice_ability.gd.uid b/Ability/AbilityTemplateScripts/practice_ability.gd.uid similarity index 100% rename from Ability/OtherAbilities/practice_ability.gd.uid rename to Ability/AbilityTemplateScripts/practice_ability.gd.uid diff --git a/Ability/OtherAbilities/sprint_ability.gd b/Ability/AbilityTemplateScripts/sprint_ability.gd similarity index 100% rename from Ability/OtherAbilities/sprint_ability.gd rename to Ability/AbilityTemplateScripts/sprint_ability.gd diff --git a/Ability/OtherAbilities/sprint_ability.gd.uid b/Ability/AbilityTemplateScripts/sprint_ability.gd.uid similarity index 100% rename from Ability/OtherAbilities/sprint_ability.gd.uid rename to Ability/AbilityTemplateScripts/sprint_ability.gd.uid diff --git a/Ability/AbilityTres/melee_big_hit.tres b/Ability/AbilityTres/melee_big_hit.tres new file mode 100644 index 0000000..150d4c7 --- /dev/null +++ b/Ability/AbilityTres/melee_big_hit.tres @@ -0,0 +1,17 @@ +[gd_resource type="Resource" load_steps=4 format=3 uid="uid://r0aqeukqqt6h"] + +[ext_resource type="Script" uid="uid://cdrbhji2r6eti" path="res://Ability/ability.gd" id="1_5ocnk"] +[ext_resource type="Script" uid="uid://dah4filbmo0p7" path="res://Ability/AbilityTemplateScripts/melee_ability.gd" id="2_5ocnk"] + +[sub_resource type="Resource" id="Resource_itdyd"] +script = ExtResource("1_5ocnk") +name = "Melee Big Hit" +base_damage = 1.0 +melee_hitbox_enable = true +melee_hitbox_offset = Vector2(0, 50) +metadata/_custom_type_script = "uid://cdrbhji2r6eti" + +[resource] +script = ExtResource("2_5ocnk") +data = SubResource("Resource_itdyd") +metadata/_custom_type_script = "uid://c14dw11f4rkhi" diff --git a/Ability/OtherAbilities/practice_ability.tres b/Ability/AbilityTres/practice_ability.tres similarity index 89% rename from Ability/OtherAbilities/practice_ability.tres rename to Ability/AbilityTres/practice_ability.tres index a4d305e..a5182d1 100644 --- a/Ability/OtherAbilities/practice_ability.tres +++ b/Ability/AbilityTres/practice_ability.tres @@ -1,7 +1,7 @@ [gd_resource type="Resource" load_steps=4 format=3 uid="uid://c4sd6smpa721x"] [ext_resource type="Script" uid="uid://cdrbhji2r6eti" path="res://Ability/ability.gd" id="1_70usm"] -[ext_resource type="Script" uid="uid://ckychlwohd8nf" path="res://Ability/OtherAbilities/practice_ability.gd" id="1_i4u7c"] +[ext_resource type="Script" uid="uid://ckychlwohd8nf" path="res://Ability/AbilityTemplateScripts/practice_ability.gd" id="1_i4u7c"] [sub_resource type="Resource" id="Resource_itdyd"] script = ExtResource("1_70usm") diff --git a/Ability/OtherAbilities/sprint_ability.tres b/Ability/AbilityTres/sprint_ability.tres similarity index 88% rename from Ability/OtherAbilities/sprint_ability.tres rename to Ability/AbilityTres/sprint_ability.tres index 76864cb..94c5146 100644 --- a/Ability/OtherAbilities/sprint_ability.tres +++ b/Ability/AbilityTres/sprint_ability.tres @@ -1,7 +1,7 @@ [gd_resource type="Resource" load_steps=4 format=3 uid="uid://wwa6n3kvae7i"] [ext_resource type="Script" uid="uid://cdrbhji2r6eti" path="res://Ability/ability.gd" id="1_80pgq"] -[ext_resource type="Script" uid="uid://bym661bu8r72n" path="res://Ability/OtherAbilities/sprint_ability.gd" id="2_0q0tn"] +[ext_resource type="Script" uid="uid://bym661bu8r72n" path="res://Ability/AbilityTemplateScripts/sprint_ability.gd" id="2_0q0tn"] [sub_resource type="Resource" id="Resource_t24na"] script = ExtResource("1_80pgq") diff --git a/Ability/ability.gd b/Ability/ability.gd index ec62e92..acd919b 100644 --- a/Ability/ability.gd +++ b/Ability/ability.gd @@ -14,6 +14,12 @@ class_name AbilityData @export var exp_scaling := 100.0 # +100 exp needed for every additional level @export var exp_to_level := 100.0 +@export var melee_hitbox_enable := false +@export var melee_hitbox_size : Vector2 = Vector2(5,5) +@export var melee_hitbox_offset : Vector2 = Vector2(0,0) +@export var melee_hitbox_delay := 0.0 +@export var melee_hitbox_duration := 0.2 + func get_damage(): return base_damage * level diff --git a/Ability/ability_logic.gd b/Ability/ability_logic.gd index 4fe81e7..7480ba2 100644 --- a/Ability/ability_logic.gd +++ b/Ability/ability_logic.gd @@ -1,7 +1,10 @@ extends Resource class_name AbilityLogic + @export var data: AbilityData + + # make sure to override this. func use(user): pass @@ -12,3 +15,4 @@ func stop_use(user): func while_use(user, delta: float): pass + diff --git a/Ability/hitbox.gd b/Ability/hitbox.gd new file mode 100644 index 0000000..956b41c --- /dev/null +++ b/Ability/hitbox.gd @@ -0,0 +1,32 @@ +extends Area2D + + +# Called when the node enters the scene tree for the first time. + +var damage := 0.0; + +func initHitbox(data : AbilityData, user : CharacterBody2D): + damage = data.base_damage + + user.add_child(self) + + var mouse_pos = get_global_mouse_position() + var direction = (mouse_pos - user.global_position).normalized() + + global_position = user.global_position + direction * data.melee_hitbox_offset.length() + rotation = direction.angle() + + scale = data.melee_hitbox_size + + await get_tree().create_timer(data.melee_hitbox_delay).timeout + connect("body_entered", _on_body_entered) + await get_tree().create_timer(data.melee_hitbox_duration).timeout + + queue_free() + +func _on_body_entered(body): + if body.has_method("take_damage"): + body.take_damage(damage) + + + diff --git a/Ability/hitbox.gd.uid b/Ability/hitbox.gd.uid new file mode 100644 index 0000000..941bf6b --- /dev/null +++ b/Ability/hitbox.gd.uid @@ -0,0 +1 @@ +uid://1tluihp70q2r diff --git a/Ability/hitbox.tscn b/Ability/hitbox.tscn new file mode 100644 index 0000000..16364b3 --- /dev/null +++ b/Ability/hitbox.tscn @@ -0,0 +1,20 @@ +[gd_scene load_steps=4 format=3 uid="uid://bh8du3opop534"] + +[ext_resource type="Script" uid="uid://1tluihp70q2r" path="res://Ability/hitbox.gd" id="1_esvl6"] +[ext_resource type="Texture2D" uid="uid://llcca3vhihbv" path="res://Misc/gallopon.jpg" id="2_lcefl"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_22vse"] + +[node name="Hitbox" type="Area2D"] +collision_layer = 16 +collision_mask = 8 +script = ExtResource("1_esvl6") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource("RectangleShape2D_22vse") + +[node name="Sprite2D" type="Sprite2D" parent="."] +modulate = Color(1, 1, 1, 0.44705883) +position = Vector2(0, -3.799796e-07) +scale = Vector2(0.07272726, 0.10928961) +texture = ExtResource("2_lcefl") diff --git a/Enemy/Enemy.tscn b/Enemy/Enemy.tscn new file mode 100644 index 0000000..910ee66 --- /dev/null +++ b/Enemy/Enemy.tscn @@ -0,0 +1,60 @@ +[gd_scene load_steps=8 format=3 uid="uid://m2spfqyeopd6"] + +[ext_resource type="Script" uid="uid://btbo1qgfb7n2n" path="res://Player/health_bar.gd" id="1_3o4wt"] +[ext_resource type="Script" uid="uid://0v8h0wqe0iyt" path="res://Enemy/enemy.gd" id="1_vonkd"] +[ext_resource type="Texture2D" uid="uid://d38wbkf4k45v8" path="res://Enemy/veriglius.jpg" id="2_epr5s"] +[ext_resource type="Resource" uid="uid://dvyc820lqfjrx" path="res://Player/DefaultPlayerCharacter.tres" id="2_vso2s"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_vonkd"] +size = Vector2(10, 12) + +[sub_resource type="CircleShape2D" id="CircleShape2D_epr5s"] +radius = 3.0 + +[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_vonkd"] +radius = 5.0 +height = 12.0 + +[node name="Enemy" type="CharacterBody2D"] +collision_layer = 8 +script = ExtResource("1_vonkd") +character_data = ExtResource("2_vso2s") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource("RectangleShape2D_vonkd") + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] + +[node name="Detection" type="Node2D" parent="."] + +[node name="Damage" type="Area2D" parent="Detection"] +collision_mask = 2 + +[node name="DamageHitbox" type="CollisionShape2D" parent="Detection/Damage"] +shape = SubResource("CircleShape2D_epr5s") + +[node name="Heal" type="Area2D" parent="Detection"] +collision_mask = 4 + +[node name="HealHitbox" type="CollisionShape2D" parent="Detection/Heal"] +shape = SubResource("CapsuleShape2D_vonkd") + +[node name="HealthBar" type="ProgressBar" parent="."] +offset_left = -7.0 +offset_top = 8.0 +offset_right = 94.0 +offset_bottom = 35.0 +scale = Vector2(0.15, 0.15) +script = ExtResource("1_3o4wt") + +[node name="Label" type="Label" parent="HealthBar"] +layout_mode = 1 +anchors_preset = -1 +offset_left = 30.0 +offset_top = 30.0 +offset_right = 83.0 +offset_bottom = 56.0 + +[node name="Sprite2D" type="Sprite2D" parent="."] +scale = Vector2(0.055, 0.045) +texture = ExtResource("2_epr5s") diff --git a/Enemy/enemy.gd b/Enemy/enemy.gd new file mode 100644 index 0000000..1999b58 --- /dev/null +++ b/Enemy/enemy.gd @@ -0,0 +1,32 @@ +extends CharacterBody2D + +@export var character_data : PlayerCharacterData + +@onready var healthBar = $HealthBar + +@onready var maxHealth : float = character_data.HP + + +func _ready() -> void: + healthBar.set_health_bar(character_data.HP, maxHealth) + +func take_damage(damage:int): + character_data.HP -= damage + if character_data.HP < 0: character_data.HP = 0 + healthBar.change_health(-damage) + +func take_heal(heal:int): + character_data.HP += heal + healthBar.change_health(heal) + +func _on_damage_area_entered(area: Area2D) -> void: + if area.is_in_group("damage"): + take_damage(1) + +func _on_heal_area_entered(area: Area2D) -> void: + if area.is_in_group("heal"): + take_heal(1) + + +func _physics_process(delta: float) -> void: + move_and_slide() diff --git a/Enemy/enemy.gd.uid b/Enemy/enemy.gd.uid new file mode 100644 index 0000000..fd98d49 --- /dev/null +++ b/Enemy/enemy.gd.uid @@ -0,0 +1 @@ +uid://0v8h0wqe0iyt diff --git a/Enemy/veriglius.jpg b/Enemy/veriglius.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5e02a86c8188d6c67a245811f3f51202029b0bcd GIT binary patch literal 6174 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 literal 0 HcmV?d00001 diff --git a/Enemy/veriglius.jpg.import b/Enemy/veriglius.jpg.import new file mode 100644 index 0000000..37d2c38 --- /dev/null +++ b/Enemy/veriglius.jpg.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://d38wbkf4k45v8" +path="res://.godot/imported/veriglius.jpg-154c13058ac7c6f47068db0358fc552d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Enemy/veriglius.jpg" +dest_files=["res://.godot/imported/veriglius.jpg-154c13058ac7c6f47068db0358fc552d.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/Heals/Heart.tscn b/Heals/Heart.tscn index a3121ca..fc161cb 100644 --- a/Heals/Heart.tscn +++ b/Heals/Heart.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=4 format=3 uid="uid://wqcuyddc0728"] +[gd_scene load_steps=3 format=3 uid="uid://wqcuyddc0728"] [ext_resource type="Texture2D" uid="uid://crh0ru01dofl2" path="res://Misc/Screenshot 2026-04-04 113440.png" id="1_23dhv"] diff --git a/Main.tscn b/Main.tscn index 3e682bb..bc9f60f 100644 --- a/Main.tscn +++ b/Main.tscn @@ -1,9 +1,10 @@ -[gd_scene load_steps=6 format=3 uid="uid://di36bxkcrnr52"] +[gd_scene load_steps=8 format=3 uid="uid://di36bxkcrnr52"] [ext_resource type="PackedScene" uid="uid://d2l1oof6loxxe" path="res://Player/Player.tscn" id="1_uu6xs"] [ext_resource type="Script" uid="uid://dw0yxse7nva8" path="res://Player/PlayerCharacterData.gd" id="2_r0du0"] [ext_resource type="PackedScene" uid="uid://b5yaa70qbh3li" path="res://Damage/Saw.tscn" id="3_cm0pq"] [ext_resource type="PackedScene" uid="uid://wqcuyddc0728" path="res://Heals/Heart.tscn" id="4_fos0i"] +[ext_resource type="PackedScene" uid="uid://m2spfqyeopd6" path="res://Enemy/Enemy.tscn" id="5_fos0i"] [sub_resource type="Resource" id="Resource_cm0pq"] resource_local_to_scene = true @@ -11,6 +12,12 @@ script = ExtResource("2_r0du0") speed = 150.0 air_acceleration = 3000.0 +[sub_resource type="Resource" id="Resource_fos0i"] +resource_local_to_scene = true +script = ExtResource("2_r0du0") +speed = 150.0 +air_acceleration = 3000.0 + [node name="Main" type="Node"] [node name="Player" parent="." instance=ExtResource("1_uu6xs")] @@ -22,3 +29,7 @@ position = Vector2(105, 67) [node name="Heart" parent="." instance=ExtResource("4_fos0i")] position = Vector2(222, 73) + +[node name="Enemy" parent="." instance=ExtResource("5_fos0i")] +position = Vector2(168, 146) +character_data = SubResource("Resource_fos0i") diff --git a/Main.tscn3245094987.tmp b/Main.tscn3245094987.tmp new file mode 100644 index 0000000..1d118ba --- /dev/null +++ b/Main.tscn3245094987.tmp @@ -0,0 +1,35 @@ +[gd_scene load_steps=8 format=3 uid="uid://di36bxkcrnr52"] + +[ext_resource type="PackedScene" uid="uid://d2l1oof6loxxe" path="res://Player/Player.tscn" id="1_uu6xs"] +[ext_resource type="Script" uid="uid://dw0yxse7nva8" path="res://Player/PlayerCharacterData.gd" id="2_r0du0"] +[ext_resource type="PackedScene" uid="uid://b5yaa70qbh3li" path="res://Damage/Saw.tscn" id="3_cm0pq"] +[ext_resource type="PackedScene" uid="uid://wqcuyddc0728" path="res://Heals/Heart.tscn" id="4_fos0i"] +[ext_resource type="PackedScene" uid="uid://m2spfqyeopd6" path="res://Enemy/Enemy.tscn" id="5_fos0i"] + +[sub_resource type="Resource" id="Resource_cm0pq"] +resource_local_to_scene = true +script = ExtResource("2_r0du0") +speed = 150.0 +air_acceleration = 3000.0 + +[sub_resource type="Resource" id="Resource_fos0i"] +resource_local_to_scene = true +script = ExtResource("2_r0du0") +speed = 150.0 +air_acceleration = 3000.0 + +[node name="Main" type="Node"] + +[node name="Player" parent="." instance=ExtResource("1_uu6xs")] +position = Vector2(-1, 0) +character_data = SubResource("Resource_cm0pq") + +[node name="Saw" parent="." instance=ExtResource("3_cm0pq")] +position = Vector2(105, 67) + +[node name="Heart" parent="." instance=ExtResource("4_fos0i")] +position = Vector2(222, 73) + +[node name="Enemy" parent="." instance=ExtResource("5_fos0i")] +position = Vector2(26, 0) +character_data = SubResource("Resource_fos0i") diff --git a/Misc/gallopon.jpg b/Misc/gallopon.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e0dbed4203a2e0d036afb1b3fa54bfc3dfc9ab8c GIT binary patch literal 9651 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 M85tQd$R5}K2gn0 void: default.emit() return ability.while_use(actor, delta) + handle_friction_x(0, delta) + handle_friction_y(0, delta) pass + +func handle_friction_x(input_axis: float, delta: float) -> void: + if (input_axis == 0): + actor.velocity.x = move_toward(actor.velocity.x, 0, actor.character_data.friction * delta) + +func handle_friction_y(input_axis: float, delta: float) -> void: + if (input_axis == 0): + actor.velocity.y = move_toward(actor.velocity.y, 0, actor.character_data.friction * delta) diff --git a/project.godot b/project.godot index 4b010ff..1475447 100644 --- a/project.godot +++ b/project.godot @@ -16,7 +16,7 @@ compatibility/default_parent_skeleton_in_mesh_instance_3d=true config/name="Phoenix" run/main_scene="uid://di36bxkcrnr52" -config/features=PackedStringArray("4.6", "GL Compatibility") +config/features=PackedStringArray("4.5", "GL Compatibility") config/icon="res://Misc/icon.svg" [display] From 01da4391f0960e1df68d50e73858b84fc898e04e Mon Sep 17 00:00:00 2001 From: "Bung1r (Benny)" <144744252+bung1r@users.noreply.github.com> Date: Sat, 2 May 2026 19:54:40 -0700 Subject: [PATCH 4/4] fix broken code Added Enemy --- Main.tscn | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/Main.tscn b/Main.tscn index 61cb7c4..9c86445 100644 --- a/Main.tscn +++ b/Main.tscn @@ -1,11 +1,11 @@ -[gd_scene load_steps=7 format=3 uid="uid://di36bxkcrnr52"] +[gd_scene load_steps=9 format=3 uid="uid://di36bxkcrnr52"] [ext_resource type="PackedScene" uid="uid://d2l1oof6loxxe" path="res://Player/Player.tscn" id="1_uu6xs"] [ext_resource type="Script" uid="uid://dw0yxse7nva8" path="res://Player/PlayerCharacterData.gd" id="2_r0du0"] [ext_resource type="PackedScene" uid="uid://b5yaa70qbh3li" path="res://Damage/Saw.tscn" id="3_cm0pq"] [ext_resource type="PackedScene" uid="uid://wqcuyddc0728" path="res://Heals/Heart.tscn" id="4_fos0i"] -[ext_resource type="PackedScene" uid="uid://m2spfqyeopd6" path="res://Enemy/Enemy.tscn" id="5_fos0i"] [ext_resource type="Script" uid="uid://btbo1qgfb7n2n" path="res://Player/health_bar.gd" id="5_fos0i"] +[ext_resource type="PackedScene" uid="uid://m2spfqyeopd6" path="res://Enemy/Enemy.tscn" id="6_3dxm6"] [sub_resource type="Resource" id="Resource_cm0pq"] resource_local_to_scene = true @@ -13,7 +13,7 @@ script = ExtResource("2_r0du0") speed = 150.0 air_acceleration = 3000.0 -[sub_resource type="Resource" id="Resource_fos0i"] +[sub_resource type="Resource" id="Resource_lgr22"] resource_local_to_scene = true script = ExtResource("2_r0du0") speed = 150.0 @@ -32,9 +32,6 @@ position = Vector2(105, 67) [node name="Heart" parent="." instance=ExtResource("4_fos0i")] position = Vector2(222, 73) -[node name="Enemy" parent="." instance=ExtResource("5_fos0i")] -position = Vector2(168, 146) -character_data = SubResource("Resource_fos0i") [node name="CanvasLayer" type="CanvasLayer" parent="."] [node name="HealthBar" type="ProgressBar" parent="CanvasLayer"] @@ -60,3 +57,7 @@ offset_top = 1.0 offset_right = 76.0 offset_bottom = 27.0 horizontal_alignment = 1 + +[node name="Enemy" parent="." instance=ExtResource("6_3dxm6")] +position = Vector2(54, 32) +character_data = SubResource("Resource_lgr22")