- just doing some C++ifying
[supertux.git] / src / worldmap.cpp
index 3f529e0..93090a9 100644 (file)
@@ -31,7 +31,9 @@
 #include "setup.h"
 #include "sector.h"
 #include "worldmap.h"
+#include "sound_manager.h"
 #include "resources.h"
+#include "gettext.h"
 
 namespace WorldMapNS {
 
@@ -360,8 +362,6 @@ WorldMap::WorldMap()
 
   name = "<no file>";
   music = "SALCON.MOD";
-
-  load_map();
 }
 
 WorldMap::~WorldMap()
@@ -377,12 +377,12 @@ WorldMap::~WorldMap()
 void
 WorldMap::load_map()
 {
-  std::string filename = datadir +  "/levels/default/worldmap.stwm";
-  
-  lisp_object_t* root_obj = lisp_read_from_file(filename);
+  lisp_object_t* root_obj = lisp_read_from_file(datadir + "/levels/worldmap/" + map_filename);
   if (!root_obj)
-    st_abort("Couldn't load file", filename);
-  
+    st_abort("Couldn't load file", datadir + "/levels/worldmap/" + map_filename);
+
+  std::cout << "Loading map: " << datadir + "/levels/worldmap/" + map_filename << std::endl;
+
   if (strcmp(lisp_symbol(lisp_car(root_obj)), "supertux-worldmap") == 0)
     {
       lisp_object_t* cur = lisp_cdr(root_obj);
@@ -690,8 +690,8 @@ WorldMap::update(float delta)
                     if (!level->extro_filename.empty())
                       { 
                         MusicRef theme =
-                          music_manager->load_music(datadir + "/music/theme.mod");
-                        music_manager->play_music(theme);
+                          sound_manager->load_music(datadir + "/music/theme.mod");
+                        sound_manager->play_music(theme);
                         // Display final credits and go back to the main menu
                         display_text_file(level->extro_filename,
                                           "/images/background/extro.jpg", SCROLL_SPEED_MESSAGE);
@@ -719,14 +719,14 @@ WorldMap::update(float delta)
                   context.draw_gradient(Color (0, 255, 0), Color (255, 0, 255),
                       LAYER_BACKGROUND0);
 
-                  context.draw_text_center(blue_text, "GAMEOVER"
+                  context.draw_text_center(blue_text, _("GAMEOVER")
                       Vector(0, 200), LAYER_FOREGROUND1);
 
-                  sprintf(str, "SCORE: %d", player_status.score);
+                  sprintf(str, _("SCORE: %d"), player_status.score);
                   context.draw_text_center(gold_text, str,
                       Vector(0, 224), LAYER_FOREGROUND1);
 
-                  sprintf(str, "COINS: %d", player_status.distros);
+                  sprintf(str, _("COINS: %d"), player_status.distros);
                   context.draw_text_center(gold_text, str,
                       Vector(0, screen->w - 32), LAYER_FOREGROUND1);
 
@@ -745,7 +745,7 @@ WorldMap::update(float delta)
                   break;
                 }
 
-              music_manager->play_music(song);
+              sound_manager->play_music(song);
               Menu::set_current(0);
               if (!savegame_file.empty())
                 savegame(savegame_file);
@@ -843,28 +843,25 @@ void
 WorldMap::draw_status(DrawingContext& context)
 {
   char str[80];
-  sprintf(str, "%d", player_status.score);
+  sprintf(str, " %d", player_status.score);
 
-  context.draw_text(white_text, "SCORE", Vector(0, 0), LAYER_FOREGROUND1);
+  context.draw_text(white_text, _("SCORE"), Vector(0, 0), LAYER_FOREGROUND1);
   context.draw_text(gold_text, str, Vector(96, 0), LAYER_FOREGROUND1);
 
   sprintf(str, "%d", player_status.distros);
-  context.draw_text(white_text, "COINS", Vector(screen->w/2 - 16*5, 0),
+  context.draw_text(white_text, _("COINS"), Vector(screen->w/2 - 16*5, 0),
       LAYER_FOREGROUND1);
   context.draw_text(gold_text, str, Vector(screen->w/2 + (16*5)/2, 0),
         LAYER_FOREGROUND1);
 
-  context.draw_text(white_text, "LIVES",
-      Vector(screen->w - white_text->get_text_width("LIVES")*2, 0),
-      LAYER_FOREGROUND1);
   if (player_status.lives >= 5)
     {
       sprintf(str, "%dx", player_status.lives);
       context.draw_text(gold_text, str, 
           Vector(screen->w - gold_text->get_text_width(str) - tux_life->w, 0),
           LAYER_FOREGROUND1);
-      context.draw_surface(tux_life, Vector(screen->w - gold_text->w, 0),
-          LAYER_FOREGROUND1);
+      context.draw_surface(tux_life, Vector(screen->w -
+            gold_text->get_text_width("9"), 0), LAYER_FOREGROUND1);
     }
   else
     {
@@ -873,6 +870,9 @@ WorldMap::draw_status(DrawingContext& context)
             Vector(screen->w - tux_life->w*4 + (tux_life->w*i), 0),
             LAYER_FOREGROUND1);
     }
+  context.draw_text(white_text, _("LIVES"),
+      Vector(screen->w - white_text->get_text_width(_("LIVES")) - white_text->get_text_width("   99"), 0),
+      LAYER_FOREGROUND1);
 
   if (!tux->is_moving())
     {
@@ -886,7 +886,7 @@ WorldMap::draw_status(DrawingContext& context)
 
               context.draw_text(white_text, i->title, 
                   Vector(screen->w/2 - white_text->get_text_width(i->title)/2,
-                         screen->h - white_text->get_height() - 50),
+                         screen->h - white_text->get_height() - 30),
                   LAYER_FOREGROUND1);
               break;
             }
@@ -901,9 +901,9 @@ WorldMap::display()
 
   quit = false;
 
-  song = music_manager->load_music(datadir +  "/music/" + music);
-  music_manager->play_music(song);
-
+  song = sound_manager->load_music(datadir +  "/music/" + music);
+  sound_manager->play_music(song);
+  
   unsigned int last_update_time;
   unsigned int update_time;
 
@@ -966,7 +966,8 @@ WorldMap::savegame(const std::string& filename)
 
   out << "(supertux-savegame\n"
       << "  (version 1)\n"
-      << "  (title  \"Icyisland - " << nb_solved_levels << "/" << levels.size() << "\")\n"
+      << "  (title  \"" << name << " - " << nb_solved_levels << "/" << levels.size() << "\")\n"
+      << "  (map    \"" << map_filename << "\")\n"
       << "  (lives   " << player_status.lives << ")\n"
       << "  (score   " << player_status.score << ")\n"
       << "  (distros " << player_status.distros << ")\n"
@@ -993,25 +994,37 @@ WorldMap::loadgame(const std::string& filename)
 {
   std::cout << "loadgame: " << filename << std::endl;
   savegame_file = filename;
+  map_filename = "icyisland.stwm";
 
   if (access(filename.c_str(), F_OK) != 0)
+    {
+    load_map();
     return;
+    }
   
   lisp_object_t* savegame = lisp_read_from_file(filename);
   if (!savegame)
     {
       std::cout << "WorldMap:loadgame: File not found: " << filename << std::endl;
+      load_map();
       return;
     }
 
   lisp_object_t* cur = savegame;
 
   if (strcmp(lisp_symbol(lisp_car(cur)), "supertux-savegame") != 0)
+    {
+    load_map();
     return;
+    }
 
   cur = lisp_cdr(cur);
   LispReader reader(cur);
 
+  /* Get the Map filename and then load it before setting level settings */
+  reader.read_string("map", map_filename);
+  load_map(); 
+
   reader.read_int("lives", player_status.lives);
   reader.read_int("score", player_status.score);
   reader.read_int("distros", player_status.distros);