v2.2.0: various balance changes to the new caves quest
This commit is contained in:
@@ -1157,6 +1157,7 @@ public class Hero extends Char {
|
||||
}
|
||||
}
|
||||
|
||||
//1 hunger spent total
|
||||
if (Dungeon.level.map[action.dst] == Terrain.WALL_DECO){
|
||||
DarkGold gold = new DarkGold();
|
||||
if (gold.doPickUp( Dungeon.hero )) {
|
||||
@@ -1180,20 +1181,22 @@ public class Hero extends Char {
|
||||
//mining gold doesn't break crystals
|
||||
crystalAdjacent = false;
|
||||
|
||||
//4 hunger spent total
|
||||
} else if (Dungeon.level.map[action.dst] == Terrain.WALL){
|
||||
buff(Hunger.class).affectHunger(-5);
|
||||
buff(Hunger.class).affectHunger(-3);
|
||||
PixelScene.shake(0.5f, 0.5f);
|
||||
CellEmitter.get( action.dst ).burst( Speck.factory( Speck.ROCK ), 2 );
|
||||
Sample.INSTANCE.play( Assets.Sounds.MINE );
|
||||
Level.set( action.dst, Terrain.EMPTY_DECO );
|
||||
|
||||
//1 hunger spent total
|
||||
} else if (Dungeon.level.map[action.dst] == Terrain.MINE_CRYSTAL){
|
||||
Splash.at(action.dst, 0xFFFFFF, 5);
|
||||
Sample.INSTANCE.play( Assets.Sounds.SHATTER );
|
||||
Level.set( action.dst, Terrain.EMPTY );
|
||||
|
||||
//1 hunger spent total
|
||||
} else if (Dungeon.level.map[action.dst] == Terrain.MINE_BOULDER){
|
||||
buff(Hunger.class).affectHunger(-1);
|
||||
Splash.at(action.dst, ColorMath.random( 0x444444, 0x777766 ), 5);
|
||||
Sample.INSTANCE.play( Assets.Sounds.MINE, 0.6f );
|
||||
Level.set( action.dst, Terrain.EMPTY );
|
||||
|
||||
@@ -66,8 +66,8 @@ public class CrystalSpire extends Mob {
|
||||
HP = HT = 300;
|
||||
spriteClass = CrystalSpireSprite.class;
|
||||
|
||||
//acts before other mobs, this is important for how it blocks crystal guardians
|
||||
actPriority = MOB_PRIO+1;
|
||||
//acts after other mobs, which makes baiting crystal guardians more consistent
|
||||
actPriority = MOB_PRIO-1;
|
||||
|
||||
state = PASSIVE;
|
||||
|
||||
@@ -78,10 +78,8 @@ public class CrystalSpire extends Mob {
|
||||
properties.add(Property.INORGANIC);
|
||||
}
|
||||
|
||||
//TODO this fight needs some mechanics and balance tuning now
|
||||
|
||||
private float abilityCooldown;
|
||||
private static final int ABILITY_CD = 12;
|
||||
private static final int ABILITY_CD = 15;
|
||||
|
||||
private ArrayList<ArrayList<Integer>> targetedCells = new ArrayList<>();
|
||||
|
||||
@@ -131,12 +129,12 @@ public class CrystalSpire extends Mob {
|
||||
Char ch = Actor.findChar(i);
|
||||
|
||||
if (ch != null && !(ch instanceof CrystalWisp || ch instanceof CrystalSpire)){
|
||||
int dmg = Random.NormalIntRange(8, 16);
|
||||
int dmg = Random.NormalIntRange(6, 15);
|
||||
|
||||
//guardians are hit harder by the attack
|
||||
if (ch instanceof CrystalGuardian) {
|
||||
dmg += 8;
|
||||
Buff.prolong(ch, Cripple.class, 20f);
|
||||
dmg += 12; //18-27 damage
|
||||
Buff.prolong(ch, Cripple.class, 30f);
|
||||
}
|
||||
ch.damage(dmg, CrystalSpire.this);
|
||||
|
||||
@@ -363,6 +361,8 @@ public class CrystalSpire extends Mob {
|
||||
PixelScene.shake( 3, 0.7f );
|
||||
GLog.n(Messages.get(CrystalSpire.class, "alert"));
|
||||
BossHealthBar.assignBoss(CrystalSpire.this);
|
||||
|
||||
abilityCooldown = 1; //dely first attack by 1 turn
|
||||
}
|
||||
|
||||
boolean affectingGuardians = false;
|
||||
@@ -400,8 +400,8 @@ public class CrystalSpire extends Mob {
|
||||
}
|
||||
|
||||
//delays sleeping guardians that happen to be near to the crystal
|
||||
if (PathFinder.distance[ch.pos] < 24){
|
||||
Buff.affect(ch, Paralysis.class, 24-PathFinder.distance[ch.pos]);
|
||||
if (PathFinder.distance[ch.pos] < 20){
|
||||
Buff.affect(ch, Paralysis.class, 20-PathFinder.distance[ch.pos]);
|
||||
}
|
||||
|
||||
} else if (((CrystalGuardian) ch).state != ((CrystalGuardian) ch).HUNTING && ((CrystalGuardian) ch).target != pos){
|
||||
|
||||
@@ -24,7 +24,6 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.mobs;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Badges;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.AscensionChallenge;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Invisibility;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.mechanics.Ballistica;
|
||||
@@ -40,7 +39,7 @@ public class CrystalWisp extends Mob{
|
||||
{
|
||||
spriteClass = CrystalWispSprite.class;
|
||||
|
||||
HP = HT = 35;
|
||||
HP = HT = 30;
|
||||
defenseSkill = 16;
|
||||
|
||||
EXP = 7;
|
||||
@@ -76,12 +75,12 @@ public class CrystalWisp extends Mob{
|
||||
|
||||
@Override
|
||||
public int damageRoll() {
|
||||
return Random.NormalIntRange( 3, 10 );
|
||||
return Random.NormalIntRange( 5, 10 );
|
||||
}
|
||||
|
||||
@Override
|
||||
public int attackSkill( Char target ) {
|
||||
return 16;
|
||||
return 18;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -115,7 +114,7 @@ public class CrystalWisp extends Mob{
|
||||
}
|
||||
|
||||
//used so resistances can differentiate between melee and magical attacks
|
||||
public static class CrystalBolt{}
|
||||
public static class LightBeam {}
|
||||
|
||||
private void zap() {
|
||||
spend( 1f );
|
||||
@@ -124,9 +123,8 @@ public class CrystalWisp extends Mob{
|
||||
Char enemy = this.enemy;
|
||||
if (hit( this, enemy, true )) {
|
||||
|
||||
int dmg = Random.NormalIntRange( 2, 8 );
|
||||
dmg = Math.round(dmg * AscensionChallenge.statModifier(this));
|
||||
enemy.damage( dmg, new CrystalBolt() );
|
||||
int dmg = Random.NormalIntRange( 5, 10 );
|
||||
enemy.damage( dmg, new LightBeam() );
|
||||
|
||||
if (!enemy.isAlive() && enemy == Dungeon.hero) {
|
||||
Badges.validateDeathFromEnemyMagic();
|
||||
|
||||
@@ -67,11 +67,11 @@ public abstract class CrystalSpireSprite extends MobSprite {
|
||||
|
||||
TextureFilm frames = new TextureFilm( texture, 24, 41 );
|
||||
|
||||
if (hpPercent > 0.8f){
|
||||
if (hpPercent > 0.9f){
|
||||
idle.frames( frames, 0+texOffset() );
|
||||
} else if (hpPercent > 0.5f){
|
||||
} else if (hpPercent > 0.67f){
|
||||
idle.frames( frames, 1+texOffset() );
|
||||
} else if (hpPercent > 0.25f){
|
||||
} else if (hpPercent > 0.33f){
|
||||
idle.frames( frames, 2+texOffset() );
|
||||
} else {
|
||||
idle.frames( frames, 3+texOffset() );
|
||||
|
||||
Reference in New Issue
Block a user