- action = new Action;
-
- init_defaults(action);
-
- if(!lispreader.read_string("name", action->name))
- if(!actions.empty())
- Termination::abort("Error: If there are more than one action, they need names!", "");
- lispreader.read_int("x-offset", action->x_offset);
- lispreader.read_int("y-offset", action->y_offset);
- lispreader.read_int("z-order", action->z_order);
- lispreader.read_float("fps", action->fps);
-
- std::vector<std::string> images;
- if(!lispreader.read_string_vector("images", images))
- Termination::abort("Sprite contains no images: ", action->name.c_str());
-
- for(std::vector<std::string>::size_type i = 0; i < images.size(); i++)
- {
- action->surfaces.push_back(
- new Surface(datadir + "/images/" + images[i], true));
- }
-
- // TODO: add a top filter entry
- std::vector <int> mask_color;
- lispreader.read_int_vector("apply-mask", mask_color);
- if(mask_color.size() == 4)
- {
- for(std::vector<Surface*>::iterator i = action->surfaces.begin();
- i < action->surfaces.end(); i++)
- {
- (*i)->apply_mask(Color(mask_color));
- }
- }
-
- actions[action->name] = action;