Search in sources :

Example 1 with Statue

use of com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Statue in project shattered-pixel-dungeon-gdx by 00-Evan.

the class StatueRoom method paint.

public void paint(Level level) {
    Painter.fill(level, this, Terrain.WALL);
    Painter.fill(level, this, 1, Terrain.EMPTY);
    Point c = center();
    int cx = c.x;
    int cy = c.y;
    Door door = entrance();
    door.set(Door.Type.LOCKED);
    level.addItemToSpawn(new IronKey(Dungeon.depth));
    if (door.x == left) {
        Painter.fill(level, right - 1, top + 1, 1, height() - 2, Terrain.STATUE);
        cx = right - 2;
    } else if (door.x == right) {
        Painter.fill(level, left + 1, top + 1, 1, height() - 2, Terrain.STATUE);
        cx = left + 2;
    } else if (door.y == top) {
        Painter.fill(level, left + 1, bottom - 1, width() - 2, 1, Terrain.STATUE);
        cy = bottom - 2;
    } else if (door.y == bottom) {
        Painter.fill(level, left + 1, top + 1, width() - 2, 1, Terrain.STATUE);
        cy = top + 2;
    }
    Statue statue = new Statue();
    statue.pos = cx + cy * level.width();
    level.mobs.add(statue);
}
Also used : Statue(com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Statue) IronKey(com.shatteredpixel.shatteredpixeldungeon.items.keys.IronKey) Point(com.watabou.utils.Point) Point(com.watabou.utils.Point)

Example 2 with Statue

use of com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Statue in project shattered-pixel-dungeon-gdx by 00-Evan.

the class Multiplicity method proc.

@Override
public int proc(Armor armor, Char attacker, Char defender, int damage) {
    if (Random.Int(20) == 0) {
        ArrayList<Integer> spawnPoints = new ArrayList<>();
        for (int i = 0; i < PathFinder.NEIGHBOURS8.length; i++) {
            int p = defender.pos + PathFinder.NEIGHBOURS8[i];
            if (Actor.findChar(p) == null && (Dungeon.level.passable[p] || Dungeon.level.avoid[p])) {
                spawnPoints.add(p);
            }
        }
        if (spawnPoints.size() > 0) {
            Mob m = null;
            if (Random.Int(2) == 0 && defender instanceof Hero) {
                m = new MirrorImage();
                ((MirrorImage) m).duplicate((Hero) defender);
            } else {
                // FIXME should probably have a mob property for this
                if (attacker.properties().contains(Char.Property.BOSS) || attacker.properties().contains(Char.Property.MINIBOSS) || attacker instanceof Mimic || attacker instanceof Statue) {
                    m = Dungeon.level.createMob();
                } else {
                    try {
                        Actor.fixTime();
                        m = (Mob) attacker.getClass().newInstance();
                        Bundle store = new Bundle();
                        attacker.storeInBundle(store);
                        m.restoreFromBundle(store);
                        m.HP = m.HT;
                        // If a thief has stolen an item, that item is not duplicated.
                        if (m instanceof Thief) {
                            ((Thief) m).item = null;
                        }
                    } catch (Exception e) {
                        ShatteredPixelDungeon.reportException(e);
                        m = null;
                    }
                }
            }
            if (m != null) {
                GameScene.add(m);
                ScrollOfTeleportation.appear(m, Random.element(spawnPoints));
            }
        }
    }
    return damage;
}
Also used : MirrorImage(com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.MirrorImage) Mob(com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob) Mimic(com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mimic) Statue(com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Statue) Bundle(com.watabou.utils.Bundle) Thief(com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Thief) ArrayList(java.util.ArrayList) Hero(com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero)

Example 3 with Statue

use of com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Statue 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);
    }
}
Also used : Mob(com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob) Bee(com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Bee) Mimic(com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mimic) Piranha(com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Piranha) FlavourBuff(com.shatteredpixel.shatteredpixeldungeon.actors.buffs.FlavourBuff) Buff(com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff) Yog(com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Yog) Swarm(com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Swarm) King(com.shatteredpixel.shatteredpixeldungeon.actors.mobs.King) Char(com.shatteredpixel.shatteredpixeldungeon.actors.Char) Statue(com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Statue) Wraith(com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Wraith)

Aggregations

Statue (com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Statue)3 Mimic (com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mimic)2 Mob (com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Mob)2 Char (com.shatteredpixel.shatteredpixeldungeon.actors.Char)1 Buff (com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff)1 FlavourBuff (com.shatteredpixel.shatteredpixeldungeon.actors.buffs.FlavourBuff)1 Hero (com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero)1 Bee (com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Bee)1 King (com.shatteredpixel.shatteredpixeldungeon.actors.mobs.King)1 Piranha (com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Piranha)1 Swarm (com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Swarm)1 Thief (com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Thief)1 Wraith (com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Wraith)1 Yog (com.shatteredpixel.shatteredpixeldungeon.actors.mobs.Yog)1 MirrorImage (com.shatteredpixel.shatteredpixeldungeon.actors.mobs.npcs.MirrorImage)1 IronKey (com.shatteredpixel.shatteredpixeldungeon.items.keys.IronKey)1 Bundle (com.watabou.utils.Bundle)1 Point (com.watabou.utils.Point)1 ArrayList (java.util.ArrayList)1