Example #1
0
Yeti::Yeti(const ReaderMapping& reader) :
  BadGuy(reader, "images/creatures/yeti/yeti.sprite"),
  state(),
  state_timer(),
  safe_timer(),
  stomp_count(),
  hit_points(),
  hud_head(),
  left_stand_x(),
  right_stand_x(),
  left_jump_x(),
  right_jump_x(),
  fixed_pos(),
  hud_icon()
{
  reader.get("lives", hit_points, INITIAL_HITPOINTS);
  countMe = true;
  SoundManager::current()->preload("sounds/yeti_gna.wav");
  SoundManager::current()->preload("sounds/yeti_roar.wav");

  reader.get("hud-icon", hud_icon, "images/creatures/yeti/hudlife.png");
  hud_head = Surface::create(hud_icon);

  initialize();

  reader.get("fixed-pos", fixed_pos, false); 
  if (fixed_pos) {
    left_stand_x = 80;
    right_stand_x = 1140;
    left_jump_x = 528;
    right_jump_x = 692;
  } else {
    recalculate_pos();
  }
}
Example #2
0
Ispy::Ispy(const ReaderMapping& reader) :
  MovingSprite(reader, "images/objects/ispy/ispy.sprite", LAYER_TILES+5, COLGROUP_DISABLED),
  state(ISPYSTATE_IDLE),
  script(),
  dir(AUTO)
{
  // read script to execute
  reader.get("script", script);

  // read direction to face in
  std::string dir_str;
  bool facing_down;
  if (reader.get("direction", dir_str)) {
    if( dir_str == "left" ) dir = LEFT;
    if( dir_str == "right" ) dir = RIGHT;
  } else {
    dir = LEFT;
  }
  if (!reader.get("facing-down", facing_down)) facing_down = false;
  if (facing_down) dir = DOWN;
  if (dir == AUTO) { log_warning << "Setting an Ispy's direction to AUTO is no good idea" << std::endl; }

  // set initial sprite action
  sprite->set_action((dir == DOWN) ? "idle-down" : ((dir == LEFT) ? "idle-left" : "idle-right"));
}
Example #3
0
Candle::Candle(const ReaderMapping& lisp)
  : MovingSprite(lisp, "images/objects/candle/candle.sprite", LAYER_BACKGROUNDTILES+1, COLGROUP_DISABLED),
    ExposedObject<Candle, scripting::Candle>(this),
    burning(true),
    flicker(true),
    lightcolor(1.0f, 1.0f, 1.0f),
    candle_light_1(SpriteManager::current()->create("images/objects/candle/candle-light-1.sprite")),
    candle_light_2(SpriteManager::current()->create("images/objects/candle/candle-light-2.sprite"))
{
  lisp.get("burning", burning, true);
  lisp.get("flicker", flicker, true);
  std::vector<float> vColor;
  if(!lisp.get("color", vColor)) vColor = {1.0f, 1.0f, 1.0f};

  //change the light color if defined
  if (vColor.size() >= 3) {
    lightcolor = Color(vColor);
    candle_light_1->set_blend(Blend(GL_SRC_ALPHA, GL_ONE));
    candle_light_2->set_blend(Blend(GL_SRC_ALPHA, GL_ONE));
    candle_light_1->set_color(lightcolor);
    candle_light_2->set_color(lightcolor);
    //the following allows the original candle appearance to be preserved
    candle_light_1->set_action("white");
    candle_light_2->set_action("white");
  }

  if (burning) {
    sprite->set_action("on");
  } else {
    sprite->set_action("off");
  }

}
Example #4
0
Block::Block(const ReaderMapping& lisp, const std::string& sprite_file) :
  sprite(),
  sprite_name(),
  default_sprite_name(),
  bouncing(false),
  breaking(false),
  bounce_dir(0),
  bounce_offset(0),
  original_y(-1)
{
  lisp.get("x", bbox.p1.x);
  lisp.get("y", bbox.p1.y);

  std::string sf;
  lisp.get("sprite", sf);
  if (sf.empty() || !PHYSFS_exists(sf.c_str())) {
    sf = sprite_file;
  }
  sprite = SpriteManager::current()->create(sf);
  sprite_name = sf;
  default_sprite_name = sprite_name;

  bbox.set_size(32, 32.1f);
  set_group(COLGROUP_STATIC);
  SoundManager::current()->preload("sounds/upgrade.wav");
  SoundManager::current()->preload("sounds/brick.wav");
}
Thunderstorm::Thunderstorm(const ReaderMapping& reader) :
  ExposedObject<Thunderstorm, scripting::Thunderstorm>(this),
  running(true),
  interval(10.0f),
  layer(LAYER_BACKGROUNDTILES-1),
  time_to_thunder(),
  time_to_lightning(),
  flash_display_timer()
{
  reader.get("name", name);
  reader.get("running", running);
  reader.get("interval", interval);
  if(interval <= 0) {
    log_warning << "Running a thunderstorm with non-positive time interval is a bad idea" << std::endl;
  }
  layer = reader_get_layer (reader, /* default = */ LAYER_BACKGROUNDTILES-1);

  SoundManager::current()->preload("sounds/thunder.wav");
  SoundManager::current()->preload("sounds/lightning.wav");

  if (running) {
    running = false; // else start() is ignored
    start();
  }
}
Example #6
0
ScriptedObject::ScriptedObject(const ReaderMapping& lisp) :
    MovingSprite(lisp, "images/objects/bonus_block/brick.sprite", LAYER_OBJECTS, COLGROUP_MOVING_STATIC),
    ExposedObject<ScriptedObject, scripting::ScriptedObject>(this),
    physic(),
    solid(),
    physic_enabled(),
    visible(),
    new_vel_set(false),
    new_vel(),
    new_size()
{
    if (!lisp.get("name", name)) name = "";
    if(name.empty()) {
        name = "unnamed" + std::to_string(graphicsRandom.rand());
        log_warning << "Scripted object must have a name specified, setting to: " << name << std::endl;
    }

    if (!lisp.get("solid", solid)) solid = true;
    if (!lisp.get("physic-enabled", physic_enabled)) physic_enabled = true;
    if (!lisp.get("visible", visible)) visible = true;
    layer = reader_get_layer (lisp, /* default = */ LAYER_OBJECTS);
    if( solid ) {
        set_group( COLGROUP_MOVING_STATIC );
    } else {
        set_group( COLGROUP_DISABLED );
    }
}
Example #7
0
PowerUp::PowerUp(const ReaderMapping& lisp) :
  MovingSprite(lisp, LAYER_OBJECTS, COLGROUP_MOVING),
  physic(),
  script(),
  no_physics(),
  light(0.0f,0.0f,0.0f),
  lightsprite(SpriteManager::current()->create("images/objects/lightmap_light/lightmap_light-small.sprite"))
{
  if (!lisp.get("script", script)) script = "";
  if (!lisp.get("disable-physics", no_physics)) no_physics = false;
  physic.enable_gravity(true);
  SoundManager::current()->preload("sounds/grow.ogg");
  SoundManager::current()->preload("sounds/fire-flower.wav");
  SoundManager::current()->preload("sounds/gulp.wav");
  //set default light for glow effect for standard sprites
  lightsprite->set_blend(Blend(GL_SRC_ALPHA, GL_ONE));
  lightsprite->set_color(Color(0.0f, 0.0f, 0.0f));
  if (sprite_name == "images/powerups/egg/egg.sprite") {
    lightsprite->set_color(Color(0.2f, 0.2f, 0.0f));
  } else if (sprite_name == "images/powerups/fireflower/fireflower.sprite") {
    lightsprite->set_color(Color(0.3f, 0.0f, 0.0f));
  } else if (sprite_name == "images/powerups/iceflower/iceflower.sprite") {
    lightsprite->set_color(Color(0.0f, 0.1f, 0.2f));
  } else if (sprite_name == "images/powerups/airflower/airflower.sprite") {
    lightsprite->set_color(Color(0.15f, 0.0f, 0.15f));
  } else if (sprite_name == "images/powerups/earthflower/earthflower.sprite") {
    lightsprite->set_color(Color(0.0f, 0.3f, 0.0f));
  } else if (sprite_name == "images/powerups/star/star.sprite") {
    lightsprite->set_color(Color(0.4f, 0.4f, 0.4f));
  }

}
Example #8
0
Spotlight::Spotlight(const ReaderMapping& lisp) :
  position(),
  angle(0.0f),
  center(),
  base(),
  lights(),
  light(),
  lightcone(),
  color(1.0f, 1.0f, 1.0f)
{
  lisp.get("x", position.x);
  lisp.get("y", position.y);

  lisp.get("angle", angle);

  std::vector<float> vColor;
  if( lisp.get( "color", vColor ) ){
    color = Color( vColor );
  }

  center    = SpriteManager::current()->create("images/objects/spotlight/spotlight_center.sprite");
  base      = SpriteManager::current()->create("images/objects/spotlight/spotlight_base.sprite");
  lights    = SpriteManager::current()->create("images/objects/spotlight/spotlight_lights.sprite");
  lightcone = SpriteManager::current()->create("images/objects/spotlight/lightcone.sprite");
  light     = SpriteManager::current()->create("images/objects/spotlight/light.sprite");

}
Example #9
0
Platform::Platform(const ReaderMapping& reader, const std::string& default_sprite) :
  MovingSprite(reader, default_sprite, LAYER_OBJECTS, COLGROUP_STATIC),
  ExposedObject<Platform, scripting::Platform>(this),
  PathObject(),
  speed(Vector(0,0)),
  automatic(false),
  player_contact(false),
  last_player_contact(false)
{
  bool running = true;
  reader.get("running", running);
  if ((name.empty()) && (!running)) {
    automatic = true;
  }

  ReaderMapping path_mapping;
  if (!reader.get("path", path_mapping))
  {
    path.reset(new Path(bbox.p1));
    walker.reset(new PathWalker(path.get(), running));
  }
  else
  {
    path.reset(new Path());
    path->read(path_mapping);
    walker.reset(new PathWalker(path.get(), running));
    bbox.set_pos(path->get_base());
  }
}
Example #10
0
void
LevelParser::load_old_format(const ReaderMapping& reader)
{
  reader.get("name", m_level.m_name);
  reader.get("author", m_level.m_author);

  auto sector = SectorParser::from_reader_old_format(m_level, reader);
  m_level.add_sector(std::move(sector));
}
Example #11
0
SpawnPointMarker::SpawnPointMarker (const ReaderMapping& lisp) :
  surface(Surface::create("images/engine/editor/spawnpoint.png"))
{
  lisp.get("name", name, "");
  lisp.get("x", bbox.p1.x, 0);
  lisp.get("y", bbox.p1.y, 0);

  setup();
}
Example #12
0
RustyTrampoline::RustyTrampoline(const ReaderMapping& lisp) :
  Rock(lisp, "images/objects/rusty-trampoline/rusty-trampoline.sprite"),
  portable(true), counter(3)
{
  SoundManager::current()->preload(BOUNCE_SOUND);

  lisp.get("counter", counter);
  lisp.get("portable", portable); //do we really need this?
}
SpawnPointMarker::SpawnPointMarker (const ReaderMapping& lisp) :
  surface(Surface::create("images/engine/editor/spawnpoint.png"))
{
  if ( !lisp.get("name", name)) name = "";
  if ( !lisp.get("x", bbox.p1.x)) bbox.p1.x = 0;
  if ( !lisp.get("y", bbox.p1.y)) bbox.p1.y = 0;

  setup();
}
Example #14
0
void
JoystickConfig::read(const ReaderMapping& joystick_lisp)
{
  joystick_lisp.get("dead-zone", dead_zone);
  joystick_lisp.get("jump-with-up", jump_with_up_joy);
  joystick_lisp.get("use-game-controller", use_game_controller);

  auto iter = joystick_lisp.get_iter();
  while(iter.next())
  {
    if (iter.get_key() == "map")
    {
      int button = -1;
      int axis   = 0;
      int hat    = -1;
      std::string control;
      auto map = iter.as_mapping();
      map.get("control", control);
      int i = 0;
      for(i = 0; Controller::controlNames[i] != 0; ++i)
      {
        if (control == Controller::controlNames[i])
          break;
      }

      if (Controller::controlNames[i] == 0)
      {
        log_info << "Invalid control '" << control << "' in buttonmap" << std::endl;
      }
      else
      {
        if (map.get("button", button))
        {
          bind_joybutton(0, button, Controller::Control(i));
        }
        else if (map.get("axis",   axis))
        {
          bind_joyaxis(0, axis, Controller::Control(i));
        }
        else if (map.get("hat",   hat))
        {
          if (hat != SDL_HAT_UP   &&
              hat != SDL_HAT_DOWN &&
              hat != SDL_HAT_LEFT &&
              hat != SDL_HAT_RIGHT) {
            log_info << "Invalid axis '" << axis << "' in axismap" << std::endl;
          }
          else
          {
            bind_joyhat(0, hat, Controller::Control(i));
          }
        }
      }
    }
  }
}
Example #15
0
ObjectIcon::ObjectIcon(const ReaderMapping& reader) :
  object_name(),
  surface(),
  offset()
{
  std::string icon = "images/engine/icons/supertux.png";
  reader.get("class", object_name);
  reader.get("icon", icon);
  surface = Surface::create(icon);
  calculate_offset();
}
Example #16
0
PowerUp::PowerUp(const ReaderMapping& lisp) :
  MovingSprite(lisp, "images/powerups/egg/egg.sprite", LAYER_OBJECTS, COLGROUP_MOVING),
  physic(),
  script(),
  no_physics(),
  lightsprite(SpriteManager::current()->create("images/objects/lightmap_light/lightmap_light-small.sprite"))
{
  lisp.get("script", script, "");
  lisp.get("disable-physics", no_physics, false);
  initialize();
}
Example #17
0
Decal::Decal(const ReaderMapping& reader) :
  MovingSprite(reader, "images/decal/explanations/billboard-fireflower.png", LAYER_OBJECTS, COLGROUP_DISABLED),
  default_action(),
  solid()
{
  layer = reader_get_layer (reader, /* default = */ LAYER_OBJECTS);

  if (!reader.get("solid", solid)) solid = false;
  if(solid)
    set_group(COLGROUP_STATIC);
  if(reader.get("action", default_action))
    set_action(default_action, -1);
}
Example #18
0
Climbable::Climbable(const ReaderMapping& reader) :
  climbed_by(0),
  activate_try_timer(),
  message()
{
  reader.get("x", bbox.p1.x);
  reader.get("y", bbox.p1.y);
  float w = 32, h = 32;
  reader.get("width", w);
  reader.get("height", h);
  bbox.set_size(w, h);
  reader.get("message", message);
}
Example #19
0
LevelTime::LevelTime(const ReaderMapping& reader) :
  time_surface(),
  running(true),
  time_left()
{
  if (!reader.get("name", name)) name = "";
  if (!reader.get("time", time_left)) time_left = 0;
  if(time_left <= 0) {
    log_warning << "No or invalid leveltime specified." << std::endl;
    remove_me();
  }
  time_surface = Surface::create("images/engine/hud/time-0.png");
}
Example #20
0
Decal::Decal(const ReaderMapping& reader) :
    MovingSprite(reader, LAYER_OBJECTS, COLGROUP_DISABLED)
{
    layer = reader_get_layer (reader, /* default = */ LAYER_OBJECTS);

    bool solid = false;
    reader.get("solid", solid);
    if(solid)
        set_group(COLGROUP_STATIC);
    std::string action;
    if(reader.get("action", action))
        set_action(action, -1);
}
Example #21
0
InvisibleWall::InvisibleWall(const ReaderMapping& mapping):
  MovingObject(mapping),
  width(),
  height()
{
  mapping.get("x", m_col.m_bbox.get_left(), 0.0f);
  mapping.get("y", m_col.m_bbox.get_top(), 0.0f);
  mapping.get("width", width, 32.0f);
  mapping.get("height", height, 32.0f);

  m_col.m_bbox.set_size(width, height);

  m_col.m_group = COLGROUP_STATIC;
}
Example #22
0
SequenceTrigger::SequenceTrigger(const ReaderMapping& reader) :
  triggerevent(EVENT_TOUCH),
  sequence(SEQ_ENDSEQUENCE),
  new_size(),
  new_spawnpoint(),
  fade_tilemap(),
  fade()
{
  reader.get("x", m_col.m_bbox.get_left(), 0.0f);
  reader.get("y", m_col.m_bbox.get_top(), 0.0f);
  float w, h;
  reader.get("width", w, 32.0f);
  reader.get("height", h, 32.0f);
  m_col.m_bbox.set_size(w, h);
  new_size.x = w;
  new_size.y = h;
  std::string sequence_name;
  if (reader.get("sequence", sequence_name)) {
    sequence = string_to_sequence(sequence_name);
  }

  reader.get("new_spawnpoint", new_spawnpoint);
  reader.get("fade_tilemap", fade_tilemap);
  reader.get("fade", reinterpret_cast<int&>(fade));
}
Example #23
0
void
PlayerStatus::read(const ReaderMapping& lisp)
{
  reset();

  std::string bonusname;
  if(lisp.get("bonus", bonusname)) {
    if(bonusname == "none") {
      bonus = NO_BONUS;
    } else if(bonusname == "growup") {
      bonus = GROWUP_BONUS;
    } else if(bonusname == "fireflower") {
      bonus = FIRE_BONUS;
    } else if(bonusname == "iceflower") {
      bonus = ICE_BONUS;
    } else if(bonusname == "airflower") {
      bonus = AIR_BONUS;
    } else if(bonusname == "earthflower") {
      bonus = EARTH_BONUS;
    } else {
      log_warning << "Unknown bonus '" << bonusname << "' in savefile" << std::endl;
      bonus = NO_BONUS;
    }
  }
  lisp.get("fireflowers", max_fire_bullets);
  lisp.get("iceflowers", max_ice_bullets);
  lisp.get("airflowers", max_air_time);
  lisp.get("earthflowers", max_earth_time);

  lisp.get("coins", coins);

  lisp.get("worldmap-sprite", worldmap_sprite);
  lisp.get("last-worldmap", last_worldmap);
}
Example #24
0
MovingSprite::MovingSprite(const ReaderMapping& reader, int layer_, CollisionGroup collision_group) :
  sprite_name(),
  sprite(),
  layer(layer_)
{
  reader.get("x", bbox.p1.x);
  reader.get("y", bbox.p1.y);
  if (!reader.get("sprite", sprite_name))
    throw std::runtime_error("no sprite name set");

  sprite = SpriteManager::current()->create(sprite_name);
  bbox.set_size(sprite->get_current_hitbox_width(), sprite->get_current_hitbox_height());
  set_group(collision_group);
}
Example #25
0
SpecialTile::SpecialTile(const ReaderMapping& lisp) :
  pos(),
  sprite(),
  map_message(),
  passive_message(false),
  script(),
  invisible(false),
  apply_action_north(true),
  apply_action_east(true),
  apply_action_south(true),
  apply_action_west(true)
{
  if(!lisp.get("x", pos.x)) {
    log_warning << "X coordinate of special tile not set, defaulting to 0" << std::endl;
  }
  if(!lisp.get("y", pos.y)) {
    log_warning << "Y coordinate of special tile not set, defaulting to 0" << std::endl;
  }
  if(!lisp.get("invisible-tile", invisible)) {
    // Ignore attribute if it's not specified. Tile is visible.
  }

  if(!invisible) {
    std::string spritefile = "";
    if(!lisp.get("sprite", spritefile)) {
      log_warning << "No sprite specified for visible special tile." << std::endl;
    }
    sprite = SpriteManager::current()->create(spritefile);
  }

  if(!lisp.get("map-message", map_message)) {
    // Ignore attribute if it's not specified. No map message set.
  }
  if(!lisp.get("passive-message", passive_message)) {
    // Ignore attribute if it's not specified. No passive message set.
  }
  if(!lisp.get("script", script)) {
    // Ignore attribute if it's not specified. No script set.
  }

  std::string apply_direction;
  if(!lisp.get("apply-to-direction", apply_direction)) {
    // Ignore attribute if it's not specified. Applies to all directions.
  }
  if(!apply_direction.empty()) {
    apply_action_north = false;
    apply_action_south = false;
    apply_action_east = false;
    apply_action_west = false;
    if(apply_direction.find("north") != std::string::npos)
      apply_action_north = true;
    if(apply_direction.find("south") != std::string::npos)
      apply_action_south = true;
    if(apply_direction.find("east") != std::string::npos)
      apply_action_east = true;
    if(apply_direction.find("west") != std::string::npos)
      apply_action_west = true;
  }
}
Example #26
0
BicyclePlatform::BicyclePlatform(const ReaderMapping& reader) :
  MovingSprite(reader, "images/objects/platforms/small.sprite", LAYER_OBJECTS, COLGROUP_STATIC),
  master(nullptr),
  slave(nullptr),
  center(get_pos()),
  radius(128),
  angle(0),
  angular_speed(0),
  contacts(),
  momentum(0),
  momentum_change_rate(0.1f)
{
  reader.get("radius", radius, 128.0f);
  reader.get("momentum-change-rate", momentum_change_rate, 0.1f);
}
Example #27
0
SequenceTrigger::SequenceTrigger(const ReaderMapping& reader) :
  triggerevent(EVENT_TOUCH),
  sequence(SEQ_ENDSEQUENCE),
  new_size()
{
  reader.get("x", bbox.p1.x, 0);
  reader.get("y", bbox.p1.y, 0);
  float w, h;
  reader.get("width", w, 32);
  reader.get("height", h, 32);
  bbox.set_size(w, h);
  std::string sequence_name;
  if (reader.get("sequence", sequence_name)) {
    sequence = string_to_sequence(sequence_name);
  }
}
Example #28
0
SpawnPoint::SpawnPoint(const ReaderMapping& slisp) :
  name(),
  pos()
{
  pos.x = -1;
  pos.y = -1;

  slisp.get("name", name);
  slisp.get("x", pos.x);
  slisp.get("y", pos.y);

  if(name.empty())
    log_warning << "No name specified for spawnpoint. Ignoring." << std::endl;
  if(pos.x < 0 || pos.y < 0)
    log_warning << "Invalid coordinates specified for spawnpoint. Ignoring." << std::endl;
}
Example #29
0
Firefly::Firefly(const ReaderMapping& lisp) :
   MovingSprite(lisp, "images/objects/resetpoints/default-resetpoint.sprite", LAYER_TILES, COLGROUP_TOUCHABLE),
   activated(false),
   initial_position()
{
  initial_position = get_pos();
  if( !lisp.get( "sprite", sprite_name ) ){
    reactivate();
    return;
  }
  if (sprite_name.empty()) {
    sprite_name = "images/objects/resetpoints/default-resetpoint.sprite";
    reactivate();
    return;
  }
  //Replace sprite
  sprite = SpriteManager::current()->create( sprite_name );
  bbox.set_size(sprite->get_current_hitbox_width(), sprite->get_current_hitbox_height());
  reactivate();

  //Load sound
    if( sprite_name.find("vbell", 0) == std::string::npos ) {
      SoundManager::current()->preload("sounds/savebell_low.wav");
    }
    else {
      SoundManager::current()->preload("sounds/savebell2.wav");
    }
}
Example #30
0
Haywire::Haywire(const ReaderMapping& reader) :
  WalkingBadguy(reader, "images/creatures/haywire/haywire.sprite", "left", "right"),
  is_exploding(false),
  time_until_explosion(0.0f),
  is_stunned(false),
  time_stunned(0.0f),
  ticking(),
  grunting()
{
  walk_speed = NORMAL_WALK_SPEED;
  max_drop_height = 16;

  //Prevent stutter when Tux jumps on Mr Bomb
  SoundManager::current()->preload("sounds/explosion.wav");

  //Check if we need another sprite
  if( !reader.get( "sprite", sprite_name ) ){
    return;
  }
  if (sprite_name.empty()) {
    sprite_name = "images/creatures/haywire/haywire.sprite";
    return;
  }
  //Replace sprite
  sprite = SpriteManager::current()->create( sprite_name );
}