X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ffiles.c;h=db3a432d41aa3623ee0d26ac783343663f6f25c6;hb=10b9382e55f3a8cd0a15644cf1ed6e1451654a76;hp=d9840486bf81bbf77fb0641882c2cbbf23eb7fe5;hpb=274935f49f49068998ad7b4ed9d93892aedfc6aa;p=rocksndiamonds.git diff --git a/src/files.c b/src/files.c index d9840486..db3a432d 100644 --- a/src/files.c +++ b/src/files.c @@ -62,37 +62,39 @@ void setElementChangePages(struct ElementInfo *ei, int change_pages) ei->change = &ei->change_page[ei->current_change_page]; } -void setElementChangeInfoToDefaults(struct ElementChangeInfo *eci) +void setElementChangeInfoToDefaults(struct ElementChangeInfo *change) { int x, y; - eci->events = CE_BITMASK_DEFAULT; - eci->target_element = EL_EMPTY_SPACE; + change->can_change = FALSE; - eci->delay_fixed = 0; - eci->delay_random = 0; - eci->delay_frames = -1; /* later set to reliable default value */ + change->events = CE_BITMASK_DEFAULT; + change->target_element = EL_EMPTY_SPACE; - eci->trigger_element = EL_EMPTY_SPACE; + change->delay_fixed = 0; + change->delay_random = 0; + change->delay_frames = -1; /* later set to reliable default value */ - eci->explode = FALSE; - eci->use_content = FALSE; - eci->only_complete = FALSE; - eci->use_random_change = FALSE; - eci->random = 0; - eci->power = CP_NON_DESTRUCTIVE; + change->trigger_element = EL_EMPTY_SPACE; + + change->explode = FALSE; + change->use_content = FALSE; + change->only_complete = FALSE; + change->use_random_change = FALSE; + change->random = 0; + change->power = CP_NON_DESTRUCTIVE; for(x=0; x<3; x++) for(y=0; y<3; y++) - eci->content[x][y] = EL_EMPTY_SPACE; + change->content[x][y] = EL_EMPTY_SPACE; - eci->player_action = 0; - eci->collide_action = 0; - eci->other_action = 0; + change->player_action = 0; + change->collide_action = 0; + change->other_action = 0; - eci->pre_change_function = NULL; - eci->change_function = NULL; - eci->post_change_function = NULL; + change->pre_change_function = NULL; + change->change_function = NULL; + change->post_change_function = NULL; } static void setLevelInfoToDefaults(struct LevelInfo *level) @@ -841,6 +843,18 @@ static void LoadLevel_InitLevel(struct LevelInfo *level, char *filename) } } + /* initialize "can_change" field for old levels with only one change page */ + if (level->game_version <= VERSION_IDENT(3,0,2)) + { + for (i=0; i < NUM_CUSTOM_ELEMENTS; i++) + { + int element = EL_CUSTOM_START + i; + + if (CAN_CHANGE(element)) + element_info[element].change->can_change = TRUE; + } + } + /* copy elements to runtime playfield array */ for(x=0; x