diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Dungeon.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Dungeon.java index dd26f5630..057eda516 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Dungeon.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/Dungeon.java @@ -98,8 +98,9 @@ public class Dungeon { COOKING_HP, BLANDFRUIT_SEED, - //doesn't use Generator, so we have to enforce one armband drop here - THIEVES_ARMBAND, + //Other limited enemy drops + THEIF_MISC, + SHAMAN_WAND, //containers DEW_VIAL, diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Bandit.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Bandit.java index 0081e55ed..b139bee3f 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Bandit.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Bandit.java @@ -38,8 +38,8 @@ public class Bandit extends Thief { { spriteClass = BanditSprite.class; - //1 in 50 chance to be a crazy bandit, equates to overall 1/100 chance. - lootChance = 0.5f; + //guaranteed first drop, then 1/3, 1/9, etc. + lootChance = 1f; } @Override diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/DM100.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/DM100.java index 01ad16a8e..6814c0447 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/DM100.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/DM100.java @@ -41,11 +41,11 @@ public class DM100 extends Mob implements Callback { { spriteClass = DM100Sprite.class; - HP = HT = 18; + HP = HT = 20; defenseSkill = 8; EXP = 6; - maxLvl = 14; + maxLvl = 13; loot = Generator.Category.SCROLL; lootChance = 0.33f; @@ -94,9 +94,6 @@ public class DM100 extends Mob implements Callback { if (hit( this, enemy, true )) { int dmg = Random.NormalIntRange(3, 10); - if (Dungeon.level.water[enemy.pos] && !enemy.flying) { - dmg *= 1.5f; - } enemy.damage( dmg, new LightningBolt() ); enemy.sprite.centerEmitter().burst( SparkParticle.FACTORY, 3 ); diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Shaman.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Shaman.java index 690aa61ee..530e619fa 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Shaman.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Shaman.java @@ -28,6 +28,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Hex; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Vulnerable; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Weakness; import com.shatteredpixel.shatteredpixeldungeon.items.Generator; +import com.shatteredpixel.shatteredpixeldungeon.items.Item; import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite; @@ -35,41 +36,56 @@ import com.shatteredpixel.shatteredpixeldungeon.sprites.ShamanSprite; import com.shatteredpixel.shatteredpixeldungeon.utils.GLog; import com.watabou.utils.Random; -//TODO decide on stats +//TODO stats on these might be a bit weak public abstract class Shaman extends Mob { { - HP = HT = 18; - defenseSkill = 8; + HP = HT = 35; + defenseSkill = 15; - EXP = 6; - maxLvl = 14; + EXP = 8; + maxLvl = 16; - loot = Generator.Category.SCROLL; - lootChance = 0.33f; + loot = Generator.Category.WAND; + lootChance = 0.03f; //initially, see rollToDropLoot } @Override public int damageRoll() { - return Random.NormalIntRange( 2, 8 ); + return Random.NormalIntRange( 5, 12 ); } @Override public int attackSkill( Char target ) { - return 11; + return 18; } @Override public int drRoll() { - return Random.NormalIntRange(0, 4); + return Random.NormalIntRange(0, 6); } @Override protected boolean canAttack( Char enemy ) { return new Ballistica( pos, enemy.pos, Ballistica.MAGIC_BOLT).collisionPos == enemy.pos; } - - protected boolean doAttack( Char enemy ) { + + @Override + public void rollToDropLoot() { + //each drop makes future drops 1/3 as likely + // so loot chance looks like: 1/33, 1/100, 1/300, 1/900, etc. + lootChance *= Math.pow(1/3f, Dungeon.LimitedDrops.SHAMAN_WAND.count); + super.rollToDropLoot(); + super.rollToDropLoot(); + } + + @Override + protected Item createLoot() { + Dungeon.LimitedDrops.SHAMAN_WAND.count++; + return super.createLoot(); + } + + protected boolean doAttack(Char enemy ) { if (Dungeon.level.adjacent( pos, enemy.pos )) { @@ -99,7 +115,7 @@ public abstract class Shaman extends Mob { debuff( enemy ); } - int dmg = Random.Int( 0, 0 ); + int dmg = Random.NormalIntRange( 6, 15 ); enemy.damage( dmg, new EarthenBolt() ); if (!enemy.isAlive() && enemy == Dungeon.hero) { diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Thief.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Thief.java index e2e0e16f4..85714103c 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Thief.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/actors/mobs/Thief.java @@ -50,10 +50,10 @@ public class Thief extends Mob { defenseSkill = 12; EXP = 5; - maxLvl = 10; - + maxLvl = 11; + loot = Random.oneOf(Generator.Category.RING, Generator.Category.ARTIFACT); - lootChance = 0.01f; + lootChance = 0.03f; //initially, see rollToDropLoot WANDERING = new Wandering(); FLEEING = new Fleeing(); @@ -99,9 +99,18 @@ public class Thief extends Mob { if (item instanceof Honeypot.ShatteredPot) ((Honeypot.ShatteredPot)item).dropPot( this, pos ); item = null; } + //each drop makes future drops 1/3 as likely + // so loot chance looks like: 1/33, 1/100, 1/300, 1/900, etc. + lootChance *= Math.pow(1/3f, Dungeon.LimitedDrops.THEIF_MISC.count); super.rollToDropLoot(); } + @Override + protected Item createLoot() { + Dungeon.LimitedDrops.THEIF_MISC.count++; + return super.createLoot(); + } + @Override public int attackSkill( Char target ) { return 12;