-
- init_sdl();
- ConsoleBuffer console_buffer;
-
- timelog("controller");
- InputManager input_manager;
-
- timelog("commandline");
-
- timelog("video");
- std::unique_ptr<VideoSystem> video_system = VideoSystem::create(g_config->video);
- DrawingContext context(video_system->get_renderer(),
- video_system->get_lightmap());
- init_video();
-
- timelog("audio");
- SoundManager sound_manager;
- sound_manager.enable_sound(g_config->sound_enabled);
- sound_manager.enable_music(g_config->music_enabled);
-
- Console console(console_buffer);
-
- timelog("scripting");
- scripting::init_squirrel(g_config->enable_script_debugger);
-
- timelog("resources");
- TileManager tile_manager;
- SpriteManager sprite_manager;
- Resources resources;
-
- timelog("addons");
- AddonManager::get_instance().load_addons();
-
- timelog(0);
-
- const std::unique_ptr<Savegame> default_savegame(new Savegame(std::string()));
-
- GameManager game_manager;
- ScreenManager screen_manager;
-
- init_rand();
-
- if(g_config->start_level != "") {
- // we have a normal path specified at commandline, not a physfs path.
- // So we simply mount that path here...
- std::string dir = FileSystem::dirname(g_config->start_level);
- std::string fileProtocol = "file://";
- std::string::size_type position = dir.find(fileProtocol);
- if(position != std::string::npos) {
- dir = dir.replace(position, fileProtocol.length(), "");
- }
- log_debug << "Adding dir: " << dir << std::endl;
- PHYSFS_addToSearchPath(dir.c_str(), true);
-
- if(g_config->start_level.size() > 4 &&
- g_config->start_level.compare(g_config->start_level.size() - 5, 5, ".stwm") == 0) {
- ScreenManager::current()->push_screen(std::unique_ptr<Screen>(
- new worldmap::WorldMap(
- FileSystem::basename(g_config->start_level), *default_savegame)));
- } else {
- std::unique_ptr<GameSession> session (
- new GameSession(FileSystem::basename(g_config->start_level), *default_savegame));
-
- g_config->random_seed =session->get_demo_random_seed(g_config->start_demo);
- init_rand();//initialise generator with seed from session
-
- if(g_config->start_demo != "")
- session->play_demo(g_config->start_demo);
-
- if(g_config->record_demo != "")
- session->record_demo(g_config->record_demo);
- ScreenManager::current()->push_screen(std::move(session));
- }
- } else {
- ScreenManager::current()->push_screen(std::unique_ptr<Screen>(new TitleScreen(*default_savegame)));
- }
-
- ScreenManager::current()->run(context);
- } catch(std::exception& e) {