#include "control/joystickkeyboardcontroller.h"
#include "object/background.h"
#include "object/tilemap.h"
+#include "scripting/script_interpreter.h"
Menu* worldmap_menu = 0;
tux = new Tux(this);
add_object(tux);
- leveldot_green
- = new Surface(datadir + "/images/tiles/worldmap/leveldot_green.png", true);
- leveldot_red
- = new Surface(datadir + "/images/tiles/worldmap/leveldot_red.png", true);
- messagedot
- = new Surface(datadir + "/images/tiles/worldmap/messagedot.png", true);
- teleporterdot
- = new Surface(datadir + "/images/tiles/worldmap/teleporterdot.png", true);
+ leveldot_green= new Surface("images/tiles/worldmap/leveldot_green.png", true);
+ leveldot_red = new Surface("images/tiles/worldmap/leveldot_red.png", true);
+ messagedot = new Surface("images/tiles/worldmap/messagedot.png", true);
+ teleporterdot = new Surface("images/tiles/worldmap/teleporterdot.png", true);
name = "<no title>";
music = "salcon.mod";
try {
lisp::Parser parser;
- std::string filename = get_resource_filename(map_filename);
- std::auto_ptr<lisp::Lisp> root (parser.parse(filename));
+ std::auto_ptr<lisp::Lisp> root (parser.parse(map_filename));
const lisp::Lisp* lisp = root->get_lisp("supertux-worldmap");
if(!lisp)
- throw new std::runtime_error("file isn't a supertux-worldmap file.");
+ throw std::runtime_error("file isn't a supertux-worldmap file.");
clear_objects();
lisp::ListIterator iter(lisp);
const lisp::Lisp* props = iter.lisp();
props->get("name", name);
props->get("music", music);
- props->get("intro-filename", intro_filename);
+ } else if(iter.item() == "intro-script") {
+ iter.value()->get(intro_script);
} else if(iter.item() == "spawnpoint") {
SpawnPoint* sp = new SpawnPoint(iter.lisp());
spawn_points.push_back(sp);
level.south = true;
level.west = true;
- level_lisp->get("extro-filename", level.extro_filename);
+ level_lisp->get("extro-script", level.extro_script);
level_lisp->get("next-worldmap", level.next_worldmap);
level.quit_worldmap = false;
try {
lisp::Parser parser;
- std::auto_ptr<lisp::Lisp> root (
- parser.parse(get_resource_filename(levels_path + level.name)));
+ std::auto_ptr<lisp::Lisp> root (parser.parse(levels_path + level.name));
const lisp::Lisp* level_lisp = root->get_lisp("supertux-level");
if(!level_lisp)
// do a shriking fade to the level
shrink_fade(Vector((level->pos.x*32 + 16 + offset.x),
(level->pos.y*32 + 16 + offset.y)), 500);
- GameSession session(get_resource_filename(levels_path + level->name),
+ GameSession session(levels_path + level->name,
ST_GL_LOAD_LEVEL_FILE, &level->statistics);
switch (session.run())
/* The porpose of the next checking is that if the player lost
the level (in case there is one), don't show anything */
if(level_finished) {
- if (!level->extro_filename.empty()) {
- // Display a text file
- std::string filename = levels_path + level->extro_filename;
- display_text_file(filename);
+ if (level->extro_script != "") {
+ try {
+ std::auto_ptr<ScriptInterpreter> interpreter
+ (new ScriptInterpreter(levels_path));
+ std::istringstream in(level->extro_script);
+ interpreter->run_script(in, "level-extro-script");
+ add_object(interpreter.release());
+ } catch(std::exception& e) {
+ std::cerr << "Couldn't run level-extro-script:" << e.what() << "\n";
+ }
}
if (!level->next_worldmap.empty())
}
}
/* Display a passive message in the map, if needed */
- if(passive_message_timer.check())
+ if(passive_message_timer.started())
context.draw_text(gold_text, passive_message,
Vector(SCREEN_WIDTH/2, SCREEN_HEIGHT - white_text->get_height() - 60),
CENTER_ALLIGN, LAYER_FOREGROUND1);
quit = false;
- song = sound_manager->load_music(datadir + "/music/" + music);
+ song = sound_manager->load_music("music/" + music);
sound_manager->play_music(song);
- if(!intro_displayed && intro_filename != "") {
- std::string filename = levels_path + intro_filename;
- display_text_file(filename);
+ if(!intro_displayed && intro_script != "") {
+ try {
+ std::auto_ptr<ScriptInterpreter> interpreter
+ (new ScriptInterpreter(levels_path));
+ std::istringstream in(intro_script);
+ interpreter->run_script(in, "worldmap-intro-script");
+ add_object(interpreter.release());
+ } catch(std::exception& e) {
+ std::cerr << "Couldn't execute worldmap-intro-script: "
+ << e.what() << "\n";
+ }
+
intro_displayed = true;
}
if(filename == "")
return;
- std::ofstream file(filename.c_str(), std::ios::out);
- lisp::Writer writer(file);
+ lisp::Writer writer(filename);
int nb_solved_levels = 0, total_levels = 0;
for(Levels::iterator i = levels.begin(); i != levels.end(); ++i) {