Fix crit calculation and bonus attack/def/luck

This commit is contained in:
2026-02-12 02:58:30 -08:00
parent b475df6f68
commit c246d8d654
7 changed files with 49 additions and 21 deletions

View File

@@ -158,7 +158,7 @@ public class EffectService
return; return;
var currentWeapon = (Weapon)_player.EquipmentComponent.EquippedWeapon.Value; var currentWeapon = (Weapon)_player.EquipmentComponent.EquippedWeapon.Value;
currentWeapon.IncreaseWeaponAttack(1); currentWeapon.IncreaseAttack(1);
SfxDatabase.Instance.Play(SoundEffect.IncreaseStat); SfxDatabase.Instance.Play(SoundEffect.IncreaseStat);
} }

View File

@@ -57,6 +57,18 @@ public partial class Accessory : EquipableItem
[Save("accessory_bonus_luck")] [Save("accessory_bonus_luck")]
private int _bonusLuck { get; set; } = 0; private int _bonusLuck { get; set; } = 0;
public void IncreaseAttack(int bonus) => _bonusDamage += bonus;
public void SetAttack(int newBonus) => _bonusDamage = newBonus;
public void IncreaseDefense(int bonus) => _bonusDefense += bonus;
public void SetDefense(int newBonus) => _bonusDefense = newBonus;
public void IncreaseLuck(int bonus) => _bonusLuck += bonus;
public void SetLuck(int newBonus) => _bonusLuck = newBonus;
[Export] [Export]
[Save("accessory_stats")] [Save("accessory_stats")]
public AccessoryStats Stats { get; set; } = new AccessoryStats(); public AccessoryStats Stats { get; set; } = new AccessoryStats();

View File

@@ -38,6 +38,18 @@ public partial class Armor : EquipableItem
public override int BonusLuck { get => _bonusLuck; } public override int BonusLuck { get => _bonusLuck; }
public void IncreaseAttack(int bonus) => _bonusDamage += bonus;
public void SetAttack(int newBonus) => _bonusDamage = newBonus;
public void IncreaseDefense(int bonus) => _bonusDefense += bonus;
public void SetDefense(int newBonus) => _bonusDefense = newBonus;
public void IncreaseLuck(int bonus) => _bonusLuck += bonus;
public void SetLuck(int newBonus) => _bonusLuck = newBonus;
[Save("armor_bonus_damage")] [Save("armor_bonus_damage")]
private int _bonusDamage { get; set; } = 0; private int _bonusDamage { get; set; } = 0;

View File

@@ -46,13 +46,17 @@ public partial class Weapon : EquipableItem
public override ElementalResistanceSet ElementalResistance => new ElementalResistanceSet(Stats.AeolicResistance, Stats.HydricResistance, Stats.IgneousResistance, Stats.FerrumResistance, Stats.TelluricResistance, Stats.HolyResistance, Stats.CurseResistance); public override ElementalResistanceSet ElementalResistance => new ElementalResistanceSet(Stats.AeolicResistance, Stats.HydricResistance, Stats.IgneousResistance, Stats.FerrumResistance, Stats.TelluricResistance, Stats.HolyResistance, Stats.CurseResistance);
public void IncreaseWeaponAttack(int bonus) => _bonusDamage += bonus; public void IncreaseAttack(int bonus) => _bonusDamage += bonus;
public void SetWeaponAttack(int newBonus) => _bonusDamage = newBonus; public void SetAttack(int newBonus) => _bonusDamage = newBonus;
public void IncreaseWeaponDefense(int bonus) => _bonusDefense += bonus; public void IncreaseDefense(int bonus) => _bonusDefense += bonus;
public void SetWeaponDefense(int newBonus) => _bonusDefense = newBonus; public void SetDefense(int newBonus) => _bonusDefense = newBonus;
public void IncreaseLuck(int bonus) => _bonusLuck += bonus;
public void SetLuck(int newBonus) => _bonusLuck = newBonus;
public override int BonusAttack { get => _bonusDamage; } public override int BonusAttack { get => _bonusDamage; }

View File

@@ -388,13 +388,13 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<IPlayer>
weapon.Augment = new Augment(JewelTags.AutoIdentifyAllItems, new IdentifyAllItemsAugment(this)); weapon.Augment = new Augment(JewelTags.AutoIdentifyAllItems, new IdentifyAllItemsAugment(this));
break; break;
case JewelTags.IncreaseAtkDefLuck: case JewelTags.IncreaseAtkDefLuck:
weapon.Stats.BonusAttack += 2; weapon.IncreaseAttack(2);
weapon.Stats.BonusDefense += 2; weapon.IncreaseDefense(2);
weapon.Stats.BonusLuck += 10; weapon.IncreaseLuck(10);
weapon.Augment = new Augment(JewelTags.IncreaseAtkDefLuck, new BasicAugment()); weapon.Augment = new Augment(JewelTags.IncreaseAtkDefLuck, new BasicAugment());
break; break;
case JewelTags.IncreaseLuck: case JewelTags.IncreaseLuck:
weapon.Stats.BonusLuck += 25; weapon.IncreaseLuck(25);
weapon.Augment = new Augment(JewelTags.IncreaseLuck, new BasicAugment()); weapon.Augment = new Augment(JewelTags.IncreaseLuck, new BasicAugment());
break; break;
} }
@@ -442,13 +442,13 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<IPlayer>
armor.Augment = new Augment(JewelTags.AutoIdentifyAllItems, new IdentifyAllItemsAugment(this)); armor.Augment = new Augment(JewelTags.AutoIdentifyAllItems, new IdentifyAllItemsAugment(this));
break; break;
case JewelTags.IncreaseAtkDefLuck: case JewelTags.IncreaseAtkDefLuck:
armor.Stats.BonusAttack += 2; armor.IncreaseAttack(2);
armor.Stats.BonusDefense += 2; armor.IncreaseDefense(2);
armor.Stats.BonusLuck += 10; armor.IncreaseLuck(10);
armor.Augment = new Augment(JewelTags.IncreaseAtkDefLuck, new BasicAugment()); armor.Augment = new Augment(JewelTags.IncreaseAtkDefLuck, new BasicAugment());
break; break;
case JewelTags.IncreaseLuck: case JewelTags.IncreaseLuck:
armor.Stats.BonusLuck += 25; armor.IncreaseLuck(25);
armor.Augment = new Augment(JewelTags.IncreaseLuck, new BasicAugment()); armor.Augment = new Augment(JewelTags.IncreaseLuck, new BasicAugment());
break; break;
} }
@@ -496,13 +496,13 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<IPlayer>
accessory.Augment = new Augment(JewelTags.AutoIdentifyAllItems, new IdentifyAllItemsAugment(this)); accessory.Augment = new Augment(JewelTags.AutoIdentifyAllItems, new IdentifyAllItemsAugment(this));
break; break;
case JewelTags.IncreaseAtkDefLuck: case JewelTags.IncreaseAtkDefLuck:
accessory.Stats.BonusAttack += 2; accessory.IncreaseAttack(2);
accessory.Stats.BonusDefense += 2; accessory.IncreaseDefense(2);
accessory.Stats.BonusLuck += 10; accessory.IncreaseLuck(10);
accessory.Augment = new Augment(JewelTags.IncreaseAtkDefLuck, new BasicAugment()); accessory.Augment = new Augment(JewelTags.IncreaseAtkDefLuck, new BasicAugment());
break; break;
case JewelTags.IncreaseLuck: case JewelTags.IncreaseLuck:
accessory.Stats.BonusLuck += 25; accessory.IncreaseLuck(25);
accessory.Augment = new Augment(JewelTags.IncreaseLuck, new BasicAugment()); accessory.Augment = new Augment(JewelTags.IncreaseLuck, new BasicAugment());
break; break;
} }
@@ -672,7 +672,7 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<IPlayer>
if (weapon.WeaponTag == WeaponTag.InverseHPAttackPower) if (weapon.WeaponTag == WeaponTag.InverseHPAttackPower)
{ {
var healthPercentage = (HealthComponent.CurrentHP.Value * 10) / HealthComponent.MaximumHP.Value; var healthPercentage = (HealthComponent.CurrentHP.Value * 10) / HealthComponent.MaximumHP.Value;
weapon.SetWeaponAttack(10 - healthPercentage); weapon.SetAttack(10 - healthPercentage);
EquipmentComponent.Equip(weapon); EquipmentComponent.Equip(weapon);
} }
} }

View File

@@ -29,7 +29,7 @@ internal class PlayerEffectService
{ {
var weapon = _player.EquipmentComponent.EquippedWeapon.Value as Weapon; var weapon = _player.EquipmentComponent.EquippedWeapon.Value as Weapon;
var newAttack = Mathf.Max(weapon.BonusAttack - 1, 0); var newAttack = Mathf.Max(weapon.BonusAttack - 1, 0);
weapon.SetWeaponAttack(newAttack); weapon.SetAttack(newAttack);
_player.EquipmentComponent.UpdateEquipment(weapon); _player.EquipmentComponent.UpdateEquipment(weapon);
} }
} }

View File

@@ -8,8 +8,8 @@ public static class BattleExtensions
{ {
var rng = new RandomNumberGenerator(); var rng = new RandomNumberGenerator();
rng.Randomize(); rng.Randomize();
var roll = rng.Randf(); var roll = rng.Randf() * 100;
var isCriticalHit = roll <= (luckStat / 100); var isCriticalHit = roll <= luckStat;
return isCriticalHit; return isCriticalHit;
} }
} }