@Override
  protected void evolve() {
    super.evolve();

    Char ch;
    int cell;

    for (int i = area.left; i < area.right; i++) {
      for (int j = area.top; j < area.bottom; j++) {
        cell = i + j * Dungeon.level.width();
        if (cur[cell] > 0 && (ch = Actor.findChar(cell)) != null) {
          if (!ch.immunities().contains(this.getClass()))
            Buff.prolong(ch, Paralysis.class, Paralysis.duration(ch) / 5);
        }
      }
    }
  }
    public boolean checkOwner(Char owner) {
      if (!owner.isAlive() && owner instanceof Hero) {

        Dungeon.fail(Utils.format(ResultDescriptions.GLYPH, name()));
        GLog.n("%s killed you...", name());

        Badges.validateDeathFromGlyph();
        return true;

      } else {
        return false;
      }
    }
  public static void appear(Char ch, int pos) {

    ch.sprite.interruptMotion();

    ch.move(pos);
    ch.sprite.place(pos);

    if (ch.invisible == 0) {
      ch.sprite.alpha(0);
      ch.sprite.parent.add(new AlphaTweener(ch.sprite, 1, 0.4f));
    }

    ch.sprite.emitter().start(Speck.factory(Speck.LIGHT), 0.2f, 3);
    Sample.INSTANCE.play(Assets.SND_TELEPORT);
  }