Initial project sync
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
class_name ActionRuleModifier
|
||||
extends Resource
|
||||
|
||||
@export var blocked_action_tags: Array[StringName] = []
|
||||
@export var allowed_action_tags: Array[StringName] = []
|
||||
@export var allow_movement_while_charging := false
|
||||
@export var block_movement := false
|
||||
@@ -0,0 +1 @@
|
||||
uid://cphgi446ov1i6
|
||||
@@ -0,0 +1,7 @@
|
||||
class_name DefenseModifier
|
||||
extends Resource
|
||||
|
||||
@export var defense_state: StringName = &""
|
||||
@export var damage_mult := 1.0
|
||||
@export var interrupts := true
|
||||
@export var required_attack_tags: Array[StringName] = []
|
||||
@@ -0,0 +1 @@
|
||||
uid://b10ssegsbqfn
|
||||
@@ -0,0 +1,25 @@
|
||||
[gd_resource type="Resource" script_class="EffectDefinition" load_steps=4 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://resources/effects/effect_definition.gd" id="1"]
|
||||
[ext_resource type="Script" path="res://resources/effects/stat_modifier.gd" id="2"]
|
||||
|
||||
[sub_resource type="Resource" id="Resource_burst_damage"]
|
||||
script = ExtResource("2")
|
||||
stat = &"damage_mult"
|
||||
operation = "multiply"
|
||||
value = 1.2
|
||||
|
||||
[sub_resource type="Resource" id="Resource_burst_cost"]
|
||||
script = ExtResource("2")
|
||||
stat = &"cost_mult"
|
||||
operation = "multiply"
|
||||
value = 0.0
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1")
|
||||
id = &"effect_burst_power"
|
||||
display_name = "Burst Power"
|
||||
duration_type = &"beats"
|
||||
duration = 16.0
|
||||
max_stacks = 1
|
||||
stat_modifiers = Array[Resource]([SubResource("Resource_burst_damage"), SubResource("Resource_burst_cost")])
|
||||
@@ -0,0 +1,16 @@
|
||||
class_name EffectDefinition
|
||||
extends Resource
|
||||
|
||||
@export var id: StringName
|
||||
@export var display_name: String
|
||||
@export var duration_type: StringName = &"seconds"
|
||||
@export var duration := 0.0
|
||||
@export var max_stacks := 1
|
||||
@export var stat_modifiers: Array[Resource] = []
|
||||
@export var defense_modifiers: Array[Resource] = []
|
||||
@export var action_rule_modifiers: Array[Resource] = []
|
||||
@export var trigger_event: StringName = &""
|
||||
@export var trigger_effects: Array[Resource] = []
|
||||
@export var required_event_action_tags: Array[StringName] = []
|
||||
@export var blocked_event_action_tags: Array[StringName] = []
|
||||
@export var until_event: StringName = &""
|
||||
@@ -0,0 +1 @@
|
||||
uid://cvlmwyu6iqb8g
|
||||
@@ -0,0 +1,16 @@
|
||||
[gd_resource type="Resource" script_class="EffectDefinition" format=3 uid="uid://bop6tpmynvgqf"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://cvlmwyu6iqb8g" path="res://resources/effects/effect_definition.gd" id="1"]
|
||||
[ext_resource type="Script" uid="uid://brratisl42y1l" path="res://resources/effects/stat_modifier.gd" id="2"]
|
||||
|
||||
[sub_resource type="Resource" id="Resource_haste_move"]
|
||||
script = ExtResource("2")
|
||||
stat = &"move_speed"
|
||||
value = 1.25
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1")
|
||||
id = &"effect_haste"
|
||||
display_name = "Haste"
|
||||
duration = 2.0
|
||||
stat_modifiers = Array[Resource]([SubResource("Resource_haste_move")])
|
||||
@@ -0,0 +1,19 @@
|
||||
[gd_resource type="Resource" script_class="EffectDefinition" load_steps=3 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://resources/effects/effect_definition.gd" id="1"]
|
||||
[ext_resource type="Script" path="res://resources/effects/defense_modifier.gd" id="2"]
|
||||
|
||||
[sub_resource type="Resource" id="Resource_hurt_super_armor_defense"]
|
||||
script = ExtResource("2")
|
||||
defense_state = &"SuperArmor"
|
||||
damage_mult = 1.0
|
||||
interrupts = false
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1")
|
||||
id = &"hurt_super_armor"
|
||||
display_name = "Hurt Super Armor"
|
||||
duration_type = &"seconds"
|
||||
duration = 0.5
|
||||
max_stacks = 1
|
||||
defense_modifiers = Array[Resource]([SubResource("Resource_hurt_super_armor_defense")])
|
||||
@@ -0,0 +1,92 @@
|
||||
class_name EffectInstance
|
||||
extends RefCounted
|
||||
|
||||
var definition: Resource
|
||||
var remaining := 0.0
|
||||
var stacks := 1
|
||||
var source: Variant = &"-"
|
||||
|
||||
|
||||
static func create(next_definition: Resource, next_source: Variant = &"-") -> RefCounted:
|
||||
var script: Script = load("res://resources/effects/effect_instance.gd")
|
||||
var instance: RefCounted = script.new()
|
||||
instance.definition = next_definition
|
||||
instance.remaining = float(next_definition.get("duration"))
|
||||
if StringName(str(next_definition.get("duration_type"))) == &"until_event":
|
||||
instance.remaining = 1.0
|
||||
instance.source = next_source
|
||||
return instance
|
||||
|
||||
|
||||
func is_expired() -> bool:
|
||||
return remaining <= 0.0 and StringName(str(definition.get("duration_type"))) != &"infinite"
|
||||
|
||||
|
||||
func tick_time(delta: float) -> void:
|
||||
var duration_type := StringName(str(definition.get("duration_type")))
|
||||
if duration_type == &"seconds":
|
||||
remaining -= delta
|
||||
|
||||
|
||||
func tick_beats(beats: float) -> void:
|
||||
var duration_type := StringName(str(definition.get("duration_type")))
|
||||
if duration_type == &"beats":
|
||||
remaining -= beats
|
||||
|
||||
|
||||
func tick_event(event_name: StringName, context: Dictionary = {}) -> void:
|
||||
if not matches_event_context(context):
|
||||
return
|
||||
var duration_type := StringName(str(definition.get("duration_type")))
|
||||
if duration_type == &"actions" and event_name == &"on_action_start":
|
||||
remaining -= 1.0
|
||||
elif duration_type == &"hits" and event_name == &"on_hit":
|
||||
remaining -= 1.0
|
||||
elif duration_type == &"hurts" and event_name == &"on_hurt":
|
||||
remaining -= 1.0
|
||||
elif duration_type == &"measures" and event_name == &"on_measure_start":
|
||||
remaining -= 1.0
|
||||
elif duration_type == &"until_event" and event_name == StringName(str(definition.get("until_event"))):
|
||||
remaining = 0.0
|
||||
|
||||
|
||||
func matches_event_context(context: Dictionary = {}) -> bool:
|
||||
var action_tags := _event_action_tags(context)
|
||||
var required_tags := _string_name_array(definition.get("required_event_action_tags"))
|
||||
if not required_tags.is_empty() and not _has_any(action_tags, required_tags):
|
||||
return false
|
||||
var blocked_tags := _string_name_array(definition.get("blocked_event_action_tags"))
|
||||
if not blocked_tags.is_empty() and _has_any(action_tags, blocked_tags):
|
||||
return false
|
||||
return true
|
||||
|
||||
|
||||
func _event_action_tags(context: Dictionary) -> Array[StringName]:
|
||||
if context.has("action_tags"):
|
||||
return _string_name_array(context["action_tags"])
|
||||
var action: Resource = context.get("action", null) as Resource
|
||||
if action != null:
|
||||
return _string_name_array(action.get("action_tags"))
|
||||
var result = context.get("result", {})
|
||||
if result is Dictionary:
|
||||
if result.has("action_tags"):
|
||||
return _string_name_array(result["action_tags"])
|
||||
var result_action: Resource = result.get("action", null) as Resource
|
||||
if result_action != null:
|
||||
return _string_name_array(result_action.get("action_tags"))
|
||||
return []
|
||||
|
||||
|
||||
func _string_name_array(value: Variant) -> Array[StringName]:
|
||||
var result: Array[StringName] = []
|
||||
if value is Array:
|
||||
for item: Variant in value:
|
||||
result.append(StringName(str(item)))
|
||||
return result
|
||||
|
||||
|
||||
func _has_any(values: Array[StringName], candidates: Array[StringName]) -> bool:
|
||||
for value: StringName in values:
|
||||
if candidates.has(value):
|
||||
return true
|
||||
return false
|
||||
@@ -0,0 +1 @@
|
||||
uid://bvqpc3oh47qdb
|
||||
@@ -0,0 +1,14 @@
|
||||
[gd_resource type="Resource" script_class="EffectDefinition" load_steps=3 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://resources/effects/effect_definition.gd" id="1"]
|
||||
[ext_resource type="Resource" path="res://resources/effects/effect_haste.tres" id="2"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1")
|
||||
id = &"effect_on_landed_haste"
|
||||
display_name = "On Landed Haste"
|
||||
duration_type = &"infinite"
|
||||
duration = 0.0
|
||||
max_stacks = 1
|
||||
trigger_event = &"on_landed"
|
||||
trigger_effects = Array[Resource]([ExtResource("2")])
|
||||
@@ -0,0 +1,14 @@
|
||||
[gd_resource type="Resource" script_class="EffectDefinition" load_steps=3 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://resources/effects/effect_definition.gd" id="1"]
|
||||
[ext_resource type="Resource" path="res://resources/effects/effect_perfect_damage_buff.tres" id="2"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1")
|
||||
id = &"effect_on_perfect_damage_reward"
|
||||
display_name = "On Perfect Damage Reward"
|
||||
duration_type = &"infinite"
|
||||
duration = 0.0
|
||||
max_stacks = 1
|
||||
trigger_event = &"on_perfect"
|
||||
trigger_effects = Array[Resource]([ExtResource("2")])
|
||||
@@ -0,0 +1,17 @@
|
||||
[gd_resource type="Resource" script_class="EffectDefinition" format=3 uid="uid://ccy324lau1u7c"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://cvlmwyu6iqb8g" path="res://resources/effects/effect_definition.gd" id="1"]
|
||||
[ext_resource type="Script" uid="uid://brratisl42y1l" path="res://resources/effects/stat_modifier.gd" id="2"]
|
||||
|
||||
[sub_resource type="Resource" id="Resource_perfect_damage"]
|
||||
script = ExtResource("2")
|
||||
stat = &"damage_mult"
|
||||
value = 1.25
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1")
|
||||
id = &"effect_perfect_damage_buff"
|
||||
display_name = "Perfect Damage Buff"
|
||||
duration_type = &"hits"
|
||||
duration = 1.0
|
||||
stat_modifiers = Array[Resource]([SubResource("Resource_perfect_damage")])
|
||||
@@ -0,0 +1,17 @@
|
||||
[gd_resource type="Resource" script_class="EffectDefinition" load_steps=3 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://resources/effects/effect_definition.gd" id="1"]
|
||||
[ext_resource type="Script" path="res://resources/effects/action_rule_modifier.gd" id="2"]
|
||||
|
||||
[sub_resource type="Resource" id="Resource_root_rule"]
|
||||
script = ExtResource("2")
|
||||
block_movement = true
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1")
|
||||
id = &"effect_root"
|
||||
display_name = "Root"
|
||||
duration_type = &"seconds"
|
||||
duration = 1.5
|
||||
max_stacks = 1
|
||||
action_rule_modifiers = Array[Resource]([SubResource("Resource_root_rule")])
|
||||
@@ -0,0 +1,17 @@
|
||||
[gd_resource type="Resource" script_class="EffectDefinition" load_steps=3 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://resources/effects/effect_definition.gd" id="1"]
|
||||
[ext_resource type="Script" path="res://resources/effects/action_rule_modifier.gd" id="2"]
|
||||
|
||||
[sub_resource type="Resource" id="Resource_silence_rule"]
|
||||
script = ExtResource("2")
|
||||
blocked_action_tags = Array[StringName]([&"skill"])
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1")
|
||||
id = &"effect_silence"
|
||||
display_name = "Silence"
|
||||
duration_type = &"seconds"
|
||||
duration = 2.0
|
||||
max_stacks = 1
|
||||
action_rule_modifiers = Array[Resource]([SubResource("Resource_silence_rule")])
|
||||
@@ -0,0 +1,19 @@
|
||||
[gd_resource type="Resource" script_class="EffectDefinition" load_steps=3 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://resources/effects/effect_definition.gd" id="1"]
|
||||
[ext_resource type="Script" path="res://resources/effects/stat_modifier.gd" id="2"]
|
||||
|
||||
[sub_resource type="Resource" id="Resource_slow_move"]
|
||||
script = ExtResource("2")
|
||||
stat = &"move_speed"
|
||||
operation = "multiply"
|
||||
value = 0.5
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1")
|
||||
id = &"effect_slow"
|
||||
display_name = "Slow"
|
||||
duration_type = &"seconds"
|
||||
duration = 2.0
|
||||
max_stacks = 1
|
||||
stat_modifiers = Array[Resource]([SubResource("Resource_slow_move")])
|
||||
@@ -0,0 +1,19 @@
|
||||
[gd_resource type="Resource" script_class="EffectDefinition" load_steps=3 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://resources/effects/effect_definition.gd" id="1"]
|
||||
[ext_resource type="Script" path="res://resources/effects/defense_modifier.gd" id="2"]
|
||||
|
||||
[sub_resource type="Resource" id="Resource_invincible_defense"]
|
||||
script = ExtResource("2")
|
||||
defense_state = &"Invincible"
|
||||
damage_mult = 1.0
|
||||
interrupts = false
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1")
|
||||
id = &"effect_temporary_invincible"
|
||||
display_name = "Temporary Invincible"
|
||||
duration_type = &"seconds"
|
||||
duration = 0.5
|
||||
max_stacks = 1
|
||||
defense_modifiers = Array[Resource]([SubResource("Resource_invincible_defense")])
|
||||
@@ -0,0 +1,19 @@
|
||||
[gd_resource type="Resource" script_class="EffectDefinition" load_steps=3 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://resources/effects/effect_definition.gd" id="1"]
|
||||
[ext_resource type="Script" path="res://resources/effects/defense_modifier.gd" id="2"]
|
||||
|
||||
[sub_resource type="Resource" id="Resource_super_armor_defense"]
|
||||
script = ExtResource("2")
|
||||
defense_state = &"SuperArmor"
|
||||
damage_mult = 1.0
|
||||
interrupts = false
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1")
|
||||
id = &"effect_temporary_super_armor"
|
||||
display_name = "Temporary Super Armor"
|
||||
duration_type = &"seconds"
|
||||
duration = 1.0
|
||||
max_stacks = 1
|
||||
defense_modifiers = Array[Resource]([SubResource("Resource_super_armor_defense")])
|
||||
@@ -0,0 +1,6 @@
|
||||
class_name StatModifier
|
||||
extends Resource
|
||||
|
||||
@export var stat: StringName
|
||||
@export_enum("add", "multiply") var operation := "multiply"
|
||||
@export var value := 1.0
|
||||
@@ -0,0 +1 @@
|
||||
uid://brratisl42y1l
|
||||
@@ -0,0 +1,19 @@
|
||||
[gd_resource type="Resource" script_class="EffectDefinition" load_steps=3 format=3]
|
||||
|
||||
[ext_resource type="Script" path="res://resources/effects/effect_definition.gd" id="1"]
|
||||
[ext_resource type="Script" path="res://resources/effects/stat_modifier.gd" id="2"]
|
||||
|
||||
[sub_resource type="Resource" id="Resource_attack_buff_damage"]
|
||||
script = ExtResource("2")
|
||||
stat = &"damage_mult"
|
||||
operation = "add"
|
||||
value = 0.5
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1")
|
||||
id = &"time_anchor_attack_buff"
|
||||
display_name = "Time Anchor Attack Buff"
|
||||
duration_type = &"infinite"
|
||||
duration = 0.0
|
||||
max_stacks = 7
|
||||
stat_modifiers = Array[Resource]([SubResource("Resource_attack_buff_damage")])
|
||||
@@ -0,0 +1,22 @@
|
||||
[gd_resource type="Resource" script_class="EffectDefinition" format=3 uid="uid://djg52uwagbdat"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://cvlmwyu6iqb8g" path="res://resources/effects/effect_definition.gd" id="1"]
|
||||
[ext_resource type="Script" uid="uid://brratisl42y1l" path="res://resources/effects/stat_modifier.gd" id="2"]
|
||||
[ext_resource type="Script" uid="uid://b10ssegsbqfn" path="res://resources/effects/defense_modifier.gd" id="3"]
|
||||
|
||||
[sub_resource type="Resource" id="Resource_taken_down"]
|
||||
script = ExtResource("3")
|
||||
damage_mult = 0.25
|
||||
|
||||
[sub_resource type="Resource" id="Resource_damage_up"]
|
||||
script = ExtResource("2")
|
||||
stat = &"damage_mult"
|
||||
value = 1.4
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1")
|
||||
id = &"effect_tp_future_enemy_strong"
|
||||
display_name = "Future Phase Strong"
|
||||
duration_type = &"infinite"
|
||||
stat_modifiers = Array[Resource]([SubResource("Resource_damage_up")])
|
||||
defense_modifiers = Array[Resource]([SubResource("Resource_taken_down")])
|
||||
@@ -0,0 +1,22 @@
|
||||
[gd_resource type="Resource" script_class="EffectDefinition" format=3 uid="uid://dkg4j1an7jclo"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://cvlmwyu6iqb8g" path="res://resources/effects/effect_definition.gd" id="1"]
|
||||
[ext_resource type="Script" uid="uid://brratisl42y1l" path="res://resources/effects/stat_modifier.gd" id="2"]
|
||||
[ext_resource type="Script" uid="uid://b10ssegsbqfn" path="res://resources/effects/defense_modifier.gd" id="3"]
|
||||
|
||||
[sub_resource type="Resource" id="Resource_taken_up"]
|
||||
script = ExtResource("3")
|
||||
damage_mult = 2.5
|
||||
|
||||
[sub_resource type="Resource" id="Resource_damage_down"]
|
||||
script = ExtResource("2")
|
||||
stat = &"damage_mult"
|
||||
value = 0.7
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1")
|
||||
id = &"effect_tp_future_enemy_weak"
|
||||
display_name = "Future-Strong Enemy Weakened"
|
||||
duration_type = &"infinite"
|
||||
stat_modifiers = Array[Resource]([SubResource("Resource_damage_down")])
|
||||
defense_modifiers = Array[Resource]([SubResource("Resource_taken_up")])
|
||||
@@ -0,0 +1,22 @@
|
||||
[gd_resource type="Resource" script_class="EffectDefinition" format=3 uid="uid://e1bbntw3dfsx"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://cvlmwyu6iqb8g" path="res://resources/effects/effect_definition.gd" id="1"]
|
||||
[ext_resource type="Script" uid="uid://brratisl42y1l" path="res://resources/effects/stat_modifier.gd" id="2"]
|
||||
[ext_resource type="Script" uid="uid://b10ssegsbqfn" path="res://resources/effects/defense_modifier.gd" id="3"]
|
||||
|
||||
[sub_resource type="Resource" id="Resource_taken_down"]
|
||||
script = ExtResource("3")
|
||||
damage_mult = 0.25
|
||||
|
||||
[sub_resource type="Resource" id="Resource_damage_up"]
|
||||
script = ExtResource("2")
|
||||
stat = &"damage_mult"
|
||||
value = 1.4
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1")
|
||||
id = &"effect_tp_past_enemy_strong"
|
||||
display_name = "Past Phase Strong"
|
||||
duration_type = &"infinite"
|
||||
stat_modifiers = Array[Resource]([SubResource("Resource_damage_up")])
|
||||
defense_modifiers = Array[Resource]([SubResource("Resource_taken_down")])
|
||||
@@ -0,0 +1,22 @@
|
||||
[gd_resource type="Resource" script_class="EffectDefinition" format=3 uid="uid://bougox245ioo"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://cvlmwyu6iqb8g" path="res://resources/effects/effect_definition.gd" id="1"]
|
||||
[ext_resource type="Script" uid="uid://brratisl42y1l" path="res://resources/effects/stat_modifier.gd" id="2"]
|
||||
[ext_resource type="Script" uid="uid://b10ssegsbqfn" path="res://resources/effects/defense_modifier.gd" id="3"]
|
||||
|
||||
[sub_resource type="Resource" id="Resource_taken_up"]
|
||||
script = ExtResource("3")
|
||||
damage_mult = 2.5
|
||||
|
||||
[sub_resource type="Resource" id="Resource_damage_down"]
|
||||
script = ExtResource("2")
|
||||
stat = &"damage_mult"
|
||||
value = 0.7
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1")
|
||||
id = &"effect_tp_past_enemy_weak"
|
||||
display_name = "Past-Strong Enemy Weakened"
|
||||
duration_type = &"infinite"
|
||||
stat_modifiers = Array[Resource]([SubResource("Resource_damage_down")])
|
||||
defense_modifiers = Array[Resource]([SubResource("Resource_taken_up")])
|
||||
Reference in New Issue
Block a user