From 5bdc30d7ea37d0bdeffba8262969e1d6e143cddf Mon Sep 17 00:00:00 2001 From: WarrentyExpired Date: Thu, 29 Oct 2026 18:52:00 -0400 Subject: [PATCH] #W# New: Working on adding new mobs. --- .../Spawns/Underworld/Covetous_Level_5.json | 3 +- Info/NewAnimationIds.txt | 62 +++++++++++ Info/NewMonsters.txt | 60 +---------- .../Mobiles/Animals/Custom/Clydesdale.cs | 66 ++++++++++++ .../Mobiles/Monsters/Custom/DarkCat.cs | 68 ++++++++++++ .../Monsters/Custom/HellishNightmare.cs | 102 ++++++++++++++++++ .../Mobiles/Monsters/Custom/SmolderingLion.cs | 65 +++++++++++ .../Monsters/Elemental/Magic/AcidElemental.cs | 3 +- .../Monsters/Elemental/Magic/AirElemental.cs | 2 +- .../Elemental/Magic/BloodElemental.cs | 3 +- .../Monsters/Elemental/Magic/FireElemental.cs | 4 +- .../Monsters/Elemental/Magic/IceElemental.cs | 2 +- .../Elemental/Magic/PoisonElemental.cs | 2 +- .../Elemental/Magic/WaterElemental.cs | 3 +- .../Elemental/Melee/EarthElemental.cs | 2 +- .../Mobiles/Vendors/SBInfo/SBAnimalTrainer.cs | 1 + Run.sh | 2 +- 17 files changed, 382 insertions(+), 68 deletions(-) create mode 100644 Info/NewAnimationIds.txt create mode 100644 Projects/UOContent/Mobiles/Animals/Custom/Clydesdale.cs create mode 100644 Projects/UOContent/Mobiles/Monsters/Custom/DarkCat.cs create mode 100644 Projects/UOContent/Mobiles/Monsters/Custom/HellishNightmare.cs create mode 100644 Projects/UOContent/Mobiles/Monsters/Custom/SmolderingLion.cs diff --git a/Distribution/Data/Spawns/Underworld/Covetous_Level_5.json b/Distribution/Data/Spawns/Underworld/Covetous_Level_5.json index 3d3214c25..2b8be36a6 100644 --- a/Distribution/Data/Spawns/Underworld/Covetous_Level_5.json +++ b/Distribution/Data/Spawns/Underworld/Covetous_Level_5.json @@ -52,7 +52,8 @@ "homeRange": 4, "walkingRange": -1, "entries": [ - { "name": "nightmare", "probability": 100, "maxCount": 1 } + { "name": "nightmare", "probability": 98, "maxCount": 1 }, + { "name": "hellishnightmare", "probability": 2, "maxCount": 1} ] }, { diff --git a/Info/NewAnimationIds.txt b/Info/NewAnimationIds.txt new file mode 100644 index 000000000..15c0f1aaa --- /dev/null +++ b/Info/NewAnimationIds.txt @@ -0,0 +1,62 @@ +anim2.mul + +1072 Ogre - Added +1073 Ogre Lord - Added +1074 Ogre King +1075 Ettin - Added +1076 Ettin Lord +1077 Ratman - Added +1078 Ratman Archer - Added +1079 Ratman Mage - Added +1080 Skeleton - Added +1081 Skeleton Warrior - Added +1082 Skeletal Mage Flying -Added +1083 Orcish Mage - Added +1084 Corpser - Added +1085 Large Corpser +1086 Elder Gazer - Added +1087 Evil Mage - Added +1088 Evil Mage Lord - Added +1089 Ancient Lich - Added +1090 Shambler +1091-1095 Balrons +1096 Ent +1097 Larger Ent +1098 Ancient Ent +1099 Dragon Turtle +1100 Large Crab Monster Thing +1101 Daemon Knight +1102 Earth Elemental - Added +1103 Fire Elemental Human - Added +1104 Ice Elemental - Added +1105 Poison/Blood/Acid/Water Elemental Add Hue - Added +1106 Air Elemenatal - Added +1107 Moss Elemental +1108 Rock Monster Elemental? +1109 Crystal Giant +1110 Fire Giant +1111 Fire God/Daemon +1112 Ice Giant +1113 Water Giant +1114 Very Large Daemon +1115 Very Large Daemon with Skull for Head +1117 Giant Black Dragon +1118 Giant Ice Dragon +1119 - 1125 Different Color Wyrms +1126 Black Knight +1127 Exodus +1128 Fire Lion - Added Smoldering Lion +1129 Hell Beast +1130 Large Winged Huminod Beast + +#anim5.mul +1131 Fire Nightmare - Added Hellish Nightmare +1132 Dark Lion - Added Dark Lion +1133 Skeletal Lion +1134 Fire Unicorn +1135 Hell Steed +1136 Griffon +1137 Hippogriffon +1139 Skeleton Archer - Added +1140 - 1143 Clydesdale Horse - Added +1144 - 1147 Clydesdale Horse with Saddles - Added diff --git a/Info/NewMonsters.txt b/Info/NewMonsters.txt index 7a8b205d7..6ab99f797 100644 --- a/Info/NewMonsters.txt +++ b/Info/NewMonsters.txt @@ -1,57 +1,3 @@ -anim2.mul - -1072 Ogre -1073 Ogre Lord -1074 Ogre King -1075 Ettin -1076 Ettin Lord -1077 Ratman -1078 Ratman Archer -1079 Ratman Mage -1080 Skeleton -1081 Skeleton Warrior -1082 Skeletal Mage Flying -1083 Orcish Mage -1084 Corpser -1085 Large Corpser -1086 Elder Gazer -1087 Evil Mage -1088 Evil Mage Lord -1089 Ancient Lich -1090 Shambler -1091-1095 Balrons -1096 Ent -1097 Larger Ent -1098 Ancient Ent -1099 Dragon Turtle -1100 Large Crab Monster Thing -1101 Daemon Knight -1102 Earth Elemental -1103 Fire Elemental Human -1104 Ice Elemental -1105 Poison/Blood/Acid/Water Elemental Add Hue -1106 Air Elemenatal? -1107 Moss Elemental -1108 Rock Monster Elemental? -1109 Crystal Giant -1110 Fire Giant -1111 Fire God/Daemon -1112 Ice Giant -1113 Water Giant -1114 Very Large Daemon -1115 Very Large Daemon with Skull for Head -1117 Giant Black Dragon -1118 Giant Ice Dragon -1119 - 1125 Different Color Wyrms -1126 Black Knight -1127 Exodus -1128 Fire Lion -1129 Hell Beast -1130 Large Winged Huminod Beast - -#anim5.mul -1131 Fire Nightmare -1132 Dark Lion -1133 Skeletal Lion -1134 Fire Unicorn -1135 Hell Stee +Hellish Nightmare +Smoldering Lion +Dark Lion diff --git a/Projects/UOContent/Mobiles/Animals/Custom/Clydesdale.cs b/Projects/UOContent/Mobiles/Animals/Custom/Clydesdale.cs new file mode 100644 index 000000000..f4ae50d30 --- /dev/null +++ b/Projects/UOContent/Mobiles/Animals/Custom/Clydesdale.cs @@ -0,0 +1,66 @@ +using ModernUO.Serialization; + +namespace Server.Mobiles +{ + /*[TypeAlias( + "Server.Mobiles.BrownHorse", + "Server.Mobiles.DirtyHorse", + "Server.Mobiles.GrayHorse", + "Server.Mobiles.TanHorse" + )]*/ + [SerializationGenerator(0, false)] + public partial class ClydesdaleHorse : BaseMount + { + private static readonly int[] m_IDs = + { + 1140, 1144, + 1141, 1145, + 1142, 1146, + 1143, 1147 + }; + + public override string DefaultName => "a clydesdale"; + + [Constructible] + public ClydesdaleHorse() : base(1140, 1143, AIType.AI_Animal, FightMode.Aggressor) + { + var random = Utility.Random(4); + + Body = m_IDs[random * 2]; + ItemID = m_IDs[random * 2 + 1]; + //Body = 1140; + //ItemID = 1144; + BaseSoundID = 0xA8; + + SetStr(22, 98); + SetDex(56, 75); + SetInt(6, 10); + + SetHits(28, 45); + SetMana(0); + + SetDamage(3, 4); + + SetDamageType(ResistanceType.Physical, 100); + + SetResistance(ResistanceType.Physical, 15, 20); + + SetSkill(SkillName.MagicResist, 25.1, 30.0); + SetSkill(SkillName.Tactics, 29.3, 44.0); + SetSkill(SkillName.Wrestling, 29.3, 44.0); + + Fame = 300; + Karma = 300; + + Tamable = true; + ControlSlots = 1; + MinTameSkill = 29.1; + } + + public override string CorpseName => "a horse corpse"; + + public override int Meat => 3; + public override int Hides => 10; + public override FoodType FavoriteFood => FoodType.FruitsAndVeggies | FoodType.GrainsAndHay; + } +} diff --git a/Projects/UOContent/Mobiles/Monsters/Custom/DarkCat.cs b/Projects/UOContent/Mobiles/Monsters/Custom/DarkCat.cs new file mode 100644 index 000000000..9ef7437d6 --- /dev/null +++ b/Projects/UOContent/Mobiles/Monsters/Custom/DarkCat.cs @@ -0,0 +1,68 @@ +using ModernUO.Serialization; +using Server.Engines.Plants; +using Server.Items; + +namespace Server.Mobiles +{ + [SerializationGenerator(0, false)] + public partial class DarkLion : BaseMount + { + public override string DefaultName => "a dark lion"; + + [Constructible] + public DarkLion() : base(1132, 1132, AIType.AI_Melee) + { + + SetStr(801, 1010); + SetDex(171, 270); + SetInt(301, 325); + + SetHits(901, 1100); + SetMana(60); + + SetDamage(15, 25); + + SetDamageType(ResistanceType.Physical, 50); + SetDamageType(ResistanceType.Energy, 50); + + SetResistance(ResistanceType.Physical, 55, 70); + SetResistance(ResistanceType.Fire, 30, 40); + SetResistance(ResistanceType.Cold, 15, 25); + SetResistance(ResistanceType.Poison, 40, 50); + SetResistance(ResistanceType.Energy, 60, 70); + + SetSkill(SkillName.Anatomy, 75.1, 80.0); + SetSkill(SkillName.MagicResist, 85.1, 100.0); + SetSkill(SkillName.Tactics, 100.1, 110.0); + SetSkill(SkillName.Wrestling, 100.1, 120.0); + + Fame = 18000; + Karma = -18000; + + Tamable = true; + ControlSlots = 4; + MinTameSkill = 98.7; + } + + public override string CorpseName => "a dark lion corpse"; + public override double WeaponAbilityChance => 0.07; /* 1 in 15 chance of using per landed hit */ + + public override bool StatLossAfterTame => true; + + public override int TreasureMapLevel => 5; + public override int Meat => 16; + public override int Hides => 60; + public override FoodType FavoriteFood => FoodType.Meat; + public override bool CanAngerOnTame => true; + + private static MonsterAbility[] _abilities = { MonsterAbilities.BloodBathAttack }; + public override MonsterAbility[] GetMonsterAbilities() => _abilities; + + + public override void GenerateLoot() + { + AddLoot(LootPack.FilthyRich, 3); + AddLoot(LootPack.Gems, 4); + } + } +} diff --git a/Projects/UOContent/Mobiles/Monsters/Custom/HellishNightmare.cs b/Projects/UOContent/Mobiles/Monsters/Custom/HellishNightmare.cs new file mode 100644 index 000000000..00e13365c --- /dev/null +++ b/Projects/UOContent/Mobiles/Monsters/Custom/HellishNightmare.cs @@ -0,0 +1,102 @@ +using ModernUO.Serialization; +using Server.Items; + +namespace Server.Mobiles +{ + [SerializationGenerator(0, false)] + public partial class HellishNightmare : BaseMount + { + public override string DefaultName => "a hellish nightmare"; + + [Constructible] + public HellishNightmare() : base(1131, 1131, AIType.AI_Mage) + { + BaseSoundID = Core.AOS ? 0xA8 : 0x16A; + + // Publish 97 + if (Core.TOL) + { + if (Utility.RandomDouble() < 0.3) + { + SetStr(296, 315); + ControlSlots = 2; + } + else + { + SetStr(496, 525); + ControlSlots = 3; + } + } + else + { + SetStr(696, 725); + ControlSlots = 3; + } + + SetDex(116, 145); + SetInt(116, 145); + + SetHits(498, 715); + + SetDamage(16, 22); + + SetDamageType(ResistanceType.Physical, 50); + SetDamageType(ResistanceType.Fire, 65); + SetDamageType(ResistanceType.Energy, 30); + + SetResistance(ResistanceType.Physical, 55, 65); + SetResistance(ResistanceType.Fire, 60, 70); + SetResistance(ResistanceType.Cold, 60, 70); + SetResistance(ResistanceType.Poison, 30, 40); + SetResistance(ResistanceType.Energy, 20, 30); + + SetSkill(SkillName.EvalInt, 40.4, 90.0); + SetSkill(SkillName.Magery, 40.4, 90.0); + SetSkill(SkillName.MagicResist, 85.3, 100.0); + SetSkill(SkillName.Tactics, 97.6, 100.0); + SetSkill(SkillName.Wrestling, 80.5, 92.5); + + Fame = 18000; + Karma = -18000; + + VirtualArmor = 60; + + Tamable = true; + MinTameSkill = 100.1; + + Body = 1131; + ItemID = 1131; + + PackItem(new SulfurousAsh(Utility.RandomMinMax(3, 5))); + } + + public override int StepsMax => 6400; + public override string CorpseName => "a hellish nightmare corpse"; + public override int Meat => 5; + public override int Hides => 10; + public override HideType HideType => HideType.Barbed; + public override FoodType FavoriteFood => FoodType.Meat; + public override bool CanAngerOnTame => true; + + private static MonsterAbility[] _abilities = { MonsterAbilities.FireBreath }; + public override MonsterAbility[] GetMonsterAbilities() => _abilities; + + public override void GenerateLoot() + { + AddLoot(LootPack.Rich); + AddLoot(LootPack.Average); + AddLoot(LootPack.LowScrolls); + AddLoot(LootPack.Potions); + } + + public override int GetAngerSound() + { + if (!Controlled) + { + return 0x16A; + } + + return base.GetAngerSound(); + } + } +} diff --git a/Projects/UOContent/Mobiles/Monsters/Custom/SmolderingLion.cs b/Projects/UOContent/Mobiles/Monsters/Custom/SmolderingLion.cs new file mode 100644 index 000000000..90f97f631 --- /dev/null +++ b/Projects/UOContent/Mobiles/Monsters/Custom/SmolderingLion.cs @@ -0,0 +1,65 @@ +using System; +using ModernUO.Serialization; +using Server.Items; + +namespace Server.Mobiles +{ + [SerializationGenerator(0, false)] + public partial class SmolderingLion : BaseCreature + { + public override string DefaultName => "a smoldering lion"; + + [Constructible] + public SmolderingLion() : base(AIType.AI_Melee, FightMode.Closest) + { + Body = 1128; + BaseSoundID = 0x69; + + SetStr(250, 300); + SetDex(100, 150); + SetInt(50, 100); + + SetHits(150, 2000); + SetDamage(8, 14); + + SetDamageType(ResistanceType.Physical, 50); + SetDamageType(ResistanceType.Fire, 50); + + SetResistance(ResistanceType.Physical, 35, 45); + SetResistance(ResistanceType.Fire, 60, 70); + SetResistance(ResistanceType.Cold, 20, 30); + SetResistance(ResistanceType.Poison, 10, 20); + SetResistance(ResistanceType.Energy, 20, 30); + + SetSkill(SkillName.MagicResist, 50.0, 70.0); + SetSkill(SkillName.Tactics, 60.0, 80.0); + SetSkill(SkillName.Wrestling, 60.0, 80.0); + + Fame = 3500; + Karma = -3500; + + Tamable = true; + ControlSlots = 2; + MinTameSkill = 75.1; + + PackItem(new SulfurousAsh(Utility.RandomMinMax(2, 4))); + } + + public override string CorpseName => "a smoldering lion 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 void GenerateLoot() + { + AddLoot(LootPack.Average); + AddLoot(LootPack.Meager); + } + } +} diff --git a/Projects/UOContent/Mobiles/Monsters/Elemental/Magic/AcidElemental.cs b/Projects/UOContent/Mobiles/Monsters/Elemental/Magic/AcidElemental.cs index f84c64849..70c81266c 100644 --- a/Projects/UOContent/Mobiles/Monsters/Elemental/Magic/AcidElemental.cs +++ b/Projects/UOContent/Mobiles/Monsters/Elemental/Magic/AcidElemental.cs @@ -9,8 +9,9 @@ namespace Server.Mobiles [Constructible] public AcidElemental() : base(AIType.AI_Mage) { - Body = 0x9E; + Body = 1105; //0x9E; BaseSoundID = 278; + Hue = 58; SetStr(326, 355); SetDex(66, 85); diff --git a/Projects/UOContent/Mobiles/Monsters/Elemental/Magic/AirElemental.cs b/Projects/UOContent/Mobiles/Monsters/Elemental/Magic/AirElemental.cs index 04b1791d7..48f2c32f4 100644 --- a/Projects/UOContent/Mobiles/Monsters/Elemental/Magic/AirElemental.cs +++ b/Projects/UOContent/Mobiles/Monsters/Elemental/Magic/AirElemental.cs @@ -8,7 +8,7 @@ namespace Server.Mobiles [Constructible] public AirElemental() : base(AIType.AI_Mage) { - Body = 13; + Body = 1106; //13; Hue = 0x4001; BaseSoundID = 655; diff --git a/Projects/UOContent/Mobiles/Monsters/Elemental/Magic/BloodElemental.cs b/Projects/UOContent/Mobiles/Monsters/Elemental/Magic/BloodElemental.cs index 1ea115add..8ec6ea467 100644 --- a/Projects/UOContent/Mobiles/Monsters/Elemental/Magic/BloodElemental.cs +++ b/Projects/UOContent/Mobiles/Monsters/Elemental/Magic/BloodElemental.cs @@ -8,8 +8,9 @@ namespace Server.Mobiles [Constructible] public BloodElemental() : base(AIType.AI_Mage) { - Body = 159; + Body = 1105; //159; BaseSoundID = 278; + Hue = 33; SetStr(526, 615); SetDex(66, 85); diff --git a/Projects/UOContent/Mobiles/Monsters/Elemental/Magic/FireElemental.cs b/Projects/UOContent/Mobiles/Monsters/Elemental/Magic/FireElemental.cs index 7065a06b6..cb1325eac 100644 --- a/Projects/UOContent/Mobiles/Monsters/Elemental/Magic/FireElemental.cs +++ b/Projects/UOContent/Mobiles/Monsters/Elemental/Magic/FireElemental.cs @@ -9,7 +9,7 @@ namespace Server.Mobiles [Constructible] public FireElemental() : base(AIType.AI_Mage) { - Body = 15; + Body = 1103; //15; BaseSoundID = 838; SetStr(126, 155); @@ -49,7 +49,7 @@ namespace Server.Mobiles public override string DefaultName => "a fire elemental"; public override bool BleedImmune => true; - + public override int TreasureMapLevel => 2; public override void GenerateLoot() diff --git a/Projects/UOContent/Mobiles/Monsters/Elemental/Magic/IceElemental.cs b/Projects/UOContent/Mobiles/Monsters/Elemental/Magic/IceElemental.cs index 9863af33a..8385a0f44 100644 --- a/Projects/UOContent/Mobiles/Monsters/Elemental/Magic/IceElemental.cs +++ b/Projects/UOContent/Mobiles/Monsters/Elemental/Magic/IceElemental.cs @@ -9,7 +9,7 @@ namespace Server.Mobiles [Constructible] public IceElemental() : base(AIType.AI_Mage) { - Body = 161; + Body = 1104; //161; BaseSoundID = 268; SetStr(156, 185); diff --git a/Projects/UOContent/Mobiles/Monsters/Elemental/Magic/PoisonElemental.cs b/Projects/UOContent/Mobiles/Monsters/Elemental/Magic/PoisonElemental.cs index bbdb9f371..8143a40f3 100644 --- a/Projects/UOContent/Mobiles/Monsters/Elemental/Magic/PoisonElemental.cs +++ b/Projects/UOContent/Mobiles/Monsters/Elemental/Magic/PoisonElemental.cs @@ -9,7 +9,7 @@ namespace Server.Mobiles [Constructible] public PoisonElemental() : base(AIType.AI_Mage) { - Body = 162; + Body = 1105; //162; BaseSoundID = 263; SetStr(426, 515); diff --git a/Projects/UOContent/Mobiles/Monsters/Elemental/Magic/WaterElemental.cs b/Projects/UOContent/Mobiles/Monsters/Elemental/Magic/WaterElemental.cs index b86d775b9..5788b9041 100644 --- a/Projects/UOContent/Mobiles/Monsters/Elemental/Magic/WaterElemental.cs +++ b/Projects/UOContent/Mobiles/Monsters/Elemental/Magic/WaterElemental.cs @@ -14,8 +14,9 @@ namespace Server.Mobiles public WaterElemental() : base(AIType.AI_Mage) { _hasDecanter = true; - Body = 16; + Body = 1105; //16; BaseSoundID = 278; + Hue = 88; SetStr(126, 155); SetDex(66, 85); diff --git a/Projects/UOContent/Mobiles/Monsters/Elemental/Melee/EarthElemental.cs b/Projects/UOContent/Mobiles/Monsters/Elemental/Melee/EarthElemental.cs index 35cf273af..1daf46a50 100644 --- a/Projects/UOContent/Mobiles/Monsters/Elemental/Melee/EarthElemental.cs +++ b/Projects/UOContent/Mobiles/Monsters/Elemental/Melee/EarthElemental.cs @@ -9,7 +9,7 @@ namespace Server.Mobiles [Constructible] public EarthElemental() : base(AIType.AI_Melee) { - Body = 14; + Body = 1102; //14; BaseSoundID = 268; SetStr(126, 155); diff --git a/Projects/UOContent/Mobiles/Vendors/SBInfo/SBAnimalTrainer.cs b/Projects/UOContent/Mobiles/Vendors/SBInfo/SBAnimalTrainer.cs index f6fb00490..32cd373c6 100644 --- a/Projects/UOContent/Mobiles/Vendors/SBInfo/SBAnimalTrainer.cs +++ b/Projects/UOContent/Mobiles/Vendors/SBInfo/SBAnimalTrainer.cs @@ -18,6 +18,7 @@ namespace Server.Mobiles Add(new AnimalBuyInfo(1, "a pack horse", typeof(PackHorse), 631, 10, 291, 0)); Add(new AnimalBuyInfo(1, "a pack llama", typeof(PackLlama), 565, 10, 292, 0)); Add(new AnimalBuyInfo(1, "a rabbit", typeof(Rabbit), 106, 10, 205, 0)); + Add(new AnimalBuyInfo(1, "a clydesdale", typeof(ClydesdaleHorse), 1520, 10, 1140, 0)); if (!Core.AOS) { diff --git a/Run.sh b/Run.sh index e35d42eae..3bebdd950 100755 --- a/Run.sh +++ b/Run.sh @@ -9,5 +9,5 @@ else echo "________________________________" echo "| Starting Server...." echo "--------------------------------" - dotnet ./Distribution/ModernUO.dll + dotnet publish Projects/Application/Application.csproj -c Release -r linux-x64 --self-contained=false && dotnet ./Distribution/ModernUO.dll fi