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
+11 -10
View File
@@ -607,8 +607,9 @@ public partial class Game : Node3D, IGame
private void EnactConsumableItemEffects(ConsumableItem consumableItem)
{
if (consumableItem.HealHPAmount > 0 && consumableItem.HealVTAmount > 0)
var healHPAmount = Mathf.RoundToInt(consumableItem.HealHPAmount * (1 + _player.SigilComponent.Sigil.HealAmountModifier));
var healVTAmount = Mathf.RoundToInt(consumableItem.HealVTAmount * (1 + _player.SigilComponent.Sigil.HealAmountModifier));
if (healHPAmount > 0 && healVTAmount > 0)
{
SfxDatabase.Instance.Play(SoundEffect.Eucharistia);
@@ -620,8 +621,8 @@ public partial class Game : Node3D, IGame
}
else
{
_player.HealthComponent.Heal(consumableItem.HealHPAmount);
_player.VTComponent.Restore(consumableItem.HealVTAmount);
_player.HealthComponent.Heal(healHPAmount);
_player.VTComponent.Restore(healVTAmount);
InventoryEventNotification.Invoke($"Restored {consumableItem.RaiseHPAmount}HP." + System.Environment.NewLine + $"Restored {consumableItem.RaiseVTAmount}VT.");
}
if (_player.StatusEffectComponent.Rust.Value)
@@ -644,18 +645,18 @@ public partial class Game : Node3D, IGame
SfxDatabase.Instance.Play(SoundEffect.IncreaseStat);
InventoryEventNotification.Invoke($"Raised maximum VT by {consumableItem.RaiseVTAmount}.");
}
else if (consumableItem.HealHPAmount > 0)
else if (healHPAmount > 0)
{
var currentHP = _player.HealthComponent.CurrentHP;
_player.HealthComponent.Heal(consumableItem.HealHPAmount);
_player.HealthComponent.Heal(healHPAmount);
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);
InventoryEventNotification.Invoke($"Restored {consumableItem.HealVTAmount}VT.");
InventoryEventNotification.Invoke($"Restored {healVTAmount}VT.");
}
if (consumableItem.Stats.HealsStatusAilments)
+3 -3
View File
@@ -219,7 +219,6 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<IPlayer>
ExperiencePointsComponent.PlayerLevelUp += OnLevelUp;
ExperiencePointsComponent.PlayerLevelDown += OnLevelDown;
PlayerFXAnimations.AnimationFinished += PlayerFXAnimations_AnimationFinished;
HealthTimer.WaitTime = _healthTimerWaitTime;
HealthTimer.Timeout += OnHealthTimerTimeout;
_projectileCooldownTimer = new Timer();
@@ -248,6 +247,7 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<IPlayer>
{
SetProcessInput(true);
SetPhysicsProcess(true);
HealthTimer.WaitTime = _healthTimerWaitTime * (1 + SigilComponent.Sigil.VTDrainSpeedModifier);
SetHealthTimerStatus(HealthTimerIsActive);
ShowCamera(true);
Hitbox.SetDeferred(Area3D.PropertyName.Monitoring, true);
@@ -276,7 +276,7 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<IPlayer>
{
HealthTimerSpeedModifier = newSpeed;
HealthTimer.Stop();
HealthTimer.WaitTime = _healthTimerWaitTime * newSpeed;
HealthTimer.WaitTime = (_healthTimerWaitTime * newSpeed) * (1 + SigilComponent.Sigil.VTDrainSpeedModifier);
HealthTimer.Start();
}
@@ -304,7 +304,7 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<IPlayer>
var defense = TotalDefense;
var elementalResistance = EquipmentComponent.ElementalResistance + SigilComponent.Sigil.ElementalResistanceSet;
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}");
HealthComponent.Damage(damageReceived, damage.ElementType);
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 DefenseModifier { get; } = 0;
public double MoveSpeedModifier { get; } = 0;
public double HealAmountModifier { get; } = 0;
public double VTDrainSpeedModifier { get; } = 0;
public bool AutoRevive { get; } = false;
public ElementType ElementType { get; } = ElementType.None;
@@ -29,10 +35,16 @@ public partial class NoneSigil : 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 HealAmountModifier { get; } = 0;
public double VTDrainSpeedModifier { get; } = 0;
public bool AutoRevive { get; } = false;
public ElementType ElementType { get; } = ElementType.Aeolic;
@@ -44,10 +56,16 @@ public partial class AeolicSigil : 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 HealAmountModifier { get; } = 0;
public double VTDrainSpeedModifier { get; } = 0;
public bool AutoRevive { get; } = false;
public ElementType ElementType { get; } = ElementType.Igneous;
@@ -60,7 +78,13 @@ public partial class TelluricSigil : ISigil
{
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;
@@ -75,8 +99,14 @@ public partial class HydricSigil : ISigil
{
public double DamageModifier { get; } = 0;
public double DefenseModifier { 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 ElementType ElementType { get; } = ElementType.Hydric;
@@ -90,8 +120,14 @@ public partial class FerrumSigil : ISigil
{
public double DamageModifier { get; }
public double DefenseModifier { get; } = 0;
public double MoveSpeedModifier { get; } = 0;
public double HealAmountModifier { get; } = 0;
public double VTDrainSpeedModifier { get; } = 0;
public bool AutoRevive { get; } = false;
public ElementType ElementType { get; } = ElementType.Ferrum;
@@ -105,8 +141,14 @@ public partial class SanktaSigil : ISigil
{
public double DamageModifier { get; }
public double DefenseModifier { get; } = 0;
public double MoveSpeedModifier { get; } = 0;
public double HealAmountModifier { get; } = 0;
public double VTDrainSpeedModifier { get; } = 0;
public bool AutoRevive { get; } = true;
public ElementType ElementType { get; } = ElementType.Sankta;
@@ -120,8 +162,14 @@ public partial class ShuraSigil : ISigil
{
public double DamageModifier { get; }
public double DefenseModifier { get; } = 0;
public double MoveSpeedModifier { get; } = 0;
public double HealAmountModifier { get; } = 0;
public double VTDrainSpeedModifier { get; } = 0;
public bool AutoRevive { get; } = false;
public ElementType ElementType { get; } = ElementType.Shura;