Added rider plugin and turned Empowered Action into a forge-resources-managed ability

This commit is contained in:
2026-04-03 15:33:46 +02:00
parent c1108e96d7
commit 673368a200
27 changed files with 854 additions and 9 deletions

View File

@@ -19,7 +19,6 @@
[ext_resource type="Resource" uid="uid://t612lts1wi1s" path="res://inputs/base_mode/move_right.tres" id="6_q7bng"]
[ext_resource type="Script" uid="uid://cwbvxlfvmocc1" path="res://scenes/player_controller/scripts/StairsSystem.cs" id="7_bmt5a"]
[ext_resource type="Resource" uid="uid://brswsknpgwal2" path="res://inputs/base_mode/move_front.tres" id="7_m8gvy"]
[ext_resource type="Resource" uid="uid://7dpkk5rk3di5" path="res://scenes/player_controller/resources/forge/empowered_action.tres" id="7_qheee"]
[ext_resource type="PackedScene" uid="uid://bctpe34ddamg5" path="res://scenes/components/knockback/CKnockback.tscn" id="7_x835q"]
[ext_resource type="Resource" uid="uid://s1l0n1iitc6m" path="res://inputs/base_mode/move_back.tres" id="8_jb43f"]
[ext_resource type="Resource" uid="uid://j1o5ud0plk4" path="res://inputs/base_mode/aim_release.tres" id="8_lhb11"]
@@ -28,6 +27,7 @@
[ext_resource type="PackedScene" uid="uid://wq1okogkhc5l" path="res://scenes/player_controller/components/mantle/mantle_system.tscn" id="8_qu4wy"]
[ext_resource type="AudioStream" uid="uid://clfggn87oeg1s" path="res://scenes/player_controller/audio/InteractiveSFX.tres" id="9_jb43f"]
[ext_resource type="Resource" uid="uid://bebstkm608wxx" path="res://inputs/base_mode/aim_pressed.tres" id="9_nob5r"]
[ext_resource type="Resource" uid="uid://dccuj66egxfwh" path="res://scenes/player_controller/resources/empowered_action.tres" id="10_2rkt1"]
[ext_resource type="Resource" uid="uid://bdit2jy5gbpts" path="res://inputs/base_mode/jump.tres" id="10_4u7i3"]
[ext_resource type="Script" uid="uid://cxihb42t2mfqi" path="res://addons/forge/nodes/ForgeAttributeSet.cs" id="10_pw5r7"]
[ext_resource type="Script" uid="uid://ccovd5i0wr3kk" path="res://addons/forge/editor/attributes/AttributeValues.cs" id="11_2rkt1"]
@@ -142,8 +142,8 @@ bg_color = Color(0.15869555, 0.64034444, 0.906125, 1)
[node name="Player" type="CharacterBody3D" unique_id=709076448]
collision_mask = 272
script = ExtResource("1_poq2x")
EmpoweredAction = ExtResource("7_qheee")
ManaRegen = ExtResource("3_n24vh")
EmpoweredActionAbility = ExtResource("10_2rkt1")
AbilityLoadout = [ExtResource("4_11013")]
AimAssistStrength = 0.3
AimAssistReductionWhenCloseToTarget = 0.1

View File

@@ -0,0 +1,156 @@
[gd_resource type="Resource" script_class="ForgeAbilityData" format=3 uid="uid://dccuj66egxfwh"]
[ext_resource type="Script" uid="uid://dhxfbxh54pyxp" path="res://addons/forge/resources/abilities/ForgeAbilityData.cs" id="1_7rg1m"]
[ext_resource type="Script" uid="uid://cw525n4mjqgw0" path="res://addons/forge/resources/ForgeTagContainer.cs" id="1_16foq"]
[ext_resource type="Resource" uid="uid://crgwob8t8yysq" path="res://scenes/player_controller/resources/forge/instant_end_behavior.tres" id="1_odwcb"]
[ext_resource type="Script" uid="uid://cn3b4ya15fg7e" path="res://addons/forge/resources/magnitudes/ForgeScalableFloat.cs" id="1_qpqxp"]
[ext_resource type="Script" uid="uid://2gm1hdhi8u08" path="res://addons/forge/resources/magnitudes/ForgeModifierMagnitude.cs" id="2_3t6pm"]
[ext_resource type="Script" uid="uid://dngf30hxy5go4" path="res://addons/forge/resources/components/ModifierTags.cs" id="2_g4w5p"]
[ext_resource type="Script" uid="uid://1hgogislo1l6" path="res://addons/forge/resources/magnitudes/ForgeScalableInt.cs" id="3_16foq"]
[ext_resource type="Script" uid="uid://b83hf13nj37k3" path="res://addons/forge/resources/ForgeEffectData.cs" id="4_g4w5p"]
[ext_resource type="Script" uid="uid://cmrsxccn0ei4j" path="res://addons/forge/resources/ForgeCue.cs" id="7_ekcln"]
[ext_resource type="Script" uid="uid://bdfcavbjyhxxa" path="res://addons/forge/resources/ForgeModifier.cs" id="8_odwcb"]
[sub_resource type="Resource" id="Resource_h116a"]
script = ExtResource("1_16foq")
ContainerTags = Array[String](["cooldown.empoweredaction"])
metadata/_custom_type_script = "uid://cw525n4mjqgw0"
[sub_resource type="Resource" id="Resource_mgrka"]
script = ExtResource("2_g4w5p")
TagsToAdd = SubResource("Resource_h116a")
metadata/_custom_type_script = "uid://dngf30hxy5go4"
[sub_resource type="Resource" id="Resource_ekcln"]
script = ExtResource("1_qpqxp")
BaseValue = 1.0
[sub_resource type="Resource" id="Resource_odwcb"]
script = ExtResource("1_qpqxp")
[sub_resource type="Resource" id="Resource_psy6a"]
script = ExtResource("1_qpqxp")
[sub_resource type="Resource" id="Resource_j4bwy"]
script = ExtResource("1_qpqxp")
BaseValue = 1.0
[sub_resource type="Resource" id="Resource_s60jg"]
script = ExtResource("1_qpqxp")
[sub_resource type="Resource" id="Resource_wdif6"]
script = ExtResource("1_qpqxp")
[sub_resource type="Resource" id="Resource_inx6r"]
script = ExtResource("1_qpqxp")
BaseValue = 0.5
metadata/_custom_type_script = "uid://cn3b4ya15fg7e"
[sub_resource type="Resource" id="Resource_4jm88"]
script = ExtResource("2_3t6pm")
ScalableFloat = SubResource("Resource_inx6r")
Coefficient = SubResource("Resource_j4bwy")
PreMultiplyAdditiveValue = SubResource("Resource_wdif6")
PostMultiplyAdditiveValue = SubResource("Resource_s60jg")
CalculatorCoefficient = SubResource("Resource_ekcln")
CalculatorPreMultiplyAdditiveValue = SubResource("Resource_psy6a")
CalculatorPostMultiplyAdditiveValue = SubResource("Resource_odwcb")
metadata/_custom_type_script = "uid://2gm1hdhi8u08"
[sub_resource type="Resource" id="Resource_lmnuh"]
script = ExtResource("3_16foq")
BaseValue = 1
[sub_resource type="Resource" id="Resource_xp6fe"]
script = ExtResource("3_16foq")
BaseValue = 1
[sub_resource type="Resource" id="Resource_egh2b"]
script = ExtResource("4_g4w5p")
Name = "Empowered Action Cooldown"
Modifiers = []
Components = Array[Object]([SubResource("Resource_mgrka")])
Executions = []
DurationType = 2
Duration = SubResource("Resource_4jm88")
StackLimit = SubResource("Resource_xp6fe")
InitialStack = SubResource("Resource_lmnuh")
Cues = []
metadata/_custom_type_script = "uid://b83hf13nj37k3"
[sub_resource type="Resource" id="Resource_4mhqs"]
script = ExtResource("1_16foq")
ContainerTags = Array[String](["cues.resources.mana"])
metadata/_custom_type_script = "uid://cw525n4mjqgw0"
[sub_resource type="Resource" id="Resource_itmis"]
script = ExtResource("7_ekcln")
CueKeys = SubResource("Resource_4mhqs")
MaxValue = 100
MagnitudeType = 2
MagnitudeAttribute = "PlayerAttributeSet.Mana"
metadata/_custom_type_script = "uid://cmrsxccn0ei4j"
[sub_resource type="Resource" id="Resource_8dsdw"]
script = ExtResource("3_16foq")
BaseValue = 1
[sub_resource type="Resource" id="Resource_clulf"]
script = ExtResource("1_qpqxp")
BaseValue = 1.0
[sub_resource type="Resource" id="Resource_4kkx2"]
script = ExtResource("1_qpqxp")
[sub_resource type="Resource" id="Resource_5vdhj"]
script = ExtResource("1_qpqxp")
[sub_resource type="Resource" id="Resource_nx5he"]
script = ExtResource("1_qpqxp")
BaseValue = 1.0
[sub_resource type="Resource" id="Resource_st5kh"]
script = ExtResource("1_qpqxp")
[sub_resource type="Resource" id="Resource_wl5ql"]
script = ExtResource("1_qpqxp")
[sub_resource type="Resource" id="Resource_uv4a1"]
script = ExtResource("1_qpqxp")
BaseValue = -30.0
metadata/_custom_type_script = "uid://cn3b4ya15fg7e"
[sub_resource type="Resource" id="Resource_dhni4"]
script = ExtResource("8_odwcb")
Attribute = "PlayerAttributeSet.Mana"
ScalableFloat = SubResource("Resource_uv4a1")
Coefficient = SubResource("Resource_nx5he")
PreMultiplyAdditiveValue = SubResource("Resource_wl5ql")
PostMultiplyAdditiveValue = SubResource("Resource_st5kh")
CalculatorCoefficient = SubResource("Resource_clulf")
CalculatorPreMultiplyAdditiveValue = SubResource("Resource_5vdhj")
CalculatorPostMultiplyAdditiveValue = SubResource("Resource_4kkx2")
metadata/_custom_type_script = "uid://bdfcavbjyhxxa"
[sub_resource type="Resource" id="Resource_w5rmc"]
script = ExtResource("3_16foq")
BaseValue = 1
[sub_resource type="Resource" id="Resource_mtef8"]
script = ExtResource("4_g4w5p")
Name = "Empowered Action Cost"
Modifiers = Array[Object]([SubResource("Resource_dhni4")])
Components = []
Executions = []
StackLimit = SubResource("Resource_w5rmc")
InitialStack = SubResource("Resource_8dsdw")
Cues = Array[Object]([SubResource("Resource_itmis")])
metadata/_custom_type_script = "uid://b83hf13nj37k3"
[resource]
script = ExtResource("1_7rg1m")
Name = "Empowered Action"
CooldownEffects = [SubResource("Resource_egh2b")]
CostEffect = SubResource("Resource_mtef8")
AbilityBehavior = ExtResource("1_odwcb")
metadata/_custom_type_script = "uid://dhxfbxh54pyxp"

View File

@@ -0,0 +1,24 @@
[gd_resource type="Resource" script_class="ForgeAbilityData" format=3 uid="uid://ifeavnlps7hy"]
[ext_resource type="Script" uid="uid://cw525n4mjqgw0" path="res://addons/forge/resources/ForgeTagContainer.cs" id="1_l3coe"]
[ext_resource type="Script" uid="uid://dhxfbxh54pyxp" path="res://addons/forge/resources/abilities/ForgeAbilityData.cs" id="1_ot53g"]
[ext_resource type="Script" uid="uid://dpakv7agvir6y" path="res://addons/forge/resources/ForgeTag.cs" id="2_un8hi"]
[sub_resource type="Resource" id="Resource_l76xb"]
script = ExtResource("1_l3coe")
ContainerTags = Array[String](["abilities.weapon"])
metadata/_custom_type_script = "uid://cw525n4mjqgw0"
[sub_resource type="Resource" id="Resource_g5tg7"]
script = ExtResource("2_un8hi")
Tag = "events.weapon.startedflying"
metadata/_custom_type_script = "uid://dpakv7agvir6y"
[resource]
script = ExtResource("1_ot53g")
Name = "Exploding Sword"
CooldownEffects = null
TriggerSource = 1
TriggerTag = SubResource("Resource_g5tg7")
AbilityTags = SubResource("Resource_l76xb")
metadata/_custom_type_script = "uid://dhxfbxh54pyxp"

View File

@@ -0,0 +1,7 @@
[gd_resource type="Resource" script_class="ForgeInstantEndBehavior" format=3 uid="uid://crgwob8t8yysq"]
[ext_resource type="Script" uid="uid://c7s5v7ii4nujg" path="res://forge/abilities/ForgeInstantEndBehavior.cs" id="1_hly5b"]
[resource]
script = ExtResource("1_hly5b")
metadata/_custom_type_script = "uid://c7s5v7ii4nujg"

View File

@@ -114,13 +114,19 @@ public partial class PlayerController : CharacterBody3D,
[ExportGroup("General")]
[Export]
public ForgeTagContainer BaseTags { get; set; } = new();
[Export] public REmpoweredAction EmpoweredAction = null!;
[Export] public RManaRegen ManaRegen = null!;
[ExportGroup("Abilities")]
[ExportSubgroup("Common and defaults")]
[Export] public ForgeAbilityData EmpoweredActionAbility = null!;
[Export] public ForgeAbilityData[] DefaultPermanentAbilities = [];
[ExportSubgroup("WeaponThrow")]
[Export] public RExplodingSword[] AbilityLoadout = [];
[ExportGroup("Effects")]
[ExportSubgroup("Common and defaults")]
[Export] public ForgeEffectData[] DefaultPermanentEffects = [];
// Combat stuff
[ExportCategory("Combat")]
[ExportGroup("General")]
@@ -469,13 +475,21 @@ public partial class PlayerController : CharacterBody3D,
Abilities = new(this);
Events = new();
var empoweredActionData = EmpoweredAction.Ability(tagsManager);
// Grant permanently
_empoweredActionHandle = Abilities.GrantAbilityPermanently(
empoweredActionData,
EmpoweredActionAbility.GetAbilityData(),
abilityLevel: 1,
levelOverridePolicy: LevelComparison.None,
sourceEntity: this);
foreach (var ability in DefaultPermanentAbilities)
{
Abilities.GrantAbilityPermanently(
ability.GetAbilityData(),
abilityLevel: 1,
levelOverridePolicy: LevelComparison.None,
sourceEntity: this);
}
// var empoweredActionData = EmpoweredAction.Ability(tagsManager);
// // Grant permanently
var manaRegenEffect = new Effect(ManaRegen.ManaRegen(tagsManager), new EffectOwnership(this, this));
_manaRegenEffectHandle = EffectsManager.ApplyEffect(manaRegenEffect);
@@ -2068,8 +2082,8 @@ public partial class PlayerController : CharacterBody3D,
// Inhibit Mana Regeneration for a while after using an empowered action
// TODO: Use Forge events instead of relying on direct referencing
_manaRegenEffectHandle!.SetInhibit(true);
GetTree().CreateTimer(EmpoweredAction.ManaRegenPause).Timeout += () => {_manaRegenEffectHandle!.SetInhibit(false);};
// _manaRegenEffectHandle!.SetInhibit(true);
// GetTree().CreateTimer(EmpoweredAction.ManaRegenPause).Timeout += () => {_manaRegenEffectHandle!.SetInhibit(false);};
_isWallJumpAvailable = true;
_canDashAirborne = true;