From fbda425fee9165da9f072283b5eae1beea28e892 Mon Sep 17 00:00:00 2001 From: WarrentyExpired Date: Fri, 30 Oct 2026 14:14:38 -0400 Subject: [PATCH] #W# Mobs: Still working on adding some new mobs. --- Distribution/Data/names.json | 9 +++ Info/NewAnimationIds.txt | 24 +++++- Info/NewMonsters.txt | 2 + .../Mobiles/Monsters/Custom/AncientWyvern.cs | 78 +++++++++++++++++++ .../Custom/{DarkCat.cs => DarkLion.cs} | 6 ++ .../Mobiles/Monsters/Custom/EvilGriffon.cs | 54 +++++++++++++ .../Mobiles/Monsters/Custom/Griffon.cs | 54 +++++++++++++ .../Monsters/Custom/HellishNightmare.cs | 6 +- .../Monsters/Custom/SkeletalHellCat.cs | 75 ++++++++++++++++++ .../Mobiles/Monsters/Custom/SmolderingLion.cs | 7 +- .../Mobiles/Monsters/Humanoid/Magic/Balron.cs | 2 +- .../Monsters/Reptile/Magic/AncientWyrm.cs | 1 + 12 files changed, 311 insertions(+), 7 deletions(-) create mode 100644 Projects/UOContent/Mobiles/Monsters/Custom/AncientWyvern.cs rename Projects/UOContent/Mobiles/Monsters/Custom/{DarkCat.cs => DarkLion.cs} (87%) create mode 100644 Projects/UOContent/Mobiles/Monsters/Custom/EvilGriffon.cs create mode 100644 Projects/UOContent/Mobiles/Monsters/Custom/Griffon.cs create mode 100644 Projects/UOContent/Mobiles/Monsters/Custom/SkeletalHellCat.cs diff --git a/Distribution/Data/names.json b/Distribution/Data/names.json index e727b501c..7486d3e6d 100644 --- a/Distribution/Data/names.json +++ b/Distribution/Data/names.json @@ -597,5 +597,14 @@ "Castoriel", "Celebrindal", "Chathmiru", "Davlien", "Gerrath", "Jerraintho", "Lewys", "Misran", "Nandrien", "Olonal", "Peorilien", "Regornolas", "Rylvarn", "Silnaliel", "Talendeor", "Uomo", "Verlolas" ] + }, + { + "type": "ancient wyvern", + "names": [ + "Malith", "Uira", "Larange", "Mogonth", "Coliath", "Nenith", "Cath", "Antarahi", "Ghilong", "Ngran", + "Marab", "Polarinth", "Emaleth", "Zilahed", "Nenith", "Halzanth", "Speth", "Meth", "Ptorahee", + "Naranoth", "Lauralare", "Olthonis", "Roth", "Camalanth", "Spath", "Halzanth", "Hrontr", "Takhansa", + "Santega", "Lant", "Weth" + ] } ] diff --git a/Info/NewAnimationIds.txt b/Info/NewAnimationIds.txt index 15c0f1aaa..a7c3ead1d 100644 --- a/Info/NewAnimationIds.txt +++ b/Info/NewAnimationIds.txt @@ -19,7 +19,7 @@ anim2.mul 1088 Evil Mage Lord - Added 1089 Ancient Lich - Added 1090 Shambler -1091-1095 Balrons +1091-1095 Balrons - Added 1096 Ent 1097 Larger Ent 1098 Ancient Ent @@ -42,7 +42,7 @@ anim2.mul 1115 Very Large Daemon with Skull for Head 1117 Giant Black Dragon 1118 Giant Ice Dragon -1119 - 1125 Different Color Wyrms +1119 - 1125 Different Color Wyrms - Added Ancient Wyvrens 1126 Black Knight 1127 Exodus 1128 Fire Lion - Added Smoldering Lion @@ -55,8 +55,24 @@ anim2.mul 1133 Skeletal Lion 1134 Fire Unicorn 1135 Hell Steed -1136 Griffon -1137 Hippogriffon +1136 Griffon - Added +1137 Evil Griffon - Added 1139 Skeleton Archer - Added 1140 - 1143 Clydesdale Horse - Added 1144 - 1147 Clydesdale Horse with Saddles - Added +1148 Fire Unicorn +1149 Large Moss Rock Guy +1150 Fire Rock Elemental +1151 - 1153 Medium Size Wyverns +1154 +1155 +1156 +1157 +1158 +1159 +1160 +1161 +1162 +1163 Skeletal Hell Cat +1164 + diff --git a/Info/NewMonsters.txt b/Info/NewMonsters.txt index 6ab99f797..b0267e44e 100644 --- a/Info/NewMonsters.txt +++ b/Info/NewMonsters.txt @@ -1,3 +1,5 @@ Hellish Nightmare Smoldering Lion Dark Lion +Griffon +Evil Griffon diff --git a/Projects/UOContent/Mobiles/Monsters/Custom/AncientWyvern.cs b/Projects/UOContent/Mobiles/Monsters/Custom/AncientWyvern.cs new file mode 100644 index 000000000..e7c6b9259 --- /dev/null +++ b/Projects/UOContent/Mobiles/Monsters/Custom/AncientWyvern.cs @@ -0,0 +1,78 @@ +using ModernUO.Serialization; + +namespace Server.Mobiles +{ + [SerializationGenerator(0, false)] + public partial class AncientWyvern : BaseCreature + { + [Constructible] + public AncientWyvern() : base(AIType.AI_Mage) + { + Name = NameList.RandomName("ancient wyvern"); + Body = Utility.RandomList(1119, 1120, 1121, 1122, 1123, 1124, 1125); //46; + BaseSoundID = 362; + + SetStr(796, 825); + SetDex(86, 105); + SetInt(436, 475); + + SetHits(478, 495); + + SetDamage(16, 22); + + SetDamageType(ResistanceType.Physical, 50); + SetDamageType(ResistanceType.Poison, 50); + + SetResistance(ResistanceType.Physical, 55, 65); + SetResistance(ResistanceType.Fire, 50, 60); + SetResistance(ResistanceType.Cold, 40, 50); + SetResistance(ResistanceType.Poison, 100 ); + SetResistance(ResistanceType.Energy, 50, 60); + + SetSkill(SkillName.EvalInt, 30.1, 40.0); + SetSkill(SkillName.Magery, 30.1, 40.0); + SetSkill(SkillName.Meditation, 52.5, 75.0); + SetSkill(SkillName.MagicResist, 99.1, 100.0); + SetSkill(SkillName.Tactics, 97.6, 100.0); + SetSkill(SkillName.Wrestling, 90.1, 92.5); + + Fame = 15000; + Karma = -15000; + + VirtualArmor = 60; + + Tamable = true; + ControlSlots = 3; + MinTameSkill = 93.9; + } + + public override string CorpseName => "an ancient wyvern corpse"; + public override string DefaultName => "an ancient wyvern"; + + public override bool ReacquireOnMovement => true; + public override bool AutoDispel => true; + public override HideType HideType => HideType.Barbed; + public override int Hides => 40; + public override int Meat => 19; + public override int Scales => 12; + public override ScaleType ScaleType => (ScaleType)Utility.Random(4); + public override Poison PoisonImmune => Poison.Deadly; + public override Poison HitPoison => Utility.RandomBool() ? Poison.Regular : Poison.Deadly; + public override int TreasureMapLevel => 5; + public override bool CanFly => true; + public override bool CanAngerOnTame => true; + + private static MonsterAbility[] _abilities = { MonsterAbilities.FireBreath }; + public override MonsterAbility[] GetMonsterAbilities() => _abilities; + + public override void GenerateLoot() + { + AddLoot(LootPack.FilthyRich, 2); + AddLoot(LootPack.Gems, 3); + } + + public override int GetIdleSound() => 0x16B; + + public override int GetHurtSound() => 0x16D; + } +} diff --git a/Projects/UOContent/Mobiles/Monsters/Custom/DarkCat.cs b/Projects/UOContent/Mobiles/Monsters/Custom/DarkLion.cs similarity index 87% rename from Projects/UOContent/Mobiles/Monsters/Custom/DarkCat.cs rename to Projects/UOContent/Mobiles/Monsters/Custom/DarkLion.cs index 9ef7437d6..cb4bb3731 100644 --- a/Projects/UOContent/Mobiles/Monsters/Custom/DarkCat.cs +++ b/Projects/UOContent/Mobiles/Monsters/Custom/DarkLion.cs @@ -13,6 +13,7 @@ namespace Server.Mobiles public DarkLion() : base(1132, 1132, AIType.AI_Melee) { + BaseSoundID = 0x0B3; SetStr(801, 1010); SetDex(171, 270); SetInt(301, 325); @@ -58,6 +59,11 @@ namespace Server.Mobiles private static MonsterAbility[] _abilities = { MonsterAbilities.BloodBathAttack }; public override MonsterAbility[] GetMonsterAbilities() => _abilities; + public override int GetAttackSound() => 0x0B2; + public override int GetAngerSound() => 0x0B2; + public override int GetDeathSound() => 0x0B6; + public override int GetIdleSound() => 0x0B5; + public override int GetHurtSound() => 0x0B4; public override void GenerateLoot() { diff --git a/Projects/UOContent/Mobiles/Monsters/Custom/EvilGriffon.cs b/Projects/UOContent/Mobiles/Monsters/Custom/EvilGriffon.cs new file mode 100644 index 000000000..e2f545c01 --- /dev/null +++ b/Projects/UOContent/Mobiles/Monsters/Custom/EvilGriffon.cs @@ -0,0 +1,54 @@ +using System; +using ModernUO.Serialization; +using Server.Items; + +namespace Server.Mobiles +{ + [SerializationGenerator(0, false)] + public partial class EvilGriffon : BaseMount + { + public override string DefaultName => "an evil griffon"; + + [Constructible] + public EvilGriffon() : base(1137, 1137, AIType.AI_Melee) + { + BaseSoundID = 0x4FE; + + SetStr(220, 270); + SetDex(130, 150); + SetInt(70, 90); + + SetHits(200, 240); + SetDamage(14, 18); + + SetDamageType(ResistanceType.Physical, 50); + SetDamageType(ResistanceType.Energy, 50); // Darker variant hits with a bit of energy + + SetResistance(ResistanceType.Physical, 45, 55); + SetResistance(ResistanceType.Fire, 40, 50); + SetResistance(ResistanceType.Cold, 20, 30); + SetResistance(ResistanceType.Poison, 40, 50); + SetResistance(ResistanceType.Energy, 30, 40); + + SetSkill(SkillName.MagicResist, 65.0, 80.0); + SetSkill(SkillName.Tactics, 75.0, 90.0); + SetSkill(SkillName.Wrestling, 75.0, 90.0); + + Fame = 5000; + Karma = -5000; // Aggressive + + Tamable = true; + ControlSlots = 2; + MinTameSkill = 85.1; + } + + public override int Meat => 3; + public override int Feathers => 36; + public override FoodType FavoriteFood => FoodType.Meat; + + public override void GenerateLoot() + { + AddLoot(LootPack.Average, 2); + } + } +} diff --git a/Projects/UOContent/Mobiles/Monsters/Custom/Griffon.cs b/Projects/UOContent/Mobiles/Monsters/Custom/Griffon.cs new file mode 100644 index 000000000..d81a55323 --- /dev/null +++ b/Projects/UOContent/Mobiles/Monsters/Custom/Griffon.cs @@ -0,0 +1,54 @@ +using System; +using ModernUO.Serialization; +using Server.Items; + +namespace Server.Mobiles +{ + [SerializationGenerator(0, false)] + public partial class Griffon : BaseMount + { + public override string DefaultName => "a griffon"; + + [Constructible] + public Griffon() : base(1136, 1136, AIType.AI_Melee) + { + BaseSoundID = 0x4FE; + + SetStr(200, 250); + SetDex(120, 140); + SetInt(60, 80); + + SetHits(180, 220); + SetDamage(12, 16); + + SetDamageType(ResistanceType.Physical, 100); + + SetResistance(ResistanceType.Physical, 40, 50); + SetResistance(ResistanceType.Fire, 30, 40); + SetResistance(ResistanceType.Cold, 30, 40); + SetResistance(ResistanceType.Poison, 20, 30); + SetResistance(ResistanceType.Energy, 30, 40); + + SetSkill(SkillName.MagicResist, 60.0, 75.0); + SetSkill(SkillName.Tactics, 70.0, 85.0); + SetSkill(SkillName.Wrestling, 70.0, 85.0); + + Fame = 4000; + Karma = 0; // Neutral + + Tamable = true; + ControlSlots = 2; + MinTameSkill = 80.1; + } + + public override int Meat => 3; + public override int Feathers => 36; + public override FoodType FavoriteFood => FoodType.Meat; + + public override void GenerateLoot() + { + AddLoot(LootPack.Average); + AddLoot(LootPack.Meager); + } + } +} diff --git a/Projects/UOContent/Mobiles/Monsters/Custom/HellishNightmare.cs b/Projects/UOContent/Mobiles/Monsters/Custom/HellishNightmare.cs index 00e13365c..899c02759 100644 --- a/Projects/UOContent/Mobiles/Monsters/Custom/HellishNightmare.cs +++ b/Projects/UOContent/Mobiles/Monsters/Custom/HellishNightmare.cs @@ -89,7 +89,11 @@ namespace Server.Mobiles AddLoot(LootPack.Potions); } - public override int GetAngerSound() + public override int GetAttackSound() => 0x0AB; + //public override int GetAngerSound() => 0x0A9; + public override int GetDeathSound() => 0x0AC; + public override int GetIdleSound() => 0x0A8; + public override int GetHurtSound() => 0x0AA; { if (!Controlled) { diff --git a/Projects/UOContent/Mobiles/Monsters/Custom/SkeletalHellCat.cs b/Projects/UOContent/Mobiles/Monsters/Custom/SkeletalHellCat.cs new file mode 100644 index 000000000..334cbaf45 --- /dev/null +++ b/Projects/UOContent/Mobiles/Monsters/Custom/SkeletalHellCat.cs @@ -0,0 +1,75 @@ +using System; +using ModernUO.Serialization; +using Server.Items; + +namespace Server.Mobiles +{ + [SerializationGenerator(0, false)] + public partial class SkeletalHellCat : BaseCreature + { + public override string DefaultName => "a skeletal hell cat"; + + [Constructible] + public SkeletalHellCat() : base(AIType.AI_Melee, FightMode.Closest) + { + Body = 1163; + BaseSoundID = 0x0B3; + + SetStr(250, 300); + SetDex(100, 150); + SetInt(50, 100); + + SetHits(150, 200); + SetDamage(8, 14); + + SetDamageType(ResistanceType.Physical, 50); + SetDamageType(ResistanceType.Fire, 50); + + SetResistance(ResistanceType.Physical, 45, 55); + SetResistance(ResistanceType.Fire, 60, 70); + SetResistance(ResistanceType.Cold, 20, 30); + SetResistance(ResistanceType.Poison, 10, 20); + SetResistance(ResistanceType.Energy, 20, 30); public override int GetAttackSound() => 0x0B2; + public override int GetAngerSound() => 0x0B2 + public override int GetDeathSound() => 0x0B6; + public override int GetIdleSound() => 0x0B5; + public override int GetHurtSound() => 0x0B4; + + + SetSkill(SkillName.MagicResist, 50.0, 70.0); + SetSkill(SkillName.Tactics, 65.0, 85.0); + SetSkill(SkillName.Wrestling, 65.0, 85.0); + + Fame = 3500; + Karma = -3500; + + Tamable = true; + ControlSlots = 2; + MinTameSkill = 85.1; + + PackItem(new SulfurousAsh(Utility.RandomMinMax(2, 4))); + } + + public override string CorpseName => "a skeletal hell cat corpse"; + public override bool ReacquireOnMovement => true; + public override int Meat => 2; + //public override int Hides => 10; + //public override HideType HideType => HideType.Spined; + public override FoodType FavoriteFood => FoodType.Meat; + public override PackInstinct PackInstinct => PackInstinct.Feline; + + private static MonsterAbility[] _abilities = { MonsterAbilities.FireBreath }; + public override MonsterAbility[] GetMonsterAbilities() => _abilities; + + public override int GetAttackSound() => 0x0B2; + public override int GetAngerSound() => 0x0B2; + public override int GetDeathSound() => 0x0B6; + public override int GetIdleSound() => 0x0B5; + public override int GetHurtSound() => 0x0B4; + public override void GenerateLoot() + { + AddLoot(LootPack.Average); + AddLoot(LootPack.Meager); + } + } +} diff --git a/Projects/UOContent/Mobiles/Monsters/Custom/SmolderingLion.cs b/Projects/UOContent/Mobiles/Monsters/Custom/SmolderingLion.cs index 90f97f631..88e820706 100644 --- a/Projects/UOContent/Mobiles/Monsters/Custom/SmolderingLion.cs +++ b/Projects/UOContent/Mobiles/Monsters/Custom/SmolderingLion.cs @@ -13,7 +13,7 @@ namespace Server.Mobiles public SmolderingLion() : base(AIType.AI_Melee, FightMode.Closest) { Body = 1128; - BaseSoundID = 0x69; + BaseSoundID = 0x0B3; SetStr(250, 300); SetDex(100, 150); @@ -56,6 +56,11 @@ namespace Server.Mobiles private static MonsterAbility[] _abilities = { MonsterAbilities.FireBreath }; public override MonsterAbility[] GetMonsterAbilities() => _abilities; + public override int GetAttackSound() => 0x0B2; + public override int GetAngerSound() => 0x0B2; + public override int GetDeathSound() => 0x0B6; + public override int GetIdleSound() => 0x0B5; + public override int GetHurtSound() => 0x0B4; public override void GenerateLoot() { AddLoot(LootPack.Average); diff --git a/Projects/UOContent/Mobiles/Monsters/Humanoid/Magic/Balron.cs b/Projects/UOContent/Mobiles/Monsters/Humanoid/Magic/Balron.cs index 17fbdab99..470152c4e 100644 --- a/Projects/UOContent/Mobiles/Monsters/Humanoid/Magic/Balron.cs +++ b/Projects/UOContent/Mobiles/Monsters/Humanoid/Magic/Balron.cs @@ -10,7 +10,7 @@ namespace Server.Mobiles public Balron() : base(AIType.AI_Mage) { Name = NameList.RandomName("balron"); - Body = 40; + Body = Utility.RandomList(1091, 1092, 1093, 1094); //40; BaseSoundID = 357; SetStr(986, 1185); diff --git a/Projects/UOContent/Mobiles/Monsters/Reptile/Magic/AncientWyrm.cs b/Projects/UOContent/Mobiles/Monsters/Reptile/Magic/AncientWyrm.cs index 1c5b2ac9a..ffd811535 100644 --- a/Projects/UOContent/Mobiles/Monsters/Reptile/Magic/AncientWyrm.cs +++ b/Projects/UOContent/Mobiles/Monsters/Reptile/Magic/AncientWyrm.cs @@ -8,6 +8,7 @@ namespace Server.Mobiles [Constructible] public AncientWyrm() : base(AIType.AI_Mage) { + Name = NameList.RandomName("ancient wyvern"); Body = 46; BaseSoundID = 362;