@Override
  public MapObject doNextAction(MapEngine engine, double s_elapsed) {
    if (can_growl && growl_cooldown_left < 0.0) {
      registerGrowler(engine);
    }
    MultipleObject created_objects = new MultipleObject();
    if (!is_exploded) {
      if (firing_cannon && shields >= 0) {
        if (volley_reload_time_left < 0.0) {
          --shots_left_in_volley;
          if (shots_left_in_volley < 1) {
            firing_cannon = false;
          }
          else {
            volley_reload_time_left = VOLLEY_RELOAD_TIME;
          }
          created_objects.addObject(handleFiringCannon(engine));
        }
      }
    }
    created_objects.addObject(super.doNextAction(engine, s_elapsed));
    return created_objects;
  }