added .music script for fortress music
[supertux.git] / src / main.cpp
index 2b1c025..15c06a7 100644 (file)
@@ -243,6 +243,7 @@ static void print_usage(const char* argv0)
             "  -w, --window                 Run in window mode\n"
             "  -g, --geometry WIDTHxHEIGHT  Run SuperTux in given resolution\n"
             "  -a, --aspect WIDTH:HEIGHT    Run SuperTux with given aspect ratio\n"
+            "  -d, --default                Reset video settings to default values\n"
             "  --disable-sfx                Disable sound effects\n"
             "  --disable-music              Disable music\n"
             "  --help                       Show this help message\n"
@@ -286,6 +287,12 @@ static bool parse_commandline(int argc, char** argv)
       return true;
     } else if(arg == "--fullscreen" || arg == "-f") {
       config->use_fullscreen = true;
+    } else if(arg == "--default" || arg == "-d") {
+      config->use_fullscreen = false;
+      config->aspect_width  = 800;
+      config->aspect_height = 600;
+      config->screenwidth   = 800;
+      config->screenheight  = 600;
     } else if(arg == "--window" || arg == "-w") {
       config->use_fullscreen = false;
     } else if(arg == "--geometry" || arg == "-g") {
@@ -293,27 +300,38 @@ static bool parse_commandline(int argc, char** argv)
         print_usage(argv[0]);
         throw std::runtime_error("Need to specify a parameter for geometry switch");
       }
-      if(sscanf(argv[++i], "%dx%d", &config->screenwidth, &config->screenheight)
-         != 2) {
-        print_usage(argv[0]);
-        throw std::runtime_error("Invalid geometry spec, should be WIDTHxHEIGHT");
-      }
+      i += 1;
+      if (sscanf(argv[i], "%dx%d:%dx%d",
+                 &config->screenwidth,  &config->screenheight,
+                 &config->aspect_width, &config->aspect_height) != 4 &&
+          sscanf(argv[i], "%dx%d", &config->screenwidth, &config->screenheight) != 2)
+        {
+          print_usage(argv[0]);
+          throw std::runtime_error("Invalid geometry spec, should be WIDTHxHEIGHT");
+        }
     } else if(arg == "--aspect" || arg == "-a") {
       if(i+1 >= argc) {
         print_usage(argv[0]);
         throw std::runtime_error("Need to specify a parameter for aspect switch");
-      }
-      if(strcasecmp(argv[i+1], "auto") == 0) {
-        i++;
-        config->aspect_ratio = -1;
       } else {
-        int aspect_width, aspect_height;
+        int aspect_width  = 4;
+        int aspect_height = 3;
         if(sscanf(argv[++i], "%d:%d", &aspect_width, &aspect_height) != 2) {
           print_usage(argv[0]);
           throw std::runtime_error("Invalid aspect spec, should be WIDTH:HEIGHT");
+        } else {
+          float aspect_ratio = static_cast<double>(config->aspect_width) /
+            static_cast<double>(config->aspect_height);
+
+          // use aspect ratio to calculate logical resolution
+          if (aspect_ratio > 1) {
+            config->aspect_width  = static_cast<int> (600 * aspect_ratio + 0.5);
+            config->aspect_height = 600;
+          } else {
+            config->aspect_width  = 600;
+            config->aspect_height = static_cast<int> (600 * 1/aspect_ratio + 0.5);
+          }
         }
-        config->aspect_ratio = static_cast<double>(aspect_width) /
-                               static_cast<double>(aspect_height);
       }
     } else if(arg == "--show-fps") {
       config->show_fps = true;
@@ -394,33 +412,9 @@ void init_video()
     desktop_height = info->current_h;
   }
 #endif
-
-  double aspect_ratio = config->aspect_ratio;
-
-  // try to guess aspect ratio of monitor if needed
-  if (aspect_ratio <= 0) {
-// TODO: commented out because 
-// 1) it tends to guess wrong if widescreen-monitors don't stretch 800x600 to fit, but just display black borders
-// 2) aspect ratios other than 4:3 are largely untested
-/*
-    if(config->use_fullscreen && desktop_width > 0) {
-      aspect_ratio = static_cast<double>(desktop_width) / static_cast<double>(desktop_height);
-    } else {
-*/
-      aspect_ratio = 4.0 / 3.0;
-/*
-    }
-*/
-  }
-
-  // use aspect ratio to calculate logical resolution
-  if (aspect_ratio > 1) {
-    SCREEN_WIDTH  = static_cast<int> (600 * aspect_ratio + 0.5);
-    SCREEN_HEIGHT = 600;
-  } else {
-    SCREEN_WIDTH  = 600;
-    SCREEN_HEIGHT = static_cast<int> (600 * 1/aspect_ratio + 0.5);
-  }
+  
+  SCREEN_WIDTH  = config->aspect_width;
+  SCREEN_HEIGHT = config->aspect_height;
 
   context_pointer->init_renderer();
   screen = SDL_GetVideoSurface();
@@ -428,21 +422,27 @@ void init_video()
   SDL_WM_SetCaption(PACKAGE_NAME " " PACKAGE_VERSION, 0);
 
   // set icon
-  SDL_Surface* icon = IMG_Load_RW(
-      get_physfs_SDLRWops("images/engine/icons/supertux.xpm"), true);
+  #ifdef MACOSX
+  const char* icon_fname = "images/engine/icons/supertux-256x256.png";
+  #else
+  const char* icon_fname = "images/engine/icons/supertux.xpm";
+  #endif
+  SDL_Surface* icon = IMG_Load_RW(get_physfs_SDLRWops(icon_fname), true);
   if(icon != 0) {
     SDL_WM_SetIcon(icon, 0);
     SDL_FreeSurface(icon);
   }
 #ifdef DEBUG
   else {
-    log_warning << "Couldn't find icon 'images/engine/icons/supertux.xpm'" << std::endl;
+    log_warning << "Couldn't find icon '" << icon_fname << "'" << std::endl;
   }
 #endif
 
   SDL_ShowCursor(0);
 
-  log_info << (config->use_fullscreen?"fullscreen ":"window ") << SCREEN_WIDTH << "x" << SCREEN_HEIGHT << " Ratio: " << aspect_ratio << "\n";
+  log_info << (config->use_fullscreen?"fullscreen ":"window ")
+           << " Window: " << config->screenwidth << "x" << config->screenheight
+           << " Area: "   << config->aspect_width << "x" << config->aspect_height << std::endl;
 }
 
 static void init_audio()