X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Finit.c;h=718f43948c5d4e2656bb4e0463a0026e9078ccc3;hb=c93f939100438a9047653b2c2c6b86f034e1bb01;hp=6e970c2f217963eb67cb7319c7e1feeea3cbd785;hpb=6890bb7cb72e140f4b82f35217655ae6c5213fec;p=rocksndiamonds.git diff --git a/src/init.c b/src/init.c index 6e970c2f..718f4394 100644 --- a/src/init.c +++ b/src/init.c @@ -2529,9 +2529,11 @@ void InitElementPropertiesStatic() EL_PENGUIN, EL_PIG, EL_DRAGON, -#if 0 /* USE_GRAVITY_BUGFIX */ + +#if 0 /* USE_GRAVITY_BUGFIX_OLD */ EL_PLAYER_IS_LEAVING, /* needed for gravity + "block last field" */ #endif + -1 }; @@ -4196,17 +4198,57 @@ void Execute_Command(char *command) } else if (strncmp(command, "autoplay ", 9) == 0) { - char *str_copy = getStringCopy(&command[9]); - char *str_ptr = strchr(str_copy, ' '); + char *str_ptr = getStringCopy(&command[9]); /* read command parameters */ + + while (*str_ptr != '\0') /* continue parsing string */ + { + /* cut leading whitespace from string, replace it by string terminator */ + while (*str_ptr == ' ' || *str_ptr == '\t') + *str_ptr++ = '\0'; + + if (*str_ptr == '\0') /* end of string reached */ + break; - global.autoplay_leveldir = str_copy; - global.autoplay_level_nr = -1; + if (global.autoplay_leveldir == NULL) /* read level set string */ + { + global.autoplay_leveldir = str_ptr; + global.autoplay_all = TRUE; /* default: play all tapes */ + + for (i = 0; i < MAX_TAPES_PER_SET; i++) + global.autoplay_level[i] = FALSE; + } + else /* read level number string */ + { + int level_nr = atoi(str_ptr); /* get level_nr value */ + + if (level_nr >= 0 && level_nr < MAX_TAPES_PER_SET) + global.autoplay_level[level_nr] = TRUE; + + global.autoplay_all = FALSE; + } - if (str_ptr != NULL) + /* advance string pointer to the next whitespace (or end of string) */ + while (*str_ptr != ' ' && *str_ptr != '\t' && *str_ptr != '\0') + str_ptr++; + } + +#if 0 + printf("level set == '%s'\n", global.autoplay_leveldir); + + if (global.autoplay_all) + printf("play all levels\n"); + else { - *str_ptr++ = '\0'; /* terminate leveldir string */ - global.autoplay_level_nr = atoi(str_ptr); /* get level_nr value */ + printf("play the following levels:"); + + for (i = 0; i < MAX_TAPES_PER_SET; i++) + if (global.autoplay_level[i]) + printf(" %03d", i); + + printf("\n"); } +#endif + } else if (strncmp(command, "convert ", 8) == 0) { @@ -4216,7 +4258,7 @@ void Execute_Command(char *command) global.convert_leveldir = str_copy; global.convert_level_nr = -1; - if (str_ptr != NULL) + if (str_ptr != NULL) /* level number follows */ { *str_ptr++ = '\0'; /* terminate leveldir string */ global.convert_level_nr = atoi(str_ptr); /* get level_nr value */ @@ -4373,7 +4415,7 @@ static void InitArtworkConfig() for (i = 0; i < NUM_MUSIC_PREFIXES; i++) music_id_prefix[i] = music_prefix_info[i].prefix; - music_id_prefix[MAX_LEVELS] = NULL; + music_id_prefix[NUM_MUSIC_PREFIXES] = NULL; for (i = 0; i < NUM_ACTIONS; i++) action_id_suffix[i] = element_action_info[i].suffix; @@ -4668,7 +4710,12 @@ static char *getNewArtworkIdentifier(int type) artwork_current_identifier) != 0) artwork_new_identifier = artwork_current_identifier; +#if 1 + *(ARTWORK_CURRENT_IDENTIFIER_PTR(artwork, type))= artwork_current_identifier; +#else + /* newer versions of gcc do not like this anymore :-/ */ *(&(ARTWORK_CURRENT_IDENTIFIER(artwork, type))) = artwork_current_identifier; +#endif #if 0 if (type == ARTWORK_TYPE_GRAPHICS)