diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Acidic.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Acidic.java index 3f3ab3c7f..1c21f2593 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Acidic.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Acidic.java @@ -23,10 +23,10 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.mobs; import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; -import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; +import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Ooze; +import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfExperience; import com.shatteredpixel.shatteredpixeldungeon.sprites.AcidicSprite; -import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; -import com.watabou.utils.Random; public class Acidic extends Scorpio { @@ -34,20 +34,21 @@ public class Acidic extends Scorpio { spriteClass = AcidicSprite.class; properties.add(Property.ACIDIC); + + loot = new PotionOfExperience(); + lootChance = 1f; } - + @Override + public int attackProc(Char enemy, int damage) { + Buff.affect(enemy, Ooze.class).set( 20f ); + return super.attackProc(enemy, damage); + } + @Override public int defenseProc( Char enemy, int damage ) { - - int dmg = Random.IntRange( 0, damage ); - if (dmg > 0) { - enemy.damage( dmg, this ); - if (!enemy.isAlive() && enemy == Dungeon.hero) { - Dungeon.fail(getClass()); - GLog.n(Messages.capitalize(Messages.get(Char.class, "kill", name))); - } + if (Dungeon.level.adjacent(pos, enemy.pos)){ + Buff.affect(enemy, Ooze.class).set( 20f ); } - return super.defenseProc( enemy, damage ); } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Eye.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Eye.java index 3e07b2e74..aa0548700 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Eye.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Eye.java @@ -29,6 +29,8 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Terror; import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter; import com.shatteredpixel.shatteredpixeldungeon.effects.particles.PurpleParticle; import com.shatteredpixel.shatteredpixeldungeon.items.Dewdrop; +import com.shatteredpixel.shatteredpixeldungeon.items.Generator; +import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.items.wands.WandOfDisintegration; import com.shatteredpixel.shatteredpixeldungeon.items.weapon.enchantments.Grim; import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica; @@ -57,7 +59,7 @@ public class Eye extends Mob { HUNTING = new Hunting(); loot = new Dewdrop(); - lootChance = 0.5f; + lootChance = 1f; properties.add(Property.DEMONIC); } @@ -197,6 +199,24 @@ public class Eye extends Mob { beamTarget = -1; } + //generates an average of 1 dew, 0.25 seeds, and 0.25 stones + @Override + protected Item createLoot() { + Item loot; + switch(Random.Int(4)){ + case 0: case 1: default: + loot = new Dewdrop().quantity(2); + break; + case 3: + loot = Generator.random(Generator.Category.SEED); + break; + case 4: + loot = Generator.random(Generator.Category.STONE); + break; + } + return loot; + } + private static final String BEAM_TARGET = "beamTarget"; private static final String BEAM_COOLDOWN = "beamCooldown"; private static final String BEAM_CHARGED = "beamCharged"; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Scorpio.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Scorpio.java index 4dc8316f1..3e6eeb756 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Scorpio.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Scorpio.java @@ -26,12 +26,14 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Cripple; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Light; +import com.shatteredpixel.shatteredpixeldungeon.items.Generator; import com.shatteredpixel.shatteredpixeldungeon.items.Item; -import com.shatteredpixel.shatteredpixeldungeon.items.food.MysteryMeat; +import com.shatteredpixel.shatteredpixeldungeon.items.potions.Potion; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfHealing; import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica; import com.shatteredpixel.shatteredpixeldungeon.sprites.ScorpioSprite; import com.watabou.utils.Random; +import com.watabou.utils.Reflection; public class Scorpio extends Mob { @@ -45,8 +47,8 @@ public class Scorpio extends Mob { EXP = 14; maxLvl = 25; - loot = new PotionOfHealing(); - lootChance = 0.2f; + loot = Generator.Category.POTION; + lootChance = 0.5f; properties.add(Property.DEMONIC); } @@ -93,13 +95,12 @@ public class Scorpio extends Mob { @Override protected Item createLoot() { - //(9-count) / 9 chance of getting healing, otherwise mystery meat - if (Random.Float() < ((9f - Dungeon.LimitedDrops.SCORPIO_HP.count) / 9f)) { - Dungeon.LimitedDrops.SCORPIO_HP.count++; - return (Item)loot; - } else { - return new MysteryMeat(); - } + Class loot; + do{ + loot = (Class) Random.oneOf(Generator.Category.POTION.classes); + } while (loot == PotionOfHealing.class); + + return Reflection.newInstance(loot); } } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Senior.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Senior.java index 660361c95..6418b28a3 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Senior.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Senior.java @@ -21,6 +21,7 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.mobs; +import com.shatteredpixel.shatteredpixeldungeon.items.food.Pasty; import com.shatteredpixel.shatteredpixeldungeon.sprites.SeniorSprite; import com.watabou.utils.Random; @@ -28,7 +29,8 @@ public class Senior extends Monk { { spriteClass = SeniorSprite.class; - + + loot = new Pasty(); lootChance = 1f; } diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Succubus.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Succubus.java index b743dce4e..67cb1300a 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Succubus.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Succubus.java @@ -31,13 +31,17 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Charm; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Light; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Sleep; import com.shatteredpixel.shatteredpixeldungeon.effects.Speck; -import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfLullaby; +import com.shatteredpixel.shatteredpixeldungeon.items.Generator; +import com.shatteredpixel.shatteredpixeldungeon.items.Item; +import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.Scroll; +import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfIdentify; import com.shatteredpixel.shatteredpixeldungeon.items.scrolls.ScrollOfTeleportation; import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica; import com.shatteredpixel.shatteredpixeldungeon.sprites.SuccubusSprite; import com.watabou.noosa.audio.Sample; import com.watabou.utils.PathFinder; import com.watabou.utils.Random; +import com.watabou.utils.Reflection; import java.util.ArrayList; @@ -57,8 +61,8 @@ public class Succubus extends Mob { EXP = 12; maxLvl = 25; - loot = new ScrollOfLullaby(); - lootChance = 0.05f; + loot = Generator.Category.SCROLL; + lootChance = 0.33f; properties.add(Property.DEMONIC); } @@ -147,7 +151,17 @@ public class Succubus extends Mob { public int drRoll() { return Random.NormalIntRange(0, 10); } - + + @Override + protected Item createLoot() { + Class loot; + do{ + loot = (Class) Random.oneOf(Generator.Category.SCROLL.classes); + } while (loot == ScrollOfIdentify.class); + + return Reflection.newInstance(loot); + } + { immunities.add( Sleep.class ); immunities.add( Charm.class ); diff --git a/core/src/main/resources/com/shatteredpixel/shatteredpixeldungeon/messages/actors/actors.properties b/core/src/main/resources/com/shatteredpixel/shatteredpixeldungeon/messages/actors/actors.properties index a1bee63e9..66915086f 100644 --- a/core/src/main/resources/com/shatteredpixel/shatteredpixeldungeon/messages/actors/actors.properties +++ b/core/src/main/resources/com/shatteredpixel/shatteredpixeldungeon/messages/actors/actors.properties @@ -443,6 +443,7 @@ actors.mobs.npcs.wandmaker.desc=This old yet hale gentleman wears a slightly con ###mobs actors.mobs.acidic.name=acidic scorpio +actors.mobs.acidic.desc=These huge arachnid-like demonic creatures avoid close combat, preferring to fire crippling serrated spikes from long distances. This one appears to be dripping with corrosive ooze. actors.mobs.albino.name=albino rat actors.mobs.albino.desc=This is a rare breed of marsupial rat, with pure white fur and jagged teeth. @@ -579,7 +580,7 @@ actors.mobs.rotlasher.desc=The rot lasher is a part of a mature rotberry plant's actors.mobs.rotlasher$waiting.status=This %s is idle. actors.mobs.scorpio.name=scorpio -actors.mobs.scorpio.desc=These huge arachnid-like demonic creatures avoid close combat by all means, firing crippling serrated spikes from long distances. +actors.mobs.scorpio.desc=These huge arachnid-like demonic creatures avoid close combat, preferring to fire crippling serrated spikes from long distances. actors.mobs.senior.name=senior monk actors.mobs.senior.desc=These monks are fanatics, who have devoted themselves to protecting their king through physical might. So great is their devotion that they have totally surrendered their minds to their king, and now roam the dwarvern city like mindless zombies.\n\nThis monk has mastered the art of hang-to-hand combat, and is able to gain focus while moving much more quickly than regular monks. When they become focused, monks will parry the next physical attack used against them, even if it was otherwise garunteed to hit. Monk build focus more quickly while on the move, and more slowly when in direcy combat. @@ -614,7 +615,7 @@ actors.mobs.statue.def_verb=blocked actors.mobs.statue.desc=You would think that it's just another one of this dungeon's ugly statues, but its red glowing eyes give it away.\n\nWhile the statue itself is made of stone, the _%s,_ it's wielding, looks real. actors.mobs.succubus.name=succubus -actors.mobs.succubus.desc=The succubi are demons that look like seductive (in a slightly gothic way) girls. Using its magic, the succubus can charm a hero, who will become unable to attack anything until the charm wears off. When succubi attack a charmed hero, they will steal their life essence. +actors.mobs.succubus.desc=Succubi are shapeshifting demons that manipulate the minds of their prey. This one has taken the form of a pale gothic humanoid, perhaps to attract dwarven warlocks?\n\nWhen they attack, succubi may charm their target, making them unable to directly attack until the charm wears off. When succubi attack a charmed enemy, they will steal their life essence. actors.mobs.swarm.name=swarm of flies actors.mobs.swarm.desc=The deadly swarm of flies buzzes angrily. Every non-magical attack will split it into two smaller but equally dangerous swarms.