Fixed trailing whitespaces in all(?) source files of supertux, also fixed some svn...
[supertux.git] / src / main.cpp
index 5936bad..7308098 100644 (file)
@@ -29,7 +29,6 @@
 #include <stdlib.h>
 #include <sys/stat.h>
 #include <sys/types.h>
-#include <dirent.h>
 #include <unistd.h>
 #include <assert.h>
 #include <physfs.h>
@@ -61,6 +60,9 @@ SDL_Surface* screen = 0;
 JoystickKeyboardController* main_controller = 0;
 TinyGetText::DictionaryManager dictionary_manager;
 
+int SCREEN_WIDTH;
+int SCREEN_HEIGHT;
+
 static void init_config()
 {
   config = new Config();
@@ -166,24 +168,28 @@ static void init_physfs(const char* argv0)
   if(f) {
     fclose(f);
     if(!PHYSFS_addToSearchPath(dir.c_str(), 1)) {
-      msg_warning << "Couldn't add '" << dir << "' to physfs searchpath: " << PHYSFS_getLastError() << std::endl;
+      log_warning << "Couldn't add '" << dir << "' to physfs searchpath: " << PHYSFS_getLastError() << std::endl;
     } else {
       sourcedir = true;
     }
   }
 #endif
 
+#ifdef _WIN32
+  PHYSFS_addToSearchPath(".\\data", 1);
+#endif
+
   if(!sourcedir) {
 #if defined(APPDATADIR) || defined(ENABLE_BINRELOC)
     std::string datadir;
 #ifdef ENABLE_BINRELOC
 
     char* dir;
-    br_init (NULL); 
-    dir = br_find_data_dir(APPDATADIR); 
+    br_init (NULL);
+    dir = br_find_data_dir(APPDATADIR);
     datadir = dir;
     datadir += "/" PACKAGE_NAME;
-    free(dir); 
+    free(dir);
 
 #else
     datadir = APPDATADIR;
@@ -210,12 +216,15 @@ static void print_usage(const char* argv0)
             "  -f, --fullscreen             Run in fullscreen mode\n"
             "  -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"
             "  --disable-sfx                Disable sound effects\n"
             "  --disable-music              Disable music\n"
             "  --help                       Show this help message\n"
             "  --version                    Display SuperTux version and quit\n"
             "  --console                    Enable ingame scripting console\n"
+            "  --noconsole                  Disable ingame scripting console\n"
             "  --show-fps                   Display framerate in levels\n"
+            "  --no-show-fps                Do not display framerate in levels\n"
             "  --record-demo FILE LEVEL     Record a demo to FILE\n"
             "  --play-demo FILE LEVEL       Play a recorded demo\n"
             "\n"));
@@ -263,10 +272,24 @@ static bool parse_commandline(int argc, char** argv)
         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(sscanf(argv[++i], "%d:%d", &config->aspectwidth, &config->aspectheight)
+         != 2) {
+        print_usage(argv[0]);
+        throw std::runtime_error("Invalid aspect spec, should be WIDTH:HEIGHT");
+      }
     } else if(arg == "--show-fps") {
       config->show_fps = true;
+    } else if(arg == "--no-show-fps") {
+      config->show_fps = false;
     } else if(arg == "--console") {
       config->console_enabled = true;
+    } else if(arg == "--noconsole") {
+      config->console_enabled = false;
     } else if(arg == "--disable-sfx") {
       config->sound_enabled = false;
     } else if(arg == "--disable-music") {
@@ -289,6 +312,7 @@ static bool parse_commandline(int argc, char** argv)
       config->start_level = arg;
     } else {
       log_warning << "Unknown option '" << arg << "'. Use --help to see a list of options" << std::endl;
+      return true;
     }
   }
 
@@ -364,6 +388,16 @@ void init_video()
   }
 #endif
 
+  // use aspect ratio to calculate logical resolution
+  if (config->aspectwidth > config->aspectheight) {
+       SCREEN_HEIGHT=600;
+       SCREEN_WIDTH=600*config->aspectwidth/config->aspectheight;
+  }
+  else {
+       SCREEN_WIDTH=600;
+       SCREEN_HEIGHT=600*config->aspectheight/config->aspectwidth;
+  }
+
   // setup opengl state and transform
   glDisable(GL_DEPTH_TEST);
   glDisable(GL_CULL_FACE);
@@ -375,7 +409,7 @@ void init_video()
   glMatrixMode(GL_PROJECTION);
   glLoadIdentity();
   // logical resolution here not real monitor resolution
-  glOrtho(0, 800, 600, 0, -1.0, 1.0);
+  glOrtho(0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, -1.0, 1.0);
   glMatrixMode(GL_MODELVIEW);
   glLoadIdentity();
   glTranslatef(0, 0, 0);