v0.3.2: rebalanced the Goo fight
This commit is contained in:
parent
71f65ec31a
commit
c4b3a9503e
|
@ -53,9 +53,9 @@ import com.watabou.utils.Random;
|
|||
public class Goo extends Mob {
|
||||
{
|
||||
name = "Goo";
|
||||
HP = HT = 80;
|
||||
HP = HT = 100;
|
||||
EXP = 10;
|
||||
defenseSkill = 12;
|
||||
defenseSkill = 8;
|
||||
spriteClass = GooSprite.class;
|
||||
|
||||
loot = new LloydsBeacon().identify();
|
||||
|
@ -66,6 +66,8 @@ public class Goo extends Mob {
|
|||
|
||||
@Override
|
||||
public int damageRoll() {
|
||||
int min = (HP*2 <= HT) ? 3 : 2;
|
||||
int max = (HP*2 <= HT) ? 12 : 8;
|
||||
if (pumpedUp > 0) {
|
||||
pumpedUp = 0;
|
||||
for (int i = 0; i < Level.NEIGHBOURS9DIST2.length; i++) {
|
||||
|
@ -74,15 +76,23 @@ public class Goo extends Mob {
|
|||
CellEmitter.get(j).burst(ElmoParticle.FACTORY, 10);
|
||||
}
|
||||
Sample.INSTANCE.play( Assets.SND_BURNING );
|
||||
return Random.NormalIntRange( 5, 30 );
|
||||
return Random.NormalIntRange( min*3, max*3 );
|
||||
} else {
|
||||
return Random.NormalIntRange( 2, 12 );
|
||||
return Random.NormalIntRange( min, max );
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int attackSkill( Char target ) {
|
||||
return (pumpedUp > 0) ? 30 : 15;
|
||||
int attack = 10;
|
||||
if (HP*2 <= HT) attack = 15;
|
||||
if (pumpedUp > 0) attack *= 2;
|
||||
return attack;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int defenseSkill(Char enemy) {
|
||||
return (int)(super.defenseSkill(enemy) * ((HP*2 <= HT)? 1.5 : 1));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -95,6 +105,10 @@ public class Goo extends Mob {
|
|||
|
||||
if (Level.water[pos] && HP < HT) {
|
||||
sprite.emitter().burst( Speck.factory( Speck.HEALING ), 1 );
|
||||
if (HP*2 == HT) {
|
||||
BossHealthBar.bleed(false);
|
||||
((GooSprite)sprite).spray(false);
|
||||
}
|
||||
HP++;
|
||||
}
|
||||
|
||||
|
@ -134,7 +148,7 @@ public class Goo extends Mob {
|
|||
spend( attackDelay() );
|
||||
|
||||
return true;
|
||||
} else if (pumpedUp >= 2 || Random.Int( 3 ) > 0) {
|
||||
} else if (pumpedUp >= 2 || Random.Int( (HP*2 <= HT) ? 2 : 5 ) > 0) {
|
||||
|
||||
boolean visible = Dungeon.visible[pos];
|
||||
|
||||
|
@ -194,7 +208,21 @@ public class Goo extends Mob {
|
|||
Dungeon.level.seal();
|
||||
super.move( step );
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void damage(int dmg, Object src) {
|
||||
boolean bleeding = (HP*2 <= HT);
|
||||
super.damage(dmg, src);
|
||||
if ((HP*2 <= HT) && !bleeding){
|
||||
BossHealthBar.bleed(true);
|
||||
GLog.w("Goo Becomes Enraged!!");
|
||||
sprite.showStatus(CharSprite.NEGATIVE, "enraged");
|
||||
((GooSprite)sprite).spray(true);
|
||||
yell("GLUUUURP!");
|
||||
spend( TICK );
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void die( Object cause ) {
|
||||
|
||||
|
@ -244,6 +272,8 @@ public class Goo extends Mob {
|
|||
|
||||
pumpedUp = bundle.getInt( PUMPEDUP );
|
||||
if (state != SLEEPING) BossHealthBar.assignBoss(this);
|
||||
if ((HP*2 <= HT)) BossHealthBar.bleed(true);
|
||||
|
||||
}
|
||||
|
||||
private static final HashSet<Class<?>> RESISTANCES = new HashSet<Class<?>>();
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
*/
|
||||
package com.shatteredpixel.shatteredpixeldungeon.sprites;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.watabou.noosa.TextureFilm;
|
||||
import com.watabou.noosa.particles.Emitter;
|
||||
import com.watabou.noosa.particles.PixelParticle;
|
||||
|
@ -34,6 +35,8 @@ public class GooSprite extends MobSprite {
|
|||
private Animation pump;
|
||||
private Animation pumpAttack;
|
||||
|
||||
private Emitter spray;
|
||||
|
||||
public GooSprite() {
|
||||
super();
|
||||
|
||||
|
@ -59,25 +62,42 @@ public class GooSprite extends MobSprite {
|
|||
die = new Animation( 10, false );
|
||||
die.frames( frames, 5, 6, 7 );
|
||||
|
||||
play( idle );
|
||||
play(idle);
|
||||
|
||||
spray = centerEmitter();
|
||||
spray.autoKill = false;
|
||||
spray.pour( GooParticle.FACTORY, 0.04f );
|
||||
spray.on = false;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void link(Char ch) {
|
||||
super.link(ch);
|
||||
if (ch.HP*2 <= ch.HT)
|
||||
spray(true);
|
||||
}
|
||||
|
||||
public void pumpUp() {
|
||||
play( pump );
|
||||
}
|
||||
|
||||
public void pumpAttack() { play( pumpAttack ); }
|
||||
|
||||
@Override
|
||||
public void play( Animation anim, boolean force ) {
|
||||
super.play( anim, force );
|
||||
}
|
||||
public void pumpAttack() { play(pumpAttack); }
|
||||
|
||||
@Override
|
||||
public int blood() {
|
||||
return 0xFF000000;
|
||||
}
|
||||
|
||||
public void spray(boolean on){
|
||||
spray.on = on;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update() {
|
||||
super.update();
|
||||
spray.pos(center());
|
||||
}
|
||||
|
||||
public static class GooParticle extends PixelParticle.Shrinking {
|
||||
|
||||
public static final Emitter.Factory FACTORY = new Factory() {
|
||||
|
@ -124,6 +144,8 @@ public class GooSprite extends MobSprite {
|
|||
|
||||
idle();
|
||||
ch.onAttackComplete();
|
||||
} else if (anim == die) {
|
||||
spray.killAndErase();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user