use of com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Bee in project shattered-pixel-dungeon-gdx by 00-Evan.
the class Honeypot method shatter.
public Item shatter(Char owner, int pos) {
if (Dungeon.level.heroFOV[pos]) {
Sample.INSTANCE.play(Assets.SND_SHATTER);
Splash.at(pos, 0xffd500, 5);
}
int newPos = pos;
if (Actor.findChar(pos) != null) {
ArrayList<Integer> candidates = new ArrayList<Integer>();
boolean[] passable = Dungeon.level.passable;
for (int n : PathFinder.NEIGHBOURS4) {
int c = pos + n;
if (passable[c] && Actor.findChar(c) == null) {
candidates.add(c);
}
}
newPos = candidates.size() > 0 ? Random.element(candidates) : -1;
}
if (newPos != -1) {
Bee bee = new Bee();
bee.spawn(Dungeon.depth);
bee.setPotInfo(pos, owner);
bee.HP = bee.HT;
bee.pos = newPos;
GameScene.add(bee);
Actor.addDelayed(new Pushing(bee, pos, newPos), -1f);
bee.sprite.alpha(0);
bee.sprite.parent.add(new AlphaTweener(bee.sprite, 1, 0.15f));
Sample.INSTANCE.play(Assets.SND_BEE);
return new ShatteredPot().setBee(bee);
} else {
return this;
}
}
use of com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Bee in project shattered-pixel-dungeon-gdx by 00-Evan.
the class SecretHoneypotRoom method paint.
@Override
public void paint(Level level) {
Painter.fill(level, this, Terrain.WALL);
Painter.fill(level, this, 1, Terrain.EMPTY);
Point brokenPotPos = center();
brokenPotPos.x = (brokenPotPos.x + entrance().x) / 2;
brokenPotPos.y = (brokenPotPos.y + entrance().y) / 2;
Honeypot.ShatteredPot pot = new Honeypot.ShatteredPot();
level.drop(pot, level.pointToCell(brokenPotPos));
Bee bee = new Bee();
bee.spawn(Dungeon.depth);
bee.HP = bee.HT;
bee.pos = level.pointToCell(brokenPotPos);
level.mobs.add(bee);
pot.setBee(bee);
bee.setPotInfo(level.pointToCell(brokenPotPos), null);
placeItem(new Honeypot(), level);
placeItem(Random.Int(3) == 0 ? new Bomb.DoubleBomb() : new Bomb(), level);
if (Random.Int(2) == 0) {
placeItem(new Bomb(), level);
}
entrance().set(Door.Type.HIDDEN);
}
use of com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Bee in project shattered-pixel-dungeon-gdx by 00-Evan.
the class WandOfCorruption method onZap.
@Override
protected void onZap(Ballistica bolt) {
Char ch = Actor.findChar(bolt.collisionPos);
if (ch != null) {
if (!(ch instanceof Mob)) {
return;
}
Mob enemy = (Mob) ch;
float corruptingPower = 2 + level();
// base enemy resistance is usually based on their exp, but in special cases it is based on other criteria
float enemyResist = 1 + enemy.EXP;
if (ch instanceof Mimic || ch instanceof Statue) {
enemyResist = 1 + Dungeon.depth;
} else if (ch instanceof Piranha || ch instanceof Bee) {
enemyResist = 1 + Dungeon.depth / 2f;
} else if (ch instanceof Wraith) {
// this is so low because wraiths are always at max hp
enemyResist = 0.5f + Dungeon.depth / 8f;
} else if (ch instanceof Yog.BurningFist || ch instanceof Yog.RottingFist) {
enemyResist = 1 + 30;
} else if (ch instanceof Yog.Larva || ch instanceof King.Undead) {
enemyResist = 1 + 5;
} else if (ch instanceof Swarm) {
// child swarms don't give exp, so we force this here.
enemyResist = 1 + 3;
}
// 100% health: 3x resist 75%: 2.1x resist 50%: 1.5x resist 25%: 1.1x resist
enemyResist *= 1 + 2 * Math.pow(enemy.HP / (float) enemy.HT, 2);
// debuffs placed on the enemy reduce their resistance
for (Buff buff : enemy.buffs()) {
if (MAJOR_DEBUFFS.containsKey(buff.getClass()))
enemyResist *= MAJOR_DEBUFF_WEAKEN;
else if (MINOR_DEBUFFS.containsKey(buff.getClass()))
enemyResist *= MINOR_DEBUFF_WEAKEN;
else if (buff.type == Buff.buffType.NEGATIVE)
enemyResist *= MINOR_DEBUFF_WEAKEN;
}
// cannot re-corrupt or doom an enemy, so give them a major debuff instead
if (enemy.buff(Corruption.class) != null || enemy.buff(Doom.class) != null) {
enemyResist = corruptingPower * .99f;
}
if (corruptingPower > enemyResist) {
corruptEnemy(enemy);
} else {
float debuffChance = corruptingPower / enemyResist;
if (Random.Float() < debuffChance) {
debuffEnemy(enemy, MAJOR_DEBUFFS);
} else {
debuffEnemy(enemy, MINOR_DEBUFFS);
}
}
processSoulMark(ch, chargesPerCast());
} else {
Dungeon.level.press(bolt.collisionPos, null, true);
}
}
Aggregations