public static void DamageCorpse(Point3D location, Map map, bool largeExplosion) { int projectiles = 5; int particleSpeed = 8; int minRadius = 1; int maxRadius = 5; List <Point3D> m_ValidLocations = SpecialAbilities.GetSpawnableTiles(location, true, false, location, map, projectiles, 20, minRadius, maxRadius, false); if (m_ValidLocations.Count == 0) { return; } for (int b = 0; b < projectiles; b++) { Point3D newLocation = m_ValidLocations[Utility.RandomMinMax(0, m_ValidLocations.Count - 1)]; IEntity effectStartLocation = new Entity(Serial.Zero, new Point3D(location.X, location.Y, location.Z + 2), map); IEntity effectEndLocation = new Entity(Serial.Zero, new Point3D(newLocation.X, newLocation.Y, newLocation.Z + 20), map); newLocation.Z += 5; Effects.SendMovingEffect(effectStartLocation, effectEndLocation, Utility.RandomList(4651, 4652, 4653, 4654, 5701), particleSpeed, 0, false, false, 0, 0); } for (int a = 0; a < 4; a++) { Point3D newPoint = new Point3D(location.X + Utility.RandomList(-2, -1, 1, 2), location.Y + Utility.RandomList(-2, -1, 1, 2), location.Z); SpellHelper.AdjustField(ref newPoint, map, 12, false); new Blood().MoveToWorld(newPoint, map); } int radius = 2; int explosionSound = Utility.RandomList(0x5DA, 0x580); if (largeExplosion) { explosionSound = 0x309; radius = 4; List <int> m_ExtraParts = new List <int>(); m_ExtraParts.Add(Utility.RandomList(7407)); //Entrail m_ExtraParts.Add(Utility.RandomList(6929)); //Bones m_ExtraParts.Add(Utility.RandomList(6930)); //Bones m_ExtraParts.Add(Utility.RandomList(6937)); //Bones m_ExtraParts.Add(Utility.RandomList(6938)); //Bones m_ExtraParts.Add(Utility.RandomList(6931)); //Bones m_ExtraParts.Add(Utility.RandomList(6932)); //Bones m_ExtraParts.Add(Utility.RandomList(4650)); //Blood m_ExtraParts.Add(Utility.RandomList(4651)); //Blood m_ExtraParts.Add(Utility.RandomList(4652)); //Blood m_ExtraParts.Add(Utility.RandomList(4653)); //Blood m_ExtraParts.Add(Utility.RandomList(4654)); //Blood m_ExtraParts.Add(Utility.RandomList(5701)); //Blood m_ExtraParts.Add(Utility.RandomList(4655)); //Blood m_ExtraParts.Add(Utility.RandomList(7439)); //Blood m_ExtraParts.Add(Utility.RandomList(7438)); //Blood m_ExtraParts.Add(Utility.RandomList(7436)); //Blood m_ExtraParts.Add(Utility.RandomList(7433)); //Blood m_ExtraParts.Add(Utility.RandomList(7431)); //Blood m_ExtraParts.Add(Utility.RandomList(7428)); //Blood m_ExtraParts.Add(Utility.RandomList(7425)); //Blood m_ExtraParts.Add(Utility.RandomList(7410)); //Blood m_ExtraParts.Add(Utility.RandomList(7415)); //Blood m_ExtraParts.Add(Utility.RandomList(7416)); //Blood m_ExtraParts.Add(Utility.RandomList(7418)); //Blood m_ExtraParts.Add(Utility.RandomList(7420)); //Blood m_ExtraParts.Add(Utility.RandomList(7425)); //Blood double extraPartChance = .5; int minRange = radius * -1; int maxRange = radius; List <Point3D> m_ExplosionPoints = new List <Point3D>(); for (int a = minRange; a < maxRange + 1; a++) { for (int b = minRange; b < maxRange + 1; b++) { Point3D newPoint = new Point3D(location.X + a, location.Y + b, location.Z); SpellHelper.AdjustField(ref newPoint, map, 12, false); if (map.InLOS(location, newPoint)) { m_ExplosionPoints.Add(newPoint); } } } for (int a = 0; a < m_ExplosionPoints.Count; a++) { if (Utility.RandomDouble() <= extraPartChance) { Point3D explosionPoint = m_ExplosionPoints[a]; int itemId = m_ExtraParts[Utility.RandomMinMax(0, m_ExtraParts.Count - 1)]; int distance = Utility.GetDistance(location, explosionPoint); Timer.DelayCall(TimeSpan.FromSeconds(distance * .15), delegate { TimedStatic gore = new TimedStatic(itemId, 10); gore.Name = "gore"; gore.MoveToWorld(explosionPoint, map); if (Utility.RandomDouble() <= .5) { Item item = null; switch (Utility.RandomMinMax(1, 8)) { //case 1: item = new CookedBird(); break; //case 2: item = new ChickenLeg(); break; //case 3: item = new LambLeg(); item.Name = "chicken drumstick"; break; case 4: item = new Feather(); break; case 5: item = new Feather(); break; case 6: item = new Feather(); break; case 7: item = new Feather(); break; case 8: item = new Feather(); break; } if (item != null) { item.MoveToWorld(explosionPoint, map); } } }); } } } Effects.PlaySound(location, map, explosionSound); }