added checkbox to player settings in editor if first player solves level
[rocksndiamonds.git] / src / files.c
index 21bede9a7be2fbf873b82a6ee3b2ae10e64d0512..eb9d37e304878de634d0df8f435989f73d730d3d 100644 (file)
@@ -251,6 +251,12 @@ static struct LevelFileConfigInfo chunk_config_INFO[] =
     &li.auto_count_gems,               FALSE
   },
 
+  {
+    -1,                                        -1,
+    TYPE_BOOLEAN,                      CONF_VALUE_8_BIT(11),
+    &li.solved_by_one_player,          FALSE
+  },
+
   {
     -1,                                        -1,
     -1,                                        -1,
@@ -6395,6 +6401,10 @@ static void LoadLevel_InitVersion(struct LevelInfo *level)
   /* EM style elements always chain-exploded in R'n'D engine before 3.2.6 */
   if (level->game_version < VERSION_IDENT(3,2,6,0))
     level->em_explodes_by_fire = TRUE;
+
+  /* levels were solved by the first player entering an exit up to 4.1.0.0 */
+  if (level->game_version <= VERSION_IDENT(4,1,0,0))
+    level->solved_by_one_player = TRUE;
 }
 
 static void LoadLevel_InitStandardElements(struct LevelInfo *level)
@@ -6620,21 +6630,21 @@ void LoadLevelTemplate(int nr)
   LoadLevelTemplate_LoadAndInit();
 }
 
-static void LoadLevelTemplateFromNetwork(struct LevelFileInfo *lfi_network_template)
+static void LoadNetworkLevelTemplate(struct NetworkLevelInfo *network_level)
 {
-  copyLevelFileInfo(lfi_network_template, &level_template.file_info);
+  copyLevelFileInfo(&network_level->tmpl_info, &level_template.file_info);
 
   LoadLevelTemplate_LoadAndInit();
 }
 
-static void LoadLevel_LoadAndInit(struct LevelFileInfo *lfi_network_template)
+static void LoadLevel_LoadAndInit(struct NetworkLevelInfo *network_level)
 {
   LoadLevelFromFileInfo(&level, &level.file_info, FALSE);
 
   if (level.use_custom_template)
   {
-    if (lfi_network_template != NULL)
-      LoadLevelTemplateFromNetwork(lfi_network_template);
+    if (network_level != NULL)
+      LoadNetworkLevelTemplate(network_level);
     else
       LoadLevelTemplate(-1);
   }
@@ -6648,6 +6658,8 @@ static void LoadLevel_LoadAndInit(struct LevelFileInfo *lfi_network_template)
 
 void LoadLevel(int nr)
 {
+  SetLevelSetInfo(leveldir_current->identifier, nr);
+
   setLevelFileInfo(&level.file_info, nr);
 
   LoadLevel_LoadAndInit(NULL);
@@ -6660,12 +6672,14 @@ void LoadLevelInfoOnly(int nr)
   LoadLevelFromFileInfo(&level, &level.file_info, TRUE);
 }
 
-void LoadLevelFromNetwork(struct LevelFileInfo *lfi_network_level,
-                         struct LevelFileInfo *lfi_network_template)
+void LoadNetworkLevel(struct NetworkLevelInfo *network_level)
 {
-  copyLevelFileInfo(lfi_network_level, &level.file_info);
+  SetLevelSetInfo(network_level->leveldir_identifier,
+                 network_level->file_info.nr);
+
+  copyLevelFileInfo(&network_level->file_info, &level.file_info);
 
-  LoadLevel_LoadAndInit(lfi_network_template);
+  LoadLevel_LoadAndInit(network_level);
 }
 
 static int SaveLevel_VERS(FILE *file, struct LevelInfo *level)