X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Ftitle.cpp;h=9e4504912e9db60ab5d18cf80a7223a9ff4c0f6f;hb=35fa5542fadf1848919363620c7a76b04150c283;hp=a821de88c697ceb84559f6f9184b243bf72fa0e2;hpb=4c36ffcb267a8b30031c12e777b792ad6952c0b8;p=supertux.git diff --git a/src/title.cpp b/src/title.cpp index a821de88c..9e4504912 100644 --- a/src/title.cpp +++ b/src/title.cpp @@ -80,6 +80,20 @@ static std::set worldmap_list; static FrameRate frame_rate(100); +/* If the demo was stopped - because game started, level + editor was excuted, etc - call this when you get back + to the title code. + */ +void resume_demo() +{ + // FIXME: shouldn't be needed if GameSession + // didn't relay on global variables + titlesession->get_current_sector()->activate(); + titlesession->set_current(); + + frame_rate.update(); +} + void update_load_save_game_menu(Menu* pmenu) { for(int i = 2; i < 7; ++i) @@ -181,6 +195,7 @@ void check_levels_contrib_menu() worldmap.display(); // run the map Menu::set_current(main_menu); + resume_demo(); } else if (index < (int)contrib_subsets.size() + first_level_index) { @@ -203,7 +218,20 @@ void check_levels_contrib_menu() /** get level's title */ std::string level_title = ""; - LispReader* reader = LispReader::load(subset.get_level_filename(i), "supertux-level"); + std::string filename = subset.get_level_filename(i); + std::string filepath; + filepath = st_dir + "/levels/" + filename; + if (access(filepath.c_str(), R_OK) != 0) + { + filepath = datadir + "/levels/" + filename; + if (access(filepath.c_str(), R_OK) != 0) + { + std::cerr << "Error: Level: couldn't find level: " << filename << std::endl; + continue; + } + } + + LispReader* reader = LispReader::load(filepath, "supertux-level"); if(!reader) { std::cerr << "Error: Could not open level file. Ignoring...\n"; @@ -239,26 +267,11 @@ void check_contrib_subset_menu() session.run(); player_status.reset(); Menu::set_current(main_menu); - titlesession->get_current_sector()->activate(); - titlesession->set_current(); + resume_demo(); } } } -/* If the demo was stopped - because game started, level - editor was excuted, etc - call this when you get back - to the title code. - */ -void resume_demo() -{ - // FIXME: shouldn't be needed if GameSession - // didn't relay on global variables - titlesession->get_current_sector()->activate(); - titlesession->set_current(); - - frame_rate.update(); -} - void draw_demo(double frame_ratio) { Sector* world = titlesession->get_current_sector(); @@ -314,7 +327,7 @@ void title(void) random_timer.init(true); Ticks::pause_init(); - titlesession = new GameSession(datadir + "/levels/misc/menu.stl", ST_GL_DEMO_GAME); + titlesession = new GameSession("misc/menu.stl", ST_GL_DEMO_GAME); /* Load images: */ bkg_title = new Surface(datadir + "/images/background/arctis.jpg", false); @@ -404,7 +417,9 @@ void title(void) resume_demo(); break; case MNID_CREDITS: + fadeout(500); display_text_file("CREDITS", SCROLL_SPEED_CREDITS, white_big_text , white_text, white_small_text, blue_text ); + fadeout(500); Menu::set_current(main_menu); break; case MNID_QUITMAINMENU: