v2.2.0: various balance changes to the new caves quest

This commit is contained in:
Evan Debenham
2023-10-02 13:26:50 -04:00
parent 52bd1066e2
commit abdad5350a
4 changed files with 24 additions and 23 deletions

View File

@@ -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 );

View File

@@ -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){

View File

@@ -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();

View File

@@ -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() );