Implement some Sigil behaviors

This commit is contained in:
2026-06-06 23:32:13 -07:00
parent 72f8b5c050
commit d2a81bb1cf
6 changed files with 182 additions and 168 deletions
+12 -6
View File
@@ -297,8 +297,11 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<IPlayer>
_camera3D.AddShake(1.0f);
TakeDamageAnimationPlayer.Play("take_damage");
var defense = TotalDefense * SigilComponent.Sigil.DefenseModifier;
var damageReceived = DamageCalculator.CalculateDamage(damage, defense, EquipmentComponent.ElementalResistance);
var defense = TotalDefense;
var elementalResistance = EquipmentComponent.ElementalResistance + SigilComponent.Sigil.ElementalResistanceSet;
var damageReceived = DamageCalculator.CalculateDamage(damage, defense, elementalResistance);
damageReceived *= Mathf.RoundToInt(1 + SigilComponent.Sigil.DamageModifier);
GD.Print($"Damage dealt: {damageReceived}");
HealthComponent.Damage(damageReceived, damage.ElementType);
SfxDatabase.Instance.Play(SoundEffect.TakeDamage);
@@ -341,7 +344,7 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<IPlayer>
{
PlayerFXAnimations.Play("death");
if (AutoRevive)
if (AutoRevive || SigilComponent.Sigil.AutoRevive)
return;
SetSigil(new NoneSigil());
@@ -790,7 +793,7 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<IPlayer>
{
if (animName == "death")
{
if (AutoRevive)
if (AutoRevive || SigilComponent.Sigil.AutoRevive)
PlayerFXAnimations.PlayBackwards("revive");
else
PlayerDied?.Invoke();
@@ -856,6 +859,7 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<IPlayer>
var rawInput = GlobalInputVector;
var strafeLeftInput = LeftStrafeInputVector;
var strafeRightInput = RightStrafeInputVector;
var moveSpeed = Settings.MoveSpeed * (1 + SigilComponent.Sigil.MoveSpeedModifier);
var transform = Transform;
transform.Basis = new Basis(Vector3.Up, Settings.RotationSpeed * -rawInput.X * delta) * transform.Basis;
@@ -872,7 +876,7 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<IPlayer>
else if (WalkSFX.Playing)
WalkSFX.Stop();
var velocity = (Basis * moveDirection * Settings.MoveSpeed * Settings.Acceleration);
var velocity = (Basis * moveDirection * (float)moveSpeed * Settings.Acceleration);
if (_debugSprint)
velocity *= 2;
_knockbackStrength *= 0.9f;
@@ -916,7 +920,7 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<IPlayer>
if (SigilComponent.Sigil.ElementType == weapon.WeaponElement)
totalDamage = Mathf.RoundToInt(totalDamage * 1.15f);
totalDamage = Mathf.RoundToInt(totalDamage * (1 + SigilComponent.Sigil.AttackModifier));
totalDamage = Mathf.RoundToInt(totalDamage * (1 + SigilComponent.Sigil.DamageModifier));
if (isCriticalHit)
{
@@ -924,6 +928,8 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<IPlayer>
SfxDatabase.Instance.Play(SoundEffect.Crit);
}
GD.Print($"Damage dealt: {totalDamage}");
var baseAttack = new AttackData(totalDamage, weapon.WeaponElement, weapon.WeaponTag == WeaponTag.IgnoreDefense, weapon.WeaponTag == WeaponTag.IgnoreAffinity);
var damageDealt = DamageCalculator.CalculateDamage(baseAttack, enemy.DefenseComponent.CurrentDefense.Value, enemy.ElementalResistanceSet);