X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fmisc.c;h=e439e71d6cdbcecdaec8c2c9e245bc65b52ef3ff;hb=30d133ac6c0358f7c895df1af02ff4cca730707f;hp=811ef07e576484826ea0ebdc07889848cac8cbee;hpb=a84bd00a438ff458c2d74d1d1784deefe12bf84a;p=rocksndiamonds.git diff --git a/src/libgame/misc.c b/src/libgame/misc.c index 811ef07e..e439e71d 100644 --- a/src/libgame/misc.c +++ b/src/libgame/misc.c @@ -450,6 +450,7 @@ void GetOptions(char *argv[]) options.graphics_directory = RO_BASE_PATH "/" GRAPHICS_DIRECTORY; options.sounds_directory = RO_BASE_PATH "/" SOUNDS_DIRECTORY; options.music_directory = RO_BASE_PATH "/" MUSIC_DIRECTORY; + options.autoplay_leveldir = NULL; options.serveronly = FALSE; options.network = FALSE; options.verbose = FALSE; @@ -500,6 +501,7 @@ void GetOptions(char *argv[]) " -g, --graphics alternative graphics directory\n" " -s, --sounds alternative sounds directory\n" " -m, --music alternative music directory\n" + " -a, --autoplay automatically play level tapes\n" " -n, --network network multiplayer game\n" " --serveronly only start network server\n" " -v, --verbose verbose mode\n" @@ -571,6 +573,15 @@ void GetOptions(char *argv[]) if (option_arg == next_option) options_left++; } + else if (strncmp(option, "-autoplay", option_len) == 0) + { + if (option_arg == NULL) + Error(ERR_EXIT_HELP, "option '%s' requires an argument", option_str); + + options.autoplay_leveldir = option_arg; + if (option_arg == next_option) + options_left++; + } else if (strncmp(option, "-network", option_len) == 0) { options.network = TRUE; @@ -1439,7 +1450,7 @@ struct FileInfo *getFileListFromConfigList(struct ConfigInfo *config_list, } if (list_pos != num_file_list_entries - 1) - Error(ERR_EXIT, "inconsistant config list information -- please fix"); + Error(ERR_EXIT, "inconsistant config list information (%d != %d) -- please fix", list_pos, num_file_list_entries - 1); return file_list; } @@ -1536,9 +1547,29 @@ static void deleteArtworkListEntry(struct ArtworkListInfo *artwork_info, static void replaceArtworkListEntry(struct ArtworkListInfo *artwork_info, struct ListNodeInfo **listnode, - char *filename) + char *basename) { + char *init_text[] = + { "", + "Loading graphics:", + "Loading sounds:", + "Loading music:" + }; + ListNode *node; + char *filename = getCustomArtworkFilename(basename, artwork_info->type); + + if (filename == NULL) + { + int error_mode = ERR_WARN; + + /* we can get away without sounds and music, but not without graphics */ + if (*listnode == NULL && artwork_info->type == ARTWORK_TYPE_GRAPHICS) + error_mode = ERR_EXIT; + + Error(error_mode, "cannot find artwork file '%s'", basename); + return; + } /* check if the old and the new artwork file are the same */ if (*listnode && strcmp((*listnode)->source_filename, filename) == 0) @@ -1566,20 +1597,43 @@ static void replaceArtworkListEntry(struct ArtworkListInfo *artwork_info, *listnode = (struct ListNodeInfo *)node->content; (*listnode)->num_references++; + + return; } - else if ((*listnode = artwork_info->load_artwork(filename)) != NULL) + + DrawInitText(init_text[artwork_info->type], 120, FC_GREEN); + DrawInitText(basename, 150, FC_YELLOW); + + if ((*listnode = artwork_info->load_artwork(filename)) != NULL) { +#if 0 + printf("[adding new artwork '%s']\n", filename); +#endif + (*listnode)->num_references = 1; addNodeToList(&artwork_info->content_list, (*listnode)->source_filename, *listnode); } + else + { + int error_mode = ERR_WARN; + + /* we can get away without sounds and music, but not without graphics */ + if (artwork_info->type == ARTWORK_TYPE_GRAPHICS) + error_mode = ERR_EXIT; + + Error(error_mode, "cannot load artwork file '%s'", basename); + return; + } } static void LoadCustomArtwork(struct ArtworkListInfo *artwork_info, struct ListNodeInfo **listnode, char *basename) { +#if 0 char *filename = getCustomArtworkFilename(basename, artwork_info->type); +#endif #if 0 printf("GOT CUSTOM ARTWORK FILE '%s'\n", filename); @@ -1591,6 +1645,7 @@ static void LoadCustomArtwork(struct ArtworkListInfo *artwork_info, return; } +#if 0 if (filename == NULL) { Error(ERR_WARN, "cannot find artwork file '%s'", basename); @@ -1598,6 +1653,9 @@ static void LoadCustomArtwork(struct ArtworkListInfo *artwork_info, } replaceArtworkListEntry(artwork_info, listnode, filename); +#else + replaceArtworkListEntry(artwork_info, listnode, basename); +#endif } static void LoadArtworkToList(struct ArtworkListInfo *artwork_info, @@ -1623,6 +1681,7 @@ static void LoadArtworkToList(struct ArtworkListInfo *artwork_info, void ReloadCustomArtworkList(struct ArtworkListInfo *artwork_info) { +#if 0 static struct { char *text; @@ -1635,6 +1694,7 @@ void ReloadCustomArtworkList(struct ArtworkListInfo *artwork_info) { "Loading sounds:", TRUE }, { "Loading music:", TRUE } }; +#endif int num_file_list_entries = artwork_info->num_file_list_entries; struct FileInfo *file_list = artwork_info->file_list; @@ -1642,8 +1702,10 @@ void ReloadCustomArtworkList(struct ArtworkListInfo *artwork_info) LoadArtworkConfig(artwork_info); +#if 0 if (draw_init[artwork_info->type].do_it) DrawInitText(draw_init[artwork_info->type].text, 120, FC_GREEN); +#endif #if 0 printf("DEBUG: reloading %d artwork files ...\n", num_file_list_entries); @@ -1651,13 +1713,21 @@ void ReloadCustomArtworkList(struct ArtworkListInfo *artwork_info) for(i=0; itype].do_it) DrawInitText(file_list[i].token, 150, FC_YELLOW); +#endif LoadArtworkToList(artwork_info, file_list[i].filename, i); + +#if 0 + printf("DEBUG: loading artwork file '%s'...\n", file_list[i].filename); +#endif } +#if 0 draw_init[artwork_info->type].do_it = FALSE; +#endif /* printf("list size == %d\n", getNumNodes(artwork_info->content_list)); @@ -1672,7 +1742,7 @@ void FreeCustomArtworkList(struct ArtworkListInfo *artwork_info) { int i; - if (artwork_info->artwork_list == NULL) + if (artwork_info == NULL || artwork_info->artwork_list == NULL) return; #if 0