X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Finit.c;h=798f4b4aab05442ac4d6f0c40db79ce65d710d30;hb=6b702ffdb8025ef5538c2607131ecae2874730c4;hp=dbecf851dd941b4d69dc4ed6b69375b5c9f944a9;hpb=51dcb2097c619c5f9ba924a7edb4a3bdd6a6986e;p=rocksndiamonds.git diff --git a/src/init.c b/src/init.c index dbecf851..798f4b4a 100644 --- a/src/init.c +++ b/src/init.c @@ -2529,6 +2529,11 @@ void InitElementPropertiesStatic() EL_PENGUIN, EL_PIG, EL_DRAGON, + +#if 0 /* USE_GRAVITY_BUGFIX_OLD */ + EL_PLAYER_IS_LEAVING, /* needed for gravity + "block last field" */ +#endif + -1 }; @@ -4171,7 +4176,7 @@ void Execute_Command(char *command) { char *filename = &command[11]; - if (access(filename, F_OK) != 0) + if (!fileExists(filename)) Error(ERR_EXIT, "cannot open file '%s'", filename); LoadLevelFromFilename(&level, filename); @@ -4183,7 +4188,7 @@ void Execute_Command(char *command) { char *filename = &command[10]; - if (access(filename, F_OK) != 0) + if (!fileExists(filename)) Error(ERR_EXIT, "cannot open file '%s'", filename); LoadTapeFromFilename(filename); @@ -4193,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; + + 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 */ - global.autoplay_leveldir = str_copy; - global.autoplay_level_nr = -1; + if (level_nr >= 0 && level_nr < MAX_TAPES_PER_SET) + global.autoplay_level[level_nr] = TRUE; - if (str_ptr != NULL) + global.autoplay_all = FALSE; + } + + /* 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) { @@ -4213,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 */