Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions resources/abilities/coralleine/lifesteal_1.tres
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
[gd_resource type="Resource" script_class="Ability" format=3 uid="uid://cp1djbgsqcqsx"]

[ext_resource type="Script" uid="uid://ny1mjfoo1mqc" path="res://scripts/ability/ability.gd" id="1_mnbr0"]
[ext_resource type="Script" uid="uid://coagjoj2grxm7" path="res://scripts/ability/action/lifesteal_action.gd" id="1_ntos2"]

[sub_resource type="Resource" id="Resource_l5dib"]
script = ExtResource("1_ntos2")
damage_minimum = 10
damage_maximum = 30
metadata/_custom_type_script = "uid://coagjoj2grxm7"

[resource]
script = ExtResource("1_mnbr0")
name = "Lifesteal"
description = "Steal a percentage of the damage dealt to the enemy as health."
action = SubResource("Resource_l5dib")
metadata/_custom_type_script = "uid://ny1mjfoo1mqc"
17 changes: 17 additions & 0 deletions resources/abilities/coralleine/lifesteal_2.tres
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
[gd_resource type="Resource" script_class="Ability" format=3 uid="uid://db3vxvsbuyf36"]

[ext_resource type="Script" uid="uid://coagjoj2grxm7" path="res://scripts/ability/action/lifesteal_action.gd" id="1_7humo"]
[ext_resource type="Script" uid="uid://ny1mjfoo1mqc" path="res://scripts/ability/ability.gd" id="2_aqbhc"]

[sub_resource type="Resource" id="Resource_l5dib"]
script = ExtResource("1_7humo")
damage_minimum = 20
damage_maximum = 40
metadata/_custom_type_script = "uid://coagjoj2grxm7"

[resource]
script = ExtResource("2_aqbhc")
name = "Lifesteal Level 2"
description = "Steal a percentage of the increased damage dealt to the enemy as health."
action = SubResource("Resource_l5dib")
metadata/_custom_type_script = "uid://ny1mjfoo1mqc"
35 changes: 35 additions & 0 deletions resources/abilities/coralleine/lifesteal_3.tres
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
[gd_resource type="Resource" script_class="Ability" format=3 uid="uid://7fj07lgcsb2a"]

[ext_resource type="Script" uid="uid://xwcbloqu4nwu" path="res://scripts/ability/action/abstracts/action.gd" id="1_12m1p"]
[ext_resource type="Script" uid="uid://coagjoj2grxm7" path="res://scripts/ability/action/lifesteal_action.gd" id="1_yvopc"]
[ext_resource type="Script" uid="uid://ny1mjfoo1mqc" path="res://scripts/ability/ability.gd" id="2_rj37m"]
[ext_resource type="Script" uid="uid://dkyoonc2qagl3" path="res://scripts/ability/action/luck_chance_action.gd" id="3_fay2i"]
[ext_resource type="Script" uid="uid://deeb01dip6syv" path="res://scripts/ability/action/steal_status_action.gd" id="4_8txq8"]
[ext_resource type="Script" uid="uid://da17dshmjafs6" path="res://scripts/ability/action/group_action.gd" id="5_fn34d"]

[sub_resource type="Resource" id="Resource_qh8t0"]
script = ExtResource("1_yvopc")
damage_minimum = 20
damage_maximum = 40
metadata/_custom_type_script = "uid://coagjoj2grxm7"

[sub_resource type="Resource" id="Resource_r4dnt"]
script = ExtResource("4_8txq8")
metadata/_custom_type_script = "uid://deeb01dip6syv"

[sub_resource type="Resource" id="Resource_v7apg"]
script = ExtResource("3_fay2i")
success_action = SubResource("Resource_r4dnt")
metadata/_custom_type_script = "uid://dkyoonc2qagl3"

[sub_resource type="Resource" id="Resource_ly7en"]
script = ExtResource("5_fn34d")
actions = Array[ExtResource("1_12m1p")]([SubResource("Resource_qh8t0"), SubResource("Resource_v7apg")])
metadata/_custom_type_script = "uid://da17dshmjafs6"

[resource]
script = ExtResource("2_rj37m")
name = "Lifesteal Level 3"
description = "Steal a percentage of the increased damage dealt to the enemy as health and there is a chance to steal a positive status effect from the enemy. "
action = SubResource("Resource_ly7en")
metadata/_custom_type_script = "uid://ny1mjfoo1mqc"
36 changes: 36 additions & 0 deletions resources/abilities/coralleine/lifesteal_4.tres
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
[gd_resource type="Resource" script_class="Ability" format=3 uid="uid://cjl4tl2emlhod"]

[ext_resource type="Script" uid="uid://xwcbloqu4nwu" path="res://scripts/ability/action/abstracts/action.gd" id="1_qd3ra"]
[ext_resource type="Script" uid="uid://coagjoj2grxm7" path="res://scripts/ability/action/lifesteal_action.gd" id="2_3s6es"]
[ext_resource type="Script" uid="uid://dkyoonc2qagl3" path="res://scripts/ability/action/luck_chance_action.gd" id="3_weeie"]
[ext_resource type="Script" uid="uid://deeb01dip6syv" path="res://scripts/ability/action/steal_status_action.gd" id="4_er3r1"]
[ext_resource type="Script" uid="uid://da17dshmjafs6" path="res://scripts/ability/action/group_action.gd" id="5_4frgf"]
[ext_resource type="Script" uid="uid://ny1mjfoo1mqc" path="res://scripts/ability/ability.gd" id="6_ga7il"]

[sub_resource type="Resource" id="Resource_qh8t0"]
script = ExtResource("2_3s6es")
damage_minimum = 30
damage_maximum = 60
lifesteal_percent = 1.0
metadata/_custom_type_script = "uid://coagjoj2grxm7"

[sub_resource type="Resource" id="Resource_r4dnt"]
script = ExtResource("4_er3r1")
metadata/_custom_type_script = "uid://deeb01dip6syv"

[sub_resource type="Resource" id="Resource_v7apg"]
script = ExtResource("3_weeie")
success_action = SubResource("Resource_r4dnt")
metadata/_custom_type_script = "uid://dkyoonc2qagl3"

[sub_resource type="Resource" id="Resource_ly7en"]
script = ExtResource("5_4frgf")
actions = Array[ExtResource("1_qd3ra")]([SubResource("Resource_qh8t0"), SubResource("Resource_v7apg")])
metadata/_custom_type_script = "uid://da17dshmjafs6"

[resource]
script = ExtResource("6_ga7il")
name = "Lifesteal Level 4"
description = "Steal ALL of the damage dealt to the enemy as health and there is a chance to steal a positive status effect from the enemy. "
action = SubResource("Resource_ly7en")
metadata/_custom_type_script = "uid://ny1mjfoo1mqc"
16 changes: 16 additions & 0 deletions scripts/ability/action/lifesteal_action.gd
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
extends TargetAction
class_name LifestealAction

@export var damage_minimum: int
@export var damage_maximum: int
@export var can_miss: bool = true

## Percent of damage to heal back (0.0 - 1.0)
@export_range(0.0, 1.0, 0.05) var lifesteal_percent: float = 0.5

func run(context: ActionContext) -> void:
var damage = randi_range(damage_minimum, damage_maximum)
var heal = roundi(damage * lifesteal_percent)
for target in resolve_targets(context):
BattleManager.apply_damage(damage, context.source, target)
BattleManager.apply_healing(heal, context.source, context.source)
1 change: 1 addition & 0 deletions scripts/ability/action/lifesteal_action.gd.uid
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
uid://coagjoj2grxm7
15 changes: 15 additions & 0 deletions scripts/ability/action/steal_status_action.gd
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
extends TargetAction
class_name StealStatusAction

const EffectType = BaseStatusEffect.EffectType

@export var stacks_to_steal: int = 1

func run(context: ActionContext) -> void:
for target in resolve_targets(context):
var effects = target.get_all_status_effects().filter(func(e): return e.effect.effect_type == EffectType.POSITIVE)
if effects.is_empty():
return
var stolen: StatusEffectContainer = effects.pick_random()
target.remove_status_effect(stolen.effect, stacks_to_steal)
context.source.add_status_effect(stolen.effect, stolen.source, stacks_to_steal, 0)
1 change: 1 addition & 0 deletions scripts/ability/action/steal_status_action.gd.uid
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
uid://deeb01dip6syv
10 changes: 10 additions & 0 deletions scripts/status_effects/base_status_effect.gd
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,16 @@ signal updated
## The icon to show next to the character.
@export var icon: Texture2D

## Type of status effect
enum EffectType {
POSITIVE,
NEGATIVE,
LOCKED
}

## Whether this effect is positive, negative, or locked (cannot be transferred).
@export var effect_type: EffectType = EffectType.NEGATIVE

# --- Virtual Methods ---
# Override in subclasses to customize behavior.

Expand Down