v0.8.0: enemy balance tweaks:

- guard accuracy reduced by ~15%
- guard armor reduced by ~12%
- necromancer evasion increased by ~18%
- ripper demon spawn rate reduced by 20%
- demon spawners now have 120 health, down from 150
- demon spawners now resist damage past 20, down from 25
- regular enemies are slightly less common in demon halls
This commit is contained in:
Evan Debenham 2020-01-17 16:52:37 -05:00
parent ce5ff1a7d5
commit 749a81793f
5 changed files with 34 additions and 12 deletions

View File

@ -32,6 +32,7 @@ import com.shatteredpixel.shatteredpixeldungeon.effects.Pushing;
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfHealing; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfHealing;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.sprites.SpawnerSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.SpawnerSprite;
import com.watabou.utils.Bundle;
import com.watabou.utils.PathFinder; import com.watabou.utils.PathFinder;
import com.watabou.utils.Random; import com.watabou.utils.Random;
@ -42,7 +43,7 @@ public class DemonSpawner extends Mob {
{ {
spriteClass = SpawnerSprite.class; spriteClass = SpawnerSprite.class;
HP = HT = 150; HP = HT = 120;
defenseSkill = 0; defenseSkill = 0;
EXP = 25; EXP = 25;
@ -72,7 +73,7 @@ public class DemonSpawner extends Mob {
return true; return true;
} }
private float spawnCooldown = 50; private float spawnCooldown = 60;
@Override @Override
protected boolean act() { protected boolean act() {
@ -98,7 +99,7 @@ public class DemonSpawner extends Mob {
Actor.addDelayed(new Pushing(spawn, pos, spawn.pos), -1); Actor.addDelayed(new Pushing(spawn, pos, spawn.pos), -1);
} }
spawnCooldown += 50; spawnCooldown += 60;
} }
} }
return super.act(); return super.act();
@ -106,15 +107,29 @@ public class DemonSpawner extends Mob {
@Override @Override
public void damage(int dmg, Object src) { public void damage(int dmg, Object src) {
if (dmg >= 25){ if (dmg >= 20){
//takes 25/26/27/28/29/30/31/32/33/34/35 dmg //takes 20/21/22/23/24/25/26/27/28/29/30 dmg
// at 25/27/30/34/39/45/52/60/69/79/90 incoming dmg // at 20/22/25/29/34/40/47/55/64/74/85 incoming dmg
dmg = 24 + (int)(Math.sqrt(8*(dmg - 24) + 1) - 1)/2; dmg = 19 + (int)(Math.sqrt(8*(dmg - 19) + 1) - 1)/2;
} }
spawnCooldown -= dmg; spawnCooldown -= dmg;
super.damage(dmg, src); super.damage(dmg, src);
} }
public static final String SPAWN_COOLDOWN = "spawn_cooldown";
@Override
public void storeInBundle(Bundle bundle) {
super.storeInBundle(bundle);
bundle.put(SPAWN_COOLDOWN, spawnCooldown);
}
@Override
public void restoreFromBundle(Bundle bundle) {
super.restoreFromBundle(bundle);
spawnCooldown = bundle.getFloat(SPAWN_COOLDOWN);
}
{ {
immunities.add( Paralysis.class ); immunities.add( Paralysis.class );
immunities.add( Amok.class ); immunities.add( Amok.class );

View File

@ -115,12 +115,12 @@ public class Guard extends Mob {
@Override @Override
public int attackSkill( Char target ) { public int attackSkill( Char target ) {
return 14; return 12;
} }
@Override @Override
public int drRoll() { public int drRoll() {
return Random.NormalIntRange(0, 8); return Random.NormalIntRange(0, 7);
} }
@Override @Override

View File

@ -50,7 +50,7 @@ public class Necromancer extends Mob {
spriteClass = NecromancerSprite.class; spriteClass = NecromancerSprite.class;
HP = HT = 35; HP = HT = 35;
defenseSkill = 11; defenseSkill = 13;
EXP = 7; EXP = 7;
maxLvl = 14; maxLvl = 14;

View File

@ -77,6 +77,12 @@ public class HallsLevel extends RegularLevel {
return rooms; return rooms;
} }
@Override
public int nMobs() {
//remove one mob to account for ripper demon spawners
return super.nMobs()-1;
}
@Override @Override
protected int standardRooms() { protected int standardRooms() {
//8 to 10, average 8.67 //8 to 10, average 8.67

View File

@ -49,7 +49,8 @@ public class DemonSpawnerRoom extends SpecialRoom {
spawner.pos = cx + cy * level.width(); spawner.pos = cx + cy * level.width();
level.mobs.add( spawner ); level.mobs.add( spawner );
int rippers = Random.IntRange(1, 2); //2/3 chance for 1, 1/3 chance for 2
int rippers = Random.chances( new float[]{0, 2, 1});
for (int i = 0; i < rippers; i++){ for (int i = 0; i < rippers; i++){
int pos; int pos;