From 6cdec42146eb705d6c11f4951e7b1d26e4d83016 Mon Sep 17 00:00:00 2001 From: Jack Date: Mon, 23 Mar 2026 06:55:01 +1300 Subject: [PATCH] fix: Special moves and various UOR+ bonuses (#2384) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Special moves Special moves were added [27 Apr, 2000.](https://uo.com/wiki/ultima-online-wiki/technical/previous-publishes/2000-2/2000-publish-05-27th-april/). This is well past the discussed cutoff date for T2A, which is **[Nov 23, 1999 - Publish 1](https://uo.com/wiki/ultima-online-wiki/technical/previous-publishes/1999-2/1999-publish-01-23rd-november/)** as per the UOSecondAge shard which is the golden standard for T2A accuracy and represents a logical cutoff for this era. Regarding the specific date: **Nov 23, 1999 (Publish 1)** - the game significantly changed as a "pre-patch" to UOR on this date, and UOSecondAge picks and chooses from this date based on QoL features, while keeping the gameplay accurate to what is widely known as the "T2A era". However this date is ~4 months before the actual UOR release date. ## Defensive wrestling Defensively wrestling as (eval+anat)/2 was added in [publish 16](https://uo.com/wiki/ultima-online-wiki/technical/previous-publishes/2002-2/publish-16-changes-and-bug-fixes-24th-july/) and should be gated behind !Core.LBR * "Unarmed “to-be-hit” changes (chance to get hit while unarmed is now the better of either Wrestling skill, or an average of Anatomy & Evaluate Intelligence)." ## Lumberjacking damage bonus Lumberjacking damage bonus was added in [UOR](https://uo.com/wiki/ultima-online-wiki/technical/previous-publishes/2000-2/2000-publish-05-27th-april/) ## Anatomy and LJ +10% GM bonus Anatomy/LJ +10% GM bonus was added in [pub 13](https://uo.com/wiki/ultima-online-wiki/technical/previous-publishes/2001-2/2001-publish-13-19th-august/), which was during UOTD. --- Projects/UOContent/Items/Weapons/Axes/BaseAxe.cs | 2 +- Projects/UOContent/Items/Weapons/BaseWeapon.cs | 14 +++++++------- Projects/UOContent/Items/Weapons/Fists.cs | 12 +++++++++--- .../UOContent/Items/Weapons/Maces/BaseBashing.cs | 2 +- .../Items/Weapons/SpearsAndForks/BaseSpear.cs | 2 +- 5 files changed, 19 insertions(+), 13 deletions(-) diff --git a/Projects/UOContent/Items/Weapons/Axes/BaseAxe.cs b/Projects/UOContent/Items/Weapons/Axes/BaseAxe.cs index 9b1c0ae66..13c41d0c4 100644 --- a/Projects/UOContent/Items/Weapons/Axes/BaseAxe.cs +++ b/Projects/UOContent/Items/Weapons/Axes/BaseAxe.cs @@ -112,7 +112,7 @@ namespace Server.Items { base.OnHit(attacker, defender, damageBonus); - if (!Core.AOS && (attacker.Player || attacker.Body.IsHuman) && Layer == Layer.TwoHanded && + if (!Core.AOS && Core.UOR && (attacker.Player || attacker.Body.IsHuman) && Layer == Layer.TwoHanded && attacker.Skills.Anatomy.Value >= 80 && attacker.Skills.Anatomy.Value / 400.0 >= Utility.RandomDouble() && DuelContext.AllowSpecialAbility(attacker, "Concussion Blow", false)) diff --git a/Projects/UOContent/Items/Weapons/BaseWeapon.cs b/Projects/UOContent/Items/Weapons/BaseWeapon.cs index 81cf9ee5a..b3397a59c 100644 --- a/Projects/UOContent/Items/Weapons/BaseWeapon.cs +++ b/Projects/UOContent/Items/Weapons/BaseWeapon.cs @@ -2615,7 +2615,7 @@ public abstract partial class BaseWeapon // Passively check Anatomy for gain attacker.CheckSkill(SkillName.Anatomy, 0.0, attacker.Skills.Anatomy.Cap); - if (Type == WeaponType.Axe) + if (Core.UOR && Type == WeaponType.Axe) { // Passively check Lumberjacking for gain attacker.CheckSkill(SkillName.Lumberjacking, 0.0, 100.0); @@ -2636,27 +2636,27 @@ public abstract partial class BaseWeapon /* Compute anatomy modifier * : 1% bonus for every 5 points of anatomy - * : +10% bonus at Grandmaster or higher + * : +10% bonus at Grandmaster or higher (UOTD+) */ var anatomyValue = attacker.Skills.Anatomy.Value; modifiers += anatomyValue / 5.0 / 100.0; - if (anatomyValue >= 100.0) + if (Core.UOTD && anatomyValue >= 100.0) { modifiers += 0.1; } - /* Compute lumberjacking bonus + /* Compute lumberjacking bonus (UOR+) * : 1% bonus for every 5 points of lumberjacking - * : +10% bonus at Grandmaster or higher + * : +10% bonus at Grandmaster or higher (UOTD+) */ - if (Type == WeaponType.Axe) + if (Core.UOR && Type == WeaponType.Axe) { var lumberValue = attacker.Skills.Lumberjacking.Value; modifiers += lumberValue / 5.0 / 100.0; - if (lumberValue >= 100.0) + if (Core.UOTD && lumberValue >= 100.0) { modifiers += 0.1; } diff --git a/Projects/UOContent/Items/Weapons/Fists.cs b/Projects/UOContent/Items/Weapons/Fists.cs index fc4dd2584..ba73fb665 100644 --- a/Projects/UOContent/Items/Weapons/Fists.cs +++ b/Projects/UOContent/Items/Weapons/Fists.cs @@ -45,6 +45,12 @@ namespace Server.Items public override double GetDefendSkillValue(Mobile attacker, Mobile defender) { var wresValue = defender.Skills.Wrestling.Value; + + if (!Core.LBR) + { + return wresValue; + } + var anatValue = defender.Skills.Anatomy.Value; var evalValue = defender.Skills.EvalInt.Value; var incrValue = Math.Min((anatValue + evalValue + 20.0) * 0.5, 120.0); @@ -54,7 +60,7 @@ namespace Server.Items private static void CheckPreAOSMoves(Mobile attacker, Mobile defender) { - if (!attacker.CanBeginAction()) + if (!Core.UOR || !attacker.CanBeginAction()) { return; } @@ -197,7 +203,7 @@ namespace Server.Items public static void DisarmRequest(Mobile m) { - if (Core.AOS) + if (Core.AOS || !Core.UOR) { return; } @@ -230,7 +236,7 @@ namespace Server.Items public static void StunRequest(Mobile m) { - if (Core.AOS || !DuelContext.AllowSpecialAbility(m, "Stun", true)) + if (Core.AOS || !Core.UOR || !DuelContext.AllowSpecialAbility(m, "Stun", true)) { return; } diff --git a/Projects/UOContent/Items/Weapons/Maces/BaseBashing.cs b/Projects/UOContent/Items/Weapons/Maces/BaseBashing.cs index b9870332b..40ab2c919 100644 --- a/Projects/UOContent/Items/Weapons/Maces/BaseBashing.cs +++ b/Projects/UOContent/Items/Weapons/Maces/BaseBashing.cs @@ -28,7 +28,7 @@ namespace Server.Items { var damage = base.GetBaseDamage(attacker); - if (!Core.AOS && (attacker.Player || attacker.Body.IsHuman) && Layer == Layer.TwoHanded && + if (!Core.AOS && Core.UOR && (attacker.Player || attacker.Body.IsHuman) && Layer == Layer.TwoHanded && attacker.Skills.Anatomy.Value >= 80 && attacker.Skills.Anatomy.Value / 400.0 >= Utility.RandomDouble() && DuelContext.AllowSpecialAbility(attacker, "Crushing Blow", false)) diff --git a/Projects/UOContent/Items/Weapons/SpearsAndForks/BaseSpear.cs b/Projects/UOContent/Items/Weapons/SpearsAndForks/BaseSpear.cs index 612ce7033..0cedb68db 100644 --- a/Projects/UOContent/Items/Weapons/SpearsAndForks/BaseSpear.cs +++ b/Projects/UOContent/Items/Weapons/SpearsAndForks/BaseSpear.cs @@ -22,7 +22,7 @@ namespace Server.Items { base.OnHit(attacker, defender, damageBonus); - if (!Core.AOS && Layer == Layer.TwoHanded && + if (!Core.AOS && Core.UOR && Layer == Layer.TwoHanded && attacker.Skills.Anatomy.Value / 400.0 >= Utility.RandomDouble() && DuelContext.AllowSpecialAbility(attacker, "Paralyzing Blow", false)) {