X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fworldmap%2Fworldmap.cpp;h=94856d1a32ef6a32f6f5ed706a7155493b3020e9;hb=5667d7e94d85f968ab914bc457edd689fc907253;hp=c491470c22177e06025ae2098bdf7adaf7e8f183;hpb=5a7a49564f7655e329769a8a0e214160508ef03d;p=supertux.git diff --git a/src/worldmap/worldmap.cpp b/src/worldmap/worldmap.cpp index c491470c2..94856d1a3 100644 --- a/src/worldmap/worldmap.cpp +++ b/src/worldmap/worldmap.cpp @@ -54,6 +54,7 @@ #include "main.hpp" #include "spawn_point.hpp" #include "file_system.hpp" +#include "physfs/physfs_stream.hpp" #include "tile_manager.hpp" #include "tile_set.hpp" #include "gui/menu.hpp" @@ -302,7 +303,7 @@ WorldMap::load(const std::string& filename) const lisp::Lisp* sector = level->get_lisp("sector"); if(!sector) - throw std::runtime_error("No sector sepcified in worldmap file."); + throw std::runtime_error("No sector specified in worldmap file."); const lisp::Lisp* tilesets_lisp = level->get_lisp("tilesets"); if(tilesets_lisp != NULL) { @@ -354,7 +355,7 @@ WorldMap::load(const std::string& filename) add_object(teleporter); } else if(iter.item() == "ambient-light") { std::vector vColor; - sector->get_vector( "ambient-light", vColor ); + sector->get( "ambient-light", vColor ); if(vColor.size() < 3) { log_warning << "(ambient-light) requires a color as argument" << std::endl; } else { @@ -510,10 +511,10 @@ WorldMap::finished_level(Level* gamelevel) int dirdata = available_directions_at(tux->get_tile_pos()); // first, test for crossroads if (dirdata == Tile::WORLDMAP_CNSE || - dirdata == Tile::WORLDMAP_CNSW || - dirdata == Tile::WORLDMAP_CNEW || - dirdata == Tile::WORLDMAP_CSEW || - dirdata == Tile::WORLDMAP_CNSEW) + dirdata == Tile::WORLDMAP_CNSW || + dirdata == Tile::WORLDMAP_CNEW || + dirdata == Tile::WORLDMAP_CSEW || + dirdata == Tile::WORLDMAP_CNSEW) dir = D_NONE; else if (dirdata & Tile::WORLDMAP_NORTH && tux->back_direction != D_NORTH) @@ -576,8 +577,6 @@ WorldMap::update(float delta) if(!in_level) { Menu* menu = Menu::current(); if(menu != NULL) { - menu->update(); - if(menu == worldmap_menu.get()) { switch (worldmap_menu->check()) { @@ -661,8 +660,8 @@ WorldMap::update(float delta) || main_controller->pressed(Controller::MENU_SELECT)) { /* some people define UP and JUMP on the same key... */ if(!main_controller->pressed(Controller::UP)) - enter_level = true; - } + enter_level = true; + } if(main_controller->pressed(Controller::PAUSE_MENU)) on_escape_press(); @@ -856,10 +855,10 @@ WorldMap::draw_status(DrawingContext& context) if(level->title == "") get_level_title(*level); - context.draw_text(white_text, level->title, + context.draw_text(normal_font, level->title, Vector(SCREEN_WIDTH/2, - SCREEN_HEIGHT - white_text->get_height() - 30), - ALIGN_CENTER, LAYER_FOREGROUND1); + SCREEN_HEIGHT - normal_font->get_height() - 30), + ALIGN_CENTER, LAYER_FOREGROUND1, WorldMap::level_title_color); // if level is solved, draw level picture behind stats /* @@ -886,10 +885,10 @@ WorldMap::draw_status(DrawingContext& context) if (special_tile->pos == tux->get_tile_pos()) { /* Display an in-map message in the map, if any as been selected */ if(!special_tile->map_message.empty() && !special_tile->passive_message) - context.draw_text(gold_text, special_tile->map_message, + context.draw_text(normal_font, special_tile->map_message, Vector(SCREEN_WIDTH/2, - SCREEN_HEIGHT - white_text->get_height() - 60), - ALIGN_CENTER, LAYER_FOREGROUND1); + SCREEN_HEIGHT - normal_font->get_height() - 60), + ALIGN_CENTER, LAYER_FOREGROUND1, WorldMap::message_color); break; } } @@ -897,17 +896,17 @@ WorldMap::draw_status(DrawingContext& context) // display teleporter messages Teleporter* teleporter = at_teleporter(tux->get_tile_pos()); if (teleporter && (teleporter->message != "")) { - Vector pos = Vector(SCREEN_WIDTH/2, SCREEN_HEIGHT - white_text->get_height() - 30); - context.draw_text(white_text, teleporter->message, pos, ALIGN_CENTER, LAYER_FOREGROUND1); + Vector pos = Vector(SCREEN_WIDTH/2, SCREEN_HEIGHT - normal_font->get_height() - 30); + context.draw_text(normal_font, teleporter->message, pos, ALIGN_CENTER, LAYER_FOREGROUND1, WorldMap::teleporter_message_color); } } /* Display a passive message in the map, if needed */ if(passive_message_timer.started()) - context.draw_text(gold_text, passive_message, - Vector(SCREEN_WIDTH/2, SCREEN_HEIGHT - white_text->get_height() - 60), - ALIGN_CENTER, LAYER_FOREGROUND1); + context.draw_text(normal_font, passive_message, + Vector(SCREEN_WIDTH/2, SCREEN_HEIGHT - normal_font->get_height() - 60), + ALIGN_CENTER, LAYER_FOREGROUND1, WorldMap::message_color); context.pop_transform(); } @@ -939,6 +938,15 @@ WorldMap::setup() throw SquirrelError(global_vm, "Couldn't set worldmap in roottable"); sq_pop(global_vm, 1); + //Run default.nut just before init script + try { + IFileStream in(levels_path + "/default.nut"); + run_script(in, "WorldMap::default.nut"); + } catch(std::exception& ) { + // doesn't exist or erroneous; do nothing + } + + if(init_script != "") { std::istringstream in(init_script); run_script(in, "WorldMap::init"); @@ -1014,13 +1022,13 @@ WorldMap::save_state() for(LevelTiles::iterator i = levels.begin(); i != levels.end(); ++i) { LevelTile* level = *i; - sq_pushstring(vm, level->get_name().c_str(), -1); - sq_newtable(vm); + sq_pushstring(vm, level->get_name().c_str(), -1); + sq_newtable(vm); - store_bool(vm, "solved", level->solved); - level->statistics.serialize_to_squirrel(vm); + store_bool(vm, "solved", level->solved); + level->statistics.serialize_to_squirrel(vm); - sq_createslot(vm, -3); + sq_createslot(vm, -3); } sq_createslot(vm, -3);