@Override
  public MapObject doNextAction(MapEngine engine, double s_elapsed) {
    if (is_cloaked && cloak_time_left < 0.0) {
      is_cloaked = false;
      is_visible = true;
      playPublicSound("effects/cloakoff.wav");
    }
    MultipleObject created_objects = new MultipleObject();
    if (!death_spin_started) {
      if (!death_spin_started) {
        if (firing_cannon) {
          firing_cannon = false;
          created_objects.addObject(fireCannon());
        }
        if (firing_secondary) {
          firing_secondary = false;
          created_objects.addObject(fireSecondary());
        }
        if (dropping_bomb) {
          dropping_bomb = false;
          created_objects.addObject(dropBomb());
        }
      }
    }
    created_objects.addObject(super.doNextAction(engine, s_elapsed));
    if (!is_in_map && shields < 0) {
      room.doSplashDamage(this, DEATH_SPLASH_DAMAGE, DEATH_SPLASH_DAMAGE_RADIUS, this);
      ((PyroPilot) pilot).prepareForRespawn();
      engine.respawnPyroAfterDeath(this);
    }
    return created_objects;
  }