rnd-20131113-1-src
authorHolger Schemel <info@artsoft.org>
Wed, 13 Nov 2013 00:29:26 +0000 (01:29 +0100)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 09:00:05 +0000 (11:00 +0200)
* fixed problem with R'n'D restarting with same level set that may have
  caused a problem (and therefore failing again and again); after an
  error, the last level set is now deactivated in file "levelsetup.conf"
  to restart with default level set (which should work without error)
* fixed determining main game data directory on Mac OS X "Mavericks"
* version number set to 3.3.1.2

13 files changed:
ChangeLog
Makefile
src/Makefile
src/config.c
src/conftime.h
src/init.c
src/libgame/macosx.h
src/libgame/misc.c
src/libgame/setup.c
src/libgame/setup.h
src/libgame/system.c
src/libgame/system.h
src/main.h

index 7c0df045a9aab7d623ae4bed7943153989c02937..7a07f579f4d99e3bebb43bb100093e63b553edc4 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2013-11-13
+       * fixed problem with R'n'D restarting with same level set that may have
+         caused a problem (and therefore failing again and again); after an
+         error, the last level set is now deactivated in file "levelsetup.conf"
+         to restart with default level set (which should work without error)
+
+2013-11-07
+       * fixed determining main game data directory on Mac OS X "Mavericks"
+
+2013-11-04
+       * version number set to 3.3.1.2
+
 2013-11-04
        * version 3.3.1.1 released
 
index b2d8476cd80dbc66d9193cbdc80a685c80bfce99..8a51c93a811025640d07da5f7ae7622a3483046f 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -143,7 +143,7 @@ backup:
 backup-net-copy:
        ./Scripts/make_backup.sh src scp
 
-backup-net: backup backup-net-copy
+backup-all: backup backup-net-copy
 
 backup_lev:
        ./Scripts/make_backup.sh lev
index 853c415baba744c7f14e357977e28b1d5f9c452e..854d6e2f7c4a63b3c5a04fb912e0a675c866113b 100644 (file)
@@ -146,7 +146,7 @@ CONFIG_GAME_DIR = $(CONFIG_RO_GAME_DIR) $(CONFIG_RW_GAME_DIR)
 CONFIG_GAME = $(CONFIG_GAME_DIR) $(CONFIG_SCORE_ENTRIES) $(CONFIG_SPECIAL)
 
 CONFIG = $(CONFIG_GAME) $(JOYSTICK)
-DEBUG = -DDEBUG -g
+DEBUG = -DDEBUG -g
 # PROFILING = $(PROFILING_FLAGS)
 
 # OPTIONS = $(DEBUG) -Wall                     # only for debugging purposes
index c812adfdbfd148588e2f4af3727e4b99d9e3cb6c..bb1c6ee4a7d1154a0e2fce8295394088e934332c 100644 (file)
@@ -71,15 +71,27 @@ char *getProgramInitString()
 {
   static char *program_init_string = NULL;
 
+#if 1
+  // do not display compile target anymore, as it is almost always "SDL" now
   if (program_init_string == NULL)
   {
     program_init_string = checked_malloc(strlen(PROGRAM_TITLE_STRING) + 1 +
-                                        strlen(getProgramVersionString()) +1 +
+                                        strlen(getProgramVersionString()) + 1);
+
+    sprintf(program_init_string, "%s %s",
+           PROGRAM_TITLE_STRING, getProgramVersionString());
+  }
+#else
+  if (program_init_string == NULL)
+  {
+    program_init_string = checked_malloc(strlen(PROGRAM_TITLE_STRING) + 1 +
+                                        strlen(getProgramVersionString()) + 1 +
                                         strlen(TARGET_STRING) + 1);
 
     sprintf(program_init_string, "%s %s %s",
            PROGRAM_TITLE_STRING, getProgramVersionString(), TARGET_STRING);
   }
+#endif
 
   return program_init_string;
 }
index f0fbdec7b7202491d24a6a0c2a7f33d4e87e3665..92f1b94c9168109294579888329709c8d3917e49 100644 (file)
@@ -1 +1 @@
-#define COMPILE_DATE_STRING "2013-11-04 00:44"
+#define COMPILE_DATE_STRING "2013-11-13 01:14"
index f176e13e37537924810553446e64f5d0609bf9ac..4735f046993612345e497337e7cf6e87e00ab436 100644 (file)
@@ -6440,7 +6440,13 @@ void CloseAllAndExit(int exit_value)
   ClosePlatformDependentStuff();
 
   if (exit_value != 0)
+  {
+    /* fall back to default level set (current set may have caused an error) */
+    SaveLevelSetup_LastSeries_Deactivate();
+
+    /* tell user where to find error log file which may contain more details */
     NotifyUserAboutErrorFile();
+  }
 
   exit(exit_value);
 }
index c4818e76a4d3448c15e785b2a76ca5f56988f454..ddd9d4b14d8d14dda0bf8a00672f765e15cd198c 100644 (file)
 #define MACOSX_H
 
 
+/* define some Mac OS X specific paths */
+
+#define MAC_APP_BINARY_SUBDIR  "Contents/MacOS"
+
+
 /* some symbols are already defined on Mac OS X */
 #define Delay Delay_internal
 #define DrawLine DrawLine_internal
index 60dbcf068c20e9d84a29a6d4de15356d1ce15892..7e273adadc5269a8ef394975dc5bafb39d4e375a 100644 (file)
@@ -564,6 +564,36 @@ char *getBasePath(char *filename)
   return basepath;
 }
 
+static char *getProgramMainDataPath()
+{
+  char *main_data_path = getStringCopy(program.command_basepath);
+
+#if defined(PLATFORM_MACOSX)
+  static char *main_data_binary_subdir = NULL;
+
+  if (main_data_binary_subdir == NULL)
+  {
+    main_data_binary_subdir = checked_malloc(strlen(program.program_title) + 1 +
+                                            strlen("app") + 1 +
+                                            strlen(MAC_APP_BINARY_SUBDIR) + 1);
+
+    sprintf(main_data_binary_subdir, "%s.app/%s",
+           program.program_title, MAC_APP_BINARY_SUBDIR);
+  }
+
+  // cut relative path to Mac OS X application binary directory from path
+  if (strSuffix(main_data_path, main_data_binary_subdir))
+    main_data_path[strlen(main_data_path) -
+                  strlen(main_data_binary_subdir)] = '\0';
+
+  // cut trailing path separator from path (but not if path is root directory)
+  if (strSuffix(main_data_path, "/") && !strEqual(main_data_path, "/"))
+    main_data_path[strlen(main_data_path) - 1] = '\0';
+#endif
+
+  return main_data_path;
+}
+
 
 /* ------------------------------------------------------------------------- */
 /* various string functions                                                  */
@@ -721,6 +751,18 @@ void GetOptions(char *argv[], void (*print_usage_function)(void))
   char *rw_base_path = RW_BASE_PATH;
   char **options_left = &argv[1];
 
+#if 1
+  /* if the program is configured to start from current directory (default),
+     determine program package directory from program binary (some versions
+     of KDE/Konqueror and Mac OS X (especially "Maverick") apparently do not
+     set the current working directory to the program package directory) */
+
+  if (strEqual(ro_base_path, "."))
+    ro_base_path = getProgramMainDataPath();
+  if (strEqual(rw_base_path, "."))
+    rw_base_path = getProgramMainDataPath();
+#else
+
 #if !defined(PLATFORM_MACOSX)
   /* if the program is configured to start from current directory (default),
      determine program package directory (KDE/Konqueror does not do this by
@@ -732,6 +774,8 @@ void GetOptions(char *argv[], void (*print_usage_function)(void))
     ro_base_path = program.command_basepath;
   if (strEqual(rw_base_path, "."))
     rw_base_path = program.command_basepath;
+#endif
+
 #endif
 
   /* initialize global program options */
@@ -963,9 +1007,11 @@ void Error(int mode, char *format, ...)
   static boolean last_line_was_separator = FALSE;
   char *process_name = "";
 
+#if 1
   /* display warnings only when running in verbose mode */
   if (mode & ERR_WARN && !options.verbose)
     return;
+#endif
 
   if (mode == ERR_INFO_LINE)
   {
index 246e3891f486e44cdfb1abf58c60be87d7e3e593..ac5b78d0ce7c7d2044268c1a132c376d6a053ebf 100644 (file)
@@ -3951,7 +3951,7 @@ void LoadLevelSetup_LastSeries()
   free(filename);
 }
 
-void SaveLevelSetup_LastSeries()
+static void SaveLevelSetup_LastSeries_Ext(boolean deactivate_last_level_series)
 {
   /* ----------------------------------------------------------------------- */
   /* ~/.<program>/levelsetup.conf                                            */
@@ -3972,6 +3972,10 @@ void SaveLevelSetup_LastSeries()
 
   fprintf(file, "%s\n\n", getFormattedSetupEntry(TOKEN_STR_FILE_IDENTIFIER,
                                                 getCookie("LEVELSETUP")));
+
+  if (deactivate_last_level_series)
+    fprintf(file, "# %s\n# ", "the following level set may have caused a problem and was deactivated");
+
   fprintf(file, "%s\n", getFormattedSetupEntry(TOKEN_STR_LAST_LEVEL_SERIES,
                                               level_subdir));
 
@@ -3982,6 +3986,16 @@ void SaveLevelSetup_LastSeries()
   free(filename);
 }
 
+void SaveLevelSetup_LastSeries()
+{
+  SaveLevelSetup_LastSeries_Ext(FALSE);
+}
+
+void SaveLevelSetup_LastSeries_Deactivate()
+{
+  SaveLevelSetup_LastSeries_Ext(TRUE);
+}
+
 static void checkSeriesInfo()
 {
   static char *level_directory = NULL;
index c667c348b38304164c924697ce86bcb8ba60dab8..61316bbd587940d6864d217c9b44586f5659f797 100644 (file)
@@ -317,6 +317,7 @@ void LoadLevelArtworkInfo(void);
 
 void LoadLevelSetup_LastSeries(void);
 void SaveLevelSetup_LastSeries(void);
+void SaveLevelSetup_LastSeries_Deactivate();
 void LoadLevelSetup_SeriesInfo(void);
 void SaveLevelSetup_SeriesInfo(void);
 
index 51e8df8905b2a0f1e70e6a43e92bb0a12c5c9174..da3797358cb263e72ba21da1ac2205024c9d1988 100644 (file)
@@ -129,9 +129,13 @@ void InitPlatformDependentStuff(void)
   updateUserGameDataDir();
 #endif
 
+#if 1
+  openErrorFile();
+#else
 #if !defined(PLATFORM_UNIX) || defined(PLATFORM_MACOSX)
   openErrorFile();
 #endif
+#endif
 
 #if defined(TARGET_SDL)
   if (SDL_Init(SDL_INIT_EVENTTHREAD | SDL_INIT_NOPARACHUTE) < 0)
index 98225eae1d4c4bff71a029823facd8bdae9a98e4..b6c2ad3b465f74274944449c2886183a3b737731 100644 (file)
@@ -651,9 +651,11 @@ typedef int (*EventFilter)(const Event *);
 
 struct ProgramInfo
 {
-  char *command_basepath;      /* directory that contains the program */
+  char *command_basepath;      /* path to the program binary */
   char *command_basename;      /* base filename of the program binary */
 
+  char *maindata_path;         /* main game data (installation) directory */
+
   char *userdata_subdir;       /* personal user game data directory */
   char *userdata_subdir_unix;  /* personal user game data directory (Unix) */
   char *userdata_path;         /* resulting full path to game data directory */
index 738e39b9b51b60d43e12666bb36b5c9dfdedab43..a35337cf185d04b1d05ee347b26a99938e36c461 100644 (file)
 #define PROGRAM_VERSION_MAJOR          3
 #define PROGRAM_VERSION_MINOR          3
 #define PROGRAM_VERSION_PATCH          1
-#define PROGRAM_VERSION_BUILD          1
+#define PROGRAM_VERSION_BUILD          2
 
 #define PROGRAM_TITLE_STRING           "Rocks'n'Diamonds"
 #define PROGRAM_AUTHOR_STRING          "Holger Schemel"