X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Finit.c;h=60f11d7631ef4582c26b671573069dc1236b66e6;hb=cdc3c940197937b0508a1eb7dcf44874951908b7;hp=6e970c2f217963eb67cb7319c7e1feeea3cbd785;hpb=6890bb7cb72e140f4b82f35217655ae6c5213fec;p=rocksndiamonds.git diff --git a/src/init.c b/src/init.c index 6e970c2f..60f11d76 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 }; @@ -3947,6 +3949,12 @@ void InitElementPropertiesEngine(int engine_version) if (element_info[i].change_page[j].can_change) SET_PROPERTY(i, EP_CAN_CHANGE, TRUE); + /* ---------- HAS_ACTION ----------------------------------------------- */ + SET_PROPERTY(i, EP_HAS_ACTION, FALSE); /* default: has no action */ + for (j = 0; j < element_info[i].num_change_pages; j++) + if (element_info[i].change_page[j].use_action) + SET_PROPERTY(i, EP_HAS_ACTION, TRUE); + /* ---------- GFX_CRUMBLED --------------------------------------------- */ #if 1 SET_PROPERTY(i, EP_GFX_CRUMBLED, @@ -4196,17 +4204,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 */ + + if (level_nr >= 0 && level_nr < MAX_TAPES_PER_SET) + global.autoplay_level[level_nr] = TRUE; + + 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++; + } - global.autoplay_leveldir = str_copy; - global.autoplay_level_nr = -1; +#if 0 + printf("level set == '%s'\n", global.autoplay_leveldir); - if (str_ptr != NULL) + 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 +4264,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 */ @@ -4238,6 +4286,11 @@ static void InitSetup() options.verbose = TRUE; } +static void InitGameInfo() +{ + game.restart_level = FALSE; +} + static void InitPlayerInfo() { int i; @@ -4373,7 +4426,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 +4721,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) @@ -4791,6 +4849,7 @@ void OpenAll() InitSetup(); + InitGameInfo(); InitPlayerInfo(); InitArtworkInfo(); /* needed before loading gfx, sound & music */ InitArtworkConfig(); /* needed before forking sound child process */