From c246d8d654c80eddaa03baf32ef5f2d3ea212243 Mon Sep 17 00:00:00 2001 From: Zenny Date: Thu, 12 Feb 2026 02:58:30 -0800 Subject: [PATCH] Fix crit calculation and bonus attack/def/luck --- Zennysoft.Game.Ma/src/items/EffectService.cs | 2 +- .../src/items/accessory/Accessory.cs | 12 +++++++++ Zennysoft.Game.Ma/src/items/armor/Armor.cs | 12 +++++++++ Zennysoft.Game.Ma/src/items/weapons/Weapon.cs | 12 ++++++--- Zennysoft.Game.Ma/src/player/Player.cs | 26 +++++++++---------- .../src/player/PlayerEffectService.cs | 2 +- .../src/system/stats/BattleExtensions.cs | 4 +-- 7 files changed, 49 insertions(+), 21 deletions(-) diff --git a/Zennysoft.Game.Ma/src/items/EffectService.cs b/Zennysoft.Game.Ma/src/items/EffectService.cs index 386a84e8a..264870fe5 100644 --- a/Zennysoft.Game.Ma/src/items/EffectService.cs +++ b/Zennysoft.Game.Ma/src/items/EffectService.cs @@ -158,7 +158,7 @@ public class EffectService return; var currentWeapon = (Weapon)_player.EquipmentComponent.EquippedWeapon.Value; - currentWeapon.IncreaseWeaponAttack(1); + currentWeapon.IncreaseAttack(1); SfxDatabase.Instance.Play(SoundEffect.IncreaseStat); } diff --git a/Zennysoft.Game.Ma/src/items/accessory/Accessory.cs b/Zennysoft.Game.Ma/src/items/accessory/Accessory.cs index 2ebcf55a5..b06ba9dd4 100644 --- a/Zennysoft.Game.Ma/src/items/accessory/Accessory.cs +++ b/Zennysoft.Game.Ma/src/items/accessory/Accessory.cs @@ -57,6 +57,18 @@ public partial class Accessory : EquipableItem [Save("accessory_bonus_luck")] 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] [Save("accessory_stats")] public AccessoryStats Stats { get; set; } = new AccessoryStats(); diff --git a/Zennysoft.Game.Ma/src/items/armor/Armor.cs b/Zennysoft.Game.Ma/src/items/armor/Armor.cs index d7a2c233e..efbd3be07 100644 --- a/Zennysoft.Game.Ma/src/items/armor/Armor.cs +++ b/Zennysoft.Game.Ma/src/items/armor/Armor.cs @@ -38,6 +38,18 @@ public partial class Armor : EquipableItem 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")] private int _bonusDamage { get; set; } = 0; diff --git a/Zennysoft.Game.Ma/src/items/weapons/Weapon.cs b/Zennysoft.Game.Ma/src/items/weapons/Weapon.cs index 91c27093e..5f0db1a40 100644 --- a/Zennysoft.Game.Ma/src/items/weapons/Weapon.cs +++ b/Zennysoft.Game.Ma/src/items/weapons/Weapon.cs @@ -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 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; } diff --git a/Zennysoft.Game.Ma/src/player/Player.cs b/Zennysoft.Game.Ma/src/player/Player.cs index 3a280c7bc..227b63255 100644 --- a/Zennysoft.Game.Ma/src/player/Player.cs +++ b/Zennysoft.Game.Ma/src/player/Player.cs @@ -388,13 +388,13 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide weapon.Augment = new Augment(JewelTags.AutoIdentifyAllItems, new IdentifyAllItemsAugment(this)); break; case JewelTags.IncreaseAtkDefLuck: - weapon.Stats.BonusAttack += 2; - weapon.Stats.BonusDefense += 2; - weapon.Stats.BonusLuck += 10; + weapon.IncreaseAttack(2); + weapon.IncreaseDefense(2); + weapon.IncreaseLuck(10); weapon.Augment = new Augment(JewelTags.IncreaseAtkDefLuck, new BasicAugment()); break; case JewelTags.IncreaseLuck: - weapon.Stats.BonusLuck += 25; + weapon.IncreaseLuck(25); weapon.Augment = new Augment(JewelTags.IncreaseLuck, new BasicAugment()); break; } @@ -442,13 +442,13 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide armor.Augment = new Augment(JewelTags.AutoIdentifyAllItems, new IdentifyAllItemsAugment(this)); break; case JewelTags.IncreaseAtkDefLuck: - armor.Stats.BonusAttack += 2; - armor.Stats.BonusDefense += 2; - armor.Stats.BonusLuck += 10; + armor.IncreaseAttack(2); + armor.IncreaseDefense(2); + armor.IncreaseLuck(10); armor.Augment = new Augment(JewelTags.IncreaseAtkDefLuck, new BasicAugment()); break; case JewelTags.IncreaseLuck: - armor.Stats.BonusLuck += 25; + armor.IncreaseLuck(25); armor.Augment = new Augment(JewelTags.IncreaseLuck, new BasicAugment()); break; } @@ -496,13 +496,13 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide accessory.Augment = new Augment(JewelTags.AutoIdentifyAllItems, new IdentifyAllItemsAugment(this)); break; case JewelTags.IncreaseAtkDefLuck: - accessory.Stats.BonusAttack += 2; - accessory.Stats.BonusDefense += 2; - accessory.Stats.BonusLuck += 10; + accessory.IncreaseAttack(2); + accessory.IncreaseDefense(2); + accessory.IncreaseLuck(10); accessory.Augment = new Augment(JewelTags.IncreaseAtkDefLuck, new BasicAugment()); break; case JewelTags.IncreaseLuck: - accessory.Stats.BonusLuck += 25; + accessory.IncreaseLuck(25); accessory.Augment = new Augment(JewelTags.IncreaseLuck, new BasicAugment()); break; } @@ -672,7 +672,7 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide if (weapon.WeaponTag == WeaponTag.InverseHPAttackPower) { var healthPercentage = (HealthComponent.CurrentHP.Value * 10) / HealthComponent.MaximumHP.Value; - weapon.SetWeaponAttack(10 - healthPercentage); + weapon.SetAttack(10 - healthPercentage); EquipmentComponent.Equip(weapon); } } diff --git a/Zennysoft.Game.Ma/src/player/PlayerEffectService.cs b/Zennysoft.Game.Ma/src/player/PlayerEffectService.cs index dd655a295..41e9c4aff 100644 --- a/Zennysoft.Game.Ma/src/player/PlayerEffectService.cs +++ b/Zennysoft.Game.Ma/src/player/PlayerEffectService.cs @@ -29,7 +29,7 @@ internal class PlayerEffectService { var weapon = _player.EquipmentComponent.EquippedWeapon.Value as Weapon; var newAttack = Mathf.Max(weapon.BonusAttack - 1, 0); - weapon.SetWeaponAttack(newAttack); + weapon.SetAttack(newAttack); _player.EquipmentComponent.UpdateEquipment(weapon); } } \ No newline at end of file diff --git a/Zennysoft.Game.Ma/src/system/stats/BattleExtensions.cs b/Zennysoft.Game.Ma/src/system/stats/BattleExtensions.cs index 1bb48481e..025b8b6c2 100644 --- a/Zennysoft.Game.Ma/src/system/stats/BattleExtensions.cs +++ b/Zennysoft.Game.Ma/src/system/stats/BattleExtensions.cs @@ -8,8 +8,8 @@ public static class BattleExtensions { var rng = new RandomNumberGenerator(); rng.Randomize(); - var roll = rng.Randf(); - var isCriticalHit = roll <= (luckStat / 100); + var roll = rng.Randf() * 100; + var isCriticalHit = roll <= luckStat; return isCriticalHit; } }