X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Ffiles.c;h=eb9d37e304878de634d0df8f435989f73d730d3d;hp=21bede9a7be2fbf873b82a6ee3b2ae10e64d0512;hb=41831f337ebfff25c7138785efe20af5c2b0a2a8;hpb=84e1915b7518d611e0379f926691a0b1f7a9e430 diff --git a/src/files.c b/src/files.c index 21bede9a..eb9d37e3 100644 --- a/src/files.c +++ b/src/files.c @@ -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)