From 6e486fa4e2525bd8d533158c7eb4e520c3480b14 Mon Sep 17 00:00:00 2001 From: Kamron Batman <3953314+kamronbatman@users.noreply.github.com> Date: Fri, 3 Jul 2026 00:07:58 -0700 Subject: [PATCH] feat(throwing): add remaining SA throwing artifacts (add-only) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add the four remaining named Stygian Abyss throwing artifacts — Abyss Reaver, Storm Caller, Banshee's Call, and Wind of Corruption — as item definitions, stat-for-stat from ServUO. They are [add-only for now: their in-world sources (the Into the Void quest for Abyss Reaver; the renowned/boss creatures for the others) are deferred to future efforts, but the items themselves are useful to have defined. Storm Caller's ServUO BattleLust attribute is left as a TODO — BattleLust is not yet implemented in ModernUO's AosWeaponAttribute set. (The human Bow variant WindOfCorruptionHuman is out of throwing scope and not included.) Co-Authored-By: Joe Valentine Co-Authored-By: Claude Opus 4.8 (1M context) --- .../Items/Weapons/Throwing/AbyssReaver.cs | 17 +++++++++++ .../Items/Weapons/Throwing/BansheesCall.cs | 25 ++++++++++++++++ .../Items/Weapons/Throwing/StormCaller.cs | 30 +++++++++++++++++++ .../Weapons/Throwing/WindOfCorruption.cs | 24 +++++++++++++++ .../Server.Items.AbyssReaver.v0.json | 4 +++ .../Server.Items.BansheesCall.v0.json | 4 +++ .../Server.Items.StormCaller.v0.json | 4 +++ .../Server.Items.WindOfCorruption.v0.json | 4 +++ 8 files changed, 112 insertions(+) create mode 100644 Projects/UOContent/Items/Weapons/Throwing/AbyssReaver.cs create mode 100644 Projects/UOContent/Items/Weapons/Throwing/BansheesCall.cs create mode 100644 Projects/UOContent/Items/Weapons/Throwing/StormCaller.cs create mode 100644 Projects/UOContent/Items/Weapons/Throwing/WindOfCorruption.cs create mode 100644 Projects/UOContent/Migrations/Server.Items.AbyssReaver.v0.json create mode 100644 Projects/UOContent/Migrations/Server.Items.BansheesCall.v0.json create mode 100644 Projects/UOContent/Migrations/Server.Items.StormCaller.v0.json create mode 100644 Projects/UOContent/Migrations/Server.Items.WindOfCorruption.v0.json diff --git a/Projects/UOContent/Items/Weapons/Throwing/AbyssReaver.cs b/Projects/UOContent/Items/Weapons/Throwing/AbyssReaver.cs new file mode 100644 index 000000000..1b88d6898 --- /dev/null +++ b/Projects/UOContent/Items/Weapons/Throwing/AbyssReaver.cs @@ -0,0 +1,17 @@ +using ModernUO.Serialization; + +namespace Server.Items; + +[SerializationGenerator(0)] +public partial class AbyssReaver : Cyclone +{ + [Constructible] + public AbyssReaver() + { + SkillBonuses.SetValues(0, SkillName.Throwing, Utility.RandomMinMax(5, 10)); + Attributes.WeaponDamage = Utility.RandomMinMax(25, 35); + Slayer = SlayerName.Exorcism; + } + + public override int LabelNumber => 1112694; // Abyss Reaver +} diff --git a/Projects/UOContent/Items/Weapons/Throwing/BansheesCall.cs b/Projects/UOContent/Items/Weapons/Throwing/BansheesCall.cs new file mode 100644 index 000000000..00a23084f --- /dev/null +++ b/Projects/UOContent/Items/Weapons/Throwing/BansheesCall.cs @@ -0,0 +1,25 @@ +using ModernUO.Serialization; + +namespace Server.Items; + +[SerializationGenerator(0)] +public partial class BansheesCall : Cyclone +{ + [Constructible] + public BansheesCall() + { + Hue = 1266; + WeaponAttributes.HitHarm = 40; + WeaponAttributes.HitLeechHits = 45; + Attributes.BonusStr = 5; + Attributes.WeaponSpeed = 30; + Attributes.WeaponDamage = 50; + Velocity = 35; + AosElementDamages.Cold = 100; + } + + public override int LabelNumber => 1113529; // Banshee's Call + + public override int InitMinHits => 255; + public override int InitMaxHits => 255; +} diff --git a/Projects/UOContent/Items/Weapons/Throwing/StormCaller.cs b/Projects/UOContent/Items/Weapons/Throwing/StormCaller.cs new file mode 100644 index 000000000..afb568058 --- /dev/null +++ b/Projects/UOContent/Items/Weapons/Throwing/StormCaller.cs @@ -0,0 +1,30 @@ +using ModernUO.Serialization; + +namespace Server.Items; + +[SerializationGenerator(0)] +public partial class StormCaller : Boomerang +{ + [Constructible] + public StormCaller() + { + Hue = 456; + //TODO Implement BattleLust + //WeaponAttributes.BattleLust = 1; + WeaponAttributes.HitLightning = 40; + WeaponAttributes.HitLowerDefend = 30; + Attributes.BonusStr = 5; + Attributes.WeaponSpeed = 30; + Attributes.WeaponDamage = 40; + AosElementDamages.Physical = 20; + AosElementDamages.Fire = 20; + AosElementDamages.Cold = 20; + AosElementDamages.Poison = 20; + AosElementDamages.Energy = 20; + } + + public override int LabelNumber => 1113530; // Storm Caller + + public override int InitMinHits => 255; + public override int InitMaxHits => 255; +} diff --git a/Projects/UOContent/Items/Weapons/Throwing/WindOfCorruption.cs b/Projects/UOContent/Items/Weapons/Throwing/WindOfCorruption.cs new file mode 100644 index 000000000..7971920cc --- /dev/null +++ b/Projects/UOContent/Items/Weapons/Throwing/WindOfCorruption.cs @@ -0,0 +1,24 @@ +using ModernUO.Serialization; + +namespace Server.Items; + +[SerializationGenerator(0)] +public partial class WindOfCorruption : Cyclone +{ + [Constructible] + public WindOfCorruption() + { + Hue = 1171; + WeaponAttributes.HitLeechStam = 40; + WeaponAttributes.HitLowerDefend = 40; + Attributes.WeaponSpeed = 30; + Attributes.WeaponDamage = 50; + Slayer = SlayerName.Fey; + AosElementDamages.Chaos = 100; + } + + public override int LabelNumber => 1150358; // Wind of Corruption + + public override int InitMinHits => 255; + public override int InitMaxHits => 255; +} diff --git a/Projects/UOContent/Migrations/Server.Items.AbyssReaver.v0.json b/Projects/UOContent/Migrations/Server.Items.AbyssReaver.v0.json new file mode 100644 index 000000000..7af2fdda6 --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Items.AbyssReaver.v0.json @@ -0,0 +1,4 @@ +{ + "version": 0, + "type": "Server.Items.AbyssReaver" +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Items.BansheesCall.v0.json b/Projects/UOContent/Migrations/Server.Items.BansheesCall.v0.json new file mode 100644 index 000000000..1a3d9c627 --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Items.BansheesCall.v0.json @@ -0,0 +1,4 @@ +{ + "version": 0, + "type": "Server.Items.BansheesCall" +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Items.StormCaller.v0.json b/Projects/UOContent/Migrations/Server.Items.StormCaller.v0.json new file mode 100644 index 000000000..d69235cd9 --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Items.StormCaller.v0.json @@ -0,0 +1,4 @@ +{ + "version": 0, + "type": "Server.Items.StormCaller" +} \ No newline at end of file diff --git a/Projects/UOContent/Migrations/Server.Items.WindOfCorruption.v0.json b/Projects/UOContent/Migrations/Server.Items.WindOfCorruption.v0.json new file mode 100644 index 000000000..37df005be --- /dev/null +++ b/Projects/UOContent/Migrations/Server.Items.WindOfCorruption.v0.json @@ -0,0 +1,4 @@ +{ + "version": 0, + "type": "Server.Items.WindOfCorruption" +} \ No newline at end of file