X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Ffiles.c;h=bb1ce49770b1e3b4a85995485ecb586cd958b0b6;hp=bc9968163ccb929cffc2fd2d69b4a8bf75f546ed;hb=bb49e2b2a9bb4aefe76182be725e998bf9495976;hpb=8fd731f280a5237bfb8b6ec3e2be70e45df2ec53 diff --git a/src/files.c b/src/files.c index bc996816..bb1ce497 100644 --- a/src/files.c +++ b/src/files.c @@ -2287,6 +2287,17 @@ static void setLevelFileInfo(struct LevelFileInfo *level_file_info, int nr) determineLevelFileInfo_Filetype(level_file_info); } +static void copyLevelFileInfo(struct LevelFileInfo *lfi_from, + struct LevelFileInfo *lfi_to) +{ + lfi_to->nr = lfi_from->nr; + lfi_to->type = lfi_from->type; + lfi_to->packed = lfi_from->packed; + + setString(&lfi_to->basename, lfi_from->basename); + setString(&lfi_to->filename, lfi_from->filename); +} + /* ------------------------------------------------------------------------- */ /* functions for loading R'n'D level */ /* ------------------------------------------------------------------------- */ @@ -6582,6 +6593,16 @@ static void LoadLevel_InitNativeEngines(struct LevelInfo *level) CopyNativeLevel_RND_to_Native(level); } +static void LoadLevelTemplate_LoadAndInit() +{ + LoadLevelFromFileInfo(&level_template, &level_template.file_info, FALSE); + + LoadLevel_InitVersion(&level_template); + LoadLevel_InitElements(&level_template); + + ActivateLevelTemplate(); +} + void LoadLevelTemplate(int nr) { if (!fileExists(getGlobalLevelTemplateFilename())) @@ -6593,22 +6614,27 @@ void LoadLevelTemplate(int nr) setLevelFileInfo(&level_template.file_info, nr); - LoadLevelFromFileInfo(&level_template, &level_template.file_info, FALSE); + LoadLevelTemplate_LoadAndInit(); +} - LoadLevel_InitVersion(&level_template); - LoadLevel_InitElements(&level_template); +static void LoadLevelTemplateFromNetwork(struct LevelFileInfo *lfi_network_template) +{ + copyLevelFileInfo(lfi_network_template, &level_template.file_info); - ActivateLevelTemplate(); + LoadLevelTemplate_LoadAndInit(); } -void LoadLevel(int nr) +static void LoadLevel_LoadAndInit(struct LevelFileInfo *lfi_network_template) { - setLevelFileInfo(&level.file_info, nr); - LoadLevelFromFileInfo(&level, &level.file_info, FALSE); if (level.use_custom_template) - LoadLevelTemplate(-1); + { + if (lfi_network_template != NULL) + LoadLevelTemplateFromNetwork(lfi_network_template); + else + LoadLevelTemplate(-1); + } LoadLevel_InitVersion(&level); LoadLevel_InitElements(&level); @@ -6617,6 +6643,13 @@ void LoadLevel(int nr) LoadLevel_InitNativeEngines(&level); } +void LoadLevel(int nr) +{ + setLevelFileInfo(&level.file_info, nr); + + LoadLevel_LoadAndInit(NULL); +} + void LoadLevelInfoOnly(int nr) { setLevelFileInfo(&level.file_info, nr); @@ -6624,6 +6657,14 @@ void LoadLevelInfoOnly(int nr) LoadLevelFromFileInfo(&level, &level.file_info, TRUE); } +void LoadLevelFromNetwork(struct LevelFileInfo *lfi_network_level, + struct LevelFileInfo *lfi_network_template) +{ + copyLevelFileInfo(lfi_network_level, &level.file_info); + + LoadLevel_LoadAndInit(lfi_network_template); +} + static int SaveLevel_VERS(FILE *file, struct LevelInfo *level) { int chunk_size = 0;