Add more sigil component behavior

This commit is contained in:
2026-06-17 20:58:08 -07:00
parent 68a8769834
commit 30758cd28d
4 changed files with 74 additions and 16 deletions
@@ -8,9 +8,18 @@ public interface ISigil
[Export] [Export]
public double DamageModifier { get; } public double DamageModifier { get; }
[Export]
public double DefenseModifier { get; }
[Export] [Export]
public double MoveSpeedModifier { get; } public double MoveSpeedModifier { get; }
[Export]
public double HealAmountModifier { get; }
[Export]
public double VTDrainSpeedModifier { get; }
[Export] [Export]
public ElementType ElementType { get; } public ElementType ElementType { get; }
+11 -10
View File
@@ -607,8 +607,9 @@ public partial class Game : Node3D, IGame
private void EnactConsumableItemEffects(ConsumableItem consumableItem) private void EnactConsumableItemEffects(ConsumableItem consumableItem)
{ {
var healHPAmount = Mathf.RoundToInt(consumableItem.HealHPAmount * (1 + _player.SigilComponent.Sigil.HealAmountModifier));
if (consumableItem.HealHPAmount > 0 && consumableItem.HealVTAmount > 0) var healVTAmount = Mathf.RoundToInt(consumableItem.HealVTAmount * (1 + _player.SigilComponent.Sigil.HealAmountModifier));
if (healHPAmount > 0 && healVTAmount > 0)
{ {
SfxDatabase.Instance.Play(SoundEffect.Eucharistia); SfxDatabase.Instance.Play(SoundEffect.Eucharistia);
@@ -620,8 +621,8 @@ public partial class Game : Node3D, IGame
} }
else else
{ {
_player.HealthComponent.Heal(consumableItem.HealHPAmount); _player.HealthComponent.Heal(healHPAmount);
_player.VTComponent.Restore(consumableItem.HealVTAmount); _player.VTComponent.Restore(healVTAmount);
InventoryEventNotification.Invoke($"Restored {consumableItem.RaiseHPAmount}HP." + System.Environment.NewLine + $"Restored {consumableItem.RaiseVTAmount}VT."); InventoryEventNotification.Invoke($"Restored {consumableItem.RaiseHPAmount}HP." + System.Environment.NewLine + $"Restored {consumableItem.RaiseVTAmount}VT.");
} }
if (_player.StatusEffectComponent.Rust.Value) if (_player.StatusEffectComponent.Rust.Value)
@@ -644,18 +645,18 @@ public partial class Game : Node3D, IGame
SfxDatabase.Instance.Play(SoundEffect.IncreaseStat); SfxDatabase.Instance.Play(SoundEffect.IncreaseStat);
InventoryEventNotification.Invoke($"Raised maximum VT by {consumableItem.RaiseVTAmount}."); InventoryEventNotification.Invoke($"Raised maximum VT by {consumableItem.RaiseVTAmount}.");
} }
else if (consumableItem.HealHPAmount > 0) else if (healHPAmount > 0)
{ {
var currentHP = _player.HealthComponent.CurrentHP; var currentHP = _player.HealthComponent.CurrentHP;
_player.HealthComponent.Heal(consumableItem.HealHPAmount); _player.HealthComponent.Heal(healHPAmount);
SfxDatabase.Instance.Play(SoundEffect.HealHP); SfxDatabase.Instance.Play(SoundEffect.HealHP);
InventoryEventNotification.Invoke($"Restored {consumableItem.HealHPAmount}HP."); InventoryEventNotification.Invoke($"Restored {healHPAmount}HP.");
} }
else if (consumableItem.HealVTAmount > 0) else if (healVTAmount > 0)
{ {
_player.VTComponent.Restore(consumableItem.HealVTAmount); _player.VTComponent.Restore(healVTAmount);
SfxDatabase.Instance.Play(SoundEffect.HealVT); SfxDatabase.Instance.Play(SoundEffect.HealVT);
InventoryEventNotification.Invoke($"Restored {consumableItem.HealVTAmount}VT."); InventoryEventNotification.Invoke($"Restored {healVTAmount}VT.");
} }
if (consumableItem.Stats.HealsStatusAilments) if (consumableItem.Stats.HealsStatusAilments)
+3 -3
View File
@@ -219,7 +219,6 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<IPlayer>
ExperiencePointsComponent.PlayerLevelUp += OnLevelUp; ExperiencePointsComponent.PlayerLevelUp += OnLevelUp;
ExperiencePointsComponent.PlayerLevelDown += OnLevelDown; ExperiencePointsComponent.PlayerLevelDown += OnLevelDown;
PlayerFXAnimations.AnimationFinished += PlayerFXAnimations_AnimationFinished; PlayerFXAnimations.AnimationFinished += PlayerFXAnimations_AnimationFinished;
HealthTimer.WaitTime = _healthTimerWaitTime;
HealthTimer.Timeout += OnHealthTimerTimeout; HealthTimer.Timeout += OnHealthTimerTimeout;
_projectileCooldownTimer = new Timer(); _projectileCooldownTimer = new Timer();
@@ -248,6 +247,7 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<IPlayer>
{ {
SetProcessInput(true); SetProcessInput(true);
SetPhysicsProcess(true); SetPhysicsProcess(true);
HealthTimer.WaitTime = _healthTimerWaitTime * (1 + SigilComponent.Sigil.VTDrainSpeedModifier);
SetHealthTimerStatus(HealthTimerIsActive); SetHealthTimerStatus(HealthTimerIsActive);
ShowCamera(true); ShowCamera(true);
Hitbox.SetDeferred(Area3D.PropertyName.Monitoring, true); Hitbox.SetDeferred(Area3D.PropertyName.Monitoring, true);
@@ -276,7 +276,7 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<IPlayer>
{ {
HealthTimerSpeedModifier = newSpeed; HealthTimerSpeedModifier = newSpeed;
HealthTimer.Stop(); HealthTimer.Stop();
HealthTimer.WaitTime = _healthTimerWaitTime * newSpeed; HealthTimer.WaitTime = (_healthTimerWaitTime * newSpeed) * (1 + SigilComponent.Sigil.VTDrainSpeedModifier);
HealthTimer.Start(); HealthTimer.Start();
} }
@@ -304,7 +304,7 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<IPlayer>
var defense = TotalDefense; var defense = TotalDefense;
var elementalResistance = EquipmentComponent.ElementalResistance + SigilComponent.Sigil.ElementalResistanceSet; var elementalResistance = EquipmentComponent.ElementalResistance + SigilComponent.Sigil.ElementalResistanceSet;
var damageReceived = DamageCalculator.CalculateDamage(damage, defense, elementalResistance); var damageReceived = DamageCalculator.CalculateDamage(damage, defense, elementalResistance);
damageReceived *= Mathf.RoundToInt(1 + SigilComponent.Sigil.DamageModifier); damageReceived = Mathf.RoundToInt(damageReceived * (1 - SigilComponent.Sigil.DefenseModifier));
GD.Print($"Damage dealt: {damageReceived}"); GD.Print($"Damage dealt: {damageReceived}");
HealthComponent.Damage(damageReceived, damage.ElementType); HealthComponent.Damage(damageReceived, damage.ElementType);
SfxDatabase.Instance.Play(SoundEffect.TakeDamage); SfxDatabase.Instance.Play(SoundEffect.TakeDamage);
+51 -3
View File
@@ -16,8 +16,14 @@ public partial class NoneSigil : ISigil
{ {
public double DamageModifier { get; } = 0; public double DamageModifier { get; } = 0;
public double DefenseModifier { get; } = 0;
public double MoveSpeedModifier { get; } = 0; public double MoveSpeedModifier { get; } = 0;
public double HealAmountModifier { get; } = 0;
public double VTDrainSpeedModifier { get; } = 0;
public bool AutoRevive { get; } = false; public bool AutoRevive { get; } = false;
public ElementType ElementType { get; } = ElementType.None; public ElementType ElementType { get; } = ElementType.None;
@@ -29,10 +35,16 @@ public partial class NoneSigil : ISigil
public partial class AeolicSigil : ISigil public partial class AeolicSigil : ISigil
{ {
public double DamageModifier { get; } = 0; public double DamageModifier { get; } = -0.25;
public double DefenseModifier { get; } = 0;
public double MoveSpeedModifier { get; } = 0.25; public double MoveSpeedModifier { get; } = 0.25;
public double HealAmountModifier { get; } = 0;
public double VTDrainSpeedModifier { get; } = 0;
public bool AutoRevive { get; } = false; public bool AutoRevive { get; } = false;
public ElementType ElementType { get; } = ElementType.Aeolic; public ElementType ElementType { get; } = ElementType.Aeolic;
@@ -44,10 +56,16 @@ public partial class AeolicSigil : ISigil
public partial class IgneousSigil : ISigil public partial class IgneousSigil : ISigil
{ {
public double DamageModifier { get; } = 0.5; public double DamageModifier { get; } = 0.25;
public double DefenseModifier { get; } = -0.25;
public double MoveSpeedModifier { get; } = 0; public double MoveSpeedModifier { get; } = 0;
public double HealAmountModifier { get; } = 0;
public double VTDrainSpeedModifier { get; } = 0;
public bool AutoRevive { get; } = false; public bool AutoRevive { get; } = false;
public ElementType ElementType { get; } = ElementType.Igneous; public ElementType ElementType { get; } = ElementType.Igneous;
@@ -60,7 +78,13 @@ public partial class TelluricSigil : ISigil
{ {
public double DamageModifier { get; } = 0; public double DamageModifier { get; } = 0;
public double MoveSpeedModifier { get; } = 0; public double DefenseModifier { get; } = 0.25;
public double MoveSpeedModifier { get; } = -0.25;
public double HealAmountModifier { get; } = 0;
public double VTDrainSpeedModifier { get; } = 0;
public bool AutoRevive { get; } = false; public bool AutoRevive { get; } = false;
@@ -75,8 +99,14 @@ public partial class HydricSigil : ISigil
{ {
public double DamageModifier { get; } = 0; public double DamageModifier { get; } = 0;
public double DefenseModifier { get; } = 0;
public double MoveSpeedModifier { get; } = 0; public double MoveSpeedModifier { get; } = 0;
public double HealAmountModifier { get; } = 0.25;
public double VTDrainSpeedModifier { get; } = -0.25;
public bool AutoRevive { get; } = false; public bool AutoRevive { get; } = false;
public ElementType ElementType { get; } = ElementType.Hydric; public ElementType ElementType { get; } = ElementType.Hydric;
@@ -90,8 +120,14 @@ public partial class FerrumSigil : ISigil
{ {
public double DamageModifier { get; } public double DamageModifier { get; }
public double DefenseModifier { get; } = 0;
public double MoveSpeedModifier { get; } = 0; public double MoveSpeedModifier { get; } = 0;
public double HealAmountModifier { get; } = 0;
public double VTDrainSpeedModifier { get; } = 0;
public bool AutoRevive { get; } = false; public bool AutoRevive { get; } = false;
public ElementType ElementType { get; } = ElementType.Ferrum; public ElementType ElementType { get; } = ElementType.Ferrum;
@@ -105,8 +141,14 @@ public partial class SanktaSigil : ISigil
{ {
public double DamageModifier { get; } public double DamageModifier { get; }
public double DefenseModifier { get; } = 0;
public double MoveSpeedModifier { get; } = 0; public double MoveSpeedModifier { get; } = 0;
public double HealAmountModifier { get; } = 0;
public double VTDrainSpeedModifier { get; } = 0;
public bool AutoRevive { get; } = true; public bool AutoRevive { get; } = true;
public ElementType ElementType { get; } = ElementType.Sankta; public ElementType ElementType { get; } = ElementType.Sankta;
@@ -120,8 +162,14 @@ public partial class ShuraSigil : ISigil
{ {
public double DamageModifier { get; } public double DamageModifier { get; }
public double DefenseModifier { get; } = 0;
public double MoveSpeedModifier { get; } = 0; public double MoveSpeedModifier { get; } = 0;
public double HealAmountModifier { get; } = 0;
public double VTDrainSpeedModifier { get; } = 0;
public bool AutoRevive { get; } = false; public bool AutoRevive { get; } = false;
public ElementType ElementType { get; } = ElementType.Shura; public ElementType ElementType { get; } = ElementType.Shura;