X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fgame.c;h=fa9d44a4ccb41e92bd5960810aa1771548d3600a;hb=274935f49f49068998ad7b4ed9d93892aedfc6aa;hp=7b3017e95a7f2864f62b877f913e4bebceccb933;hpb=44297fe468c13bcf4f8facc718a325d60531afc5;p=rocksndiamonds.git diff --git a/src/game.c b/src/game.c index 7b3017e9..fa9d44a4 100644 --- a/src/game.c +++ b/src/game.c @@ -773,30 +773,20 @@ static void InitGameEngine() /* ---------- initialize changing elements ------------------------------- */ /* initialize changing elements information */ - for (i=0; itarget_element = EL_EMPTY_SPACE; + element_info[i].change->delay_fixed = 0; + element_info[i].change->delay_random = 0; + element_info[i].change->delay_frames = 1; } changing_element[i] = FALSE; -#else - changing_element[i].base_element = EL_UNDEFINED; - changing_element[i].next_element = EL_UNDEFINED; - changing_element[i].change_delay = -1; - changing_element[i].pre_change_function = NULL; - changing_element[i].change_function = NULL; - changing_element[i].post_change_function = NULL; -#endif } /* add changing elements from pre-defined list */ @@ -804,46 +794,28 @@ static void InitGameEngine() { int element = changing_element_list[i].element; struct ChangingElementInfo *ce = &changing_element_list[i]; - struct ElementChangeInfo *change = &element_info[element].change; + struct ElementChangeInfo *change = element_info[element].change; -#if 1 change->target_element = ce->target_element; change->delay_fixed = ce->change_delay; + change->pre_change_function = ce->pre_change_function; change->change_function = ce->change_function; change->post_change_function = ce->post_change_function; changing_element[element] = TRUE; -#else - changing_element[element].base_element = ce->base_element; - changing_element[element].next_element = ce->next_element; - changing_element[element].change_delay = ce->change_delay; - changing_element[element].pre_change_function = ce->pre_change_function; - changing_element[element].change_function = ce->change_function; - changing_element[element].post_change_function = ce->post_change_function; -#endif } /* add changing elements from custom element configuration */ for (i=0; i < NUM_CUSTOM_ELEMENTS; i++) { int element = EL_CUSTOM_START + i; -#if 0 - struct ElementChangeInfo *change = &element_info[element].change; -#endif /* only add custom elements that change after fixed/random frame delay */ if (!CAN_CHANGE(element) || !HAS_CHANGE_EVENT(element, CE_DELAY)) continue; -#if 1 changing_element[element] = TRUE; -#else - changing_element[element].base_element = element; - changing_element[element].next_element = change->target_element; - changing_element[element].change_delay = (change->delay_fixed * - change->delay_frames); -#endif } /* ---------- initialize trigger events ---------------------------------- */ @@ -855,8 +827,8 @@ static void InitGameEngine() /* add trigger events from element change event properties */ for (i=0; itrigger_element] |= + element_info[i].change->events; /* ---------- initialize push delay -------------------------------------- */ @@ -1236,7 +1208,7 @@ void InitGame() if (CAN_CHANGE(element)) { - content = element_info[element].change.target_element; + content = element_info[element].change->target_element; is_player = ELEM_IS_PLAYER(content); if (is_player && (found_rating < 3 || element < found_element)) @@ -1266,7 +1238,7 @@ void InitGame() if (!CAN_CHANGE(element)) continue; - content = element_info[element].change.content[xx][yy]; + content = element_info[element].change->content[xx][yy]; is_player = ELEM_IS_PLAYER(content); if (is_player && (found_rating < 1 || element < found_element)) @@ -5346,7 +5318,7 @@ static void ChangeElementNowExt(int x, int y, int target_element) static void ChangeElementNow(int x, int y, int element) { - struct ElementChangeInfo *change = &element_info[element].change; + struct ElementChangeInfo *change = element_info[element].change; #if 0 if (element >= EL_CUSTOM_START + 17 && element <= EL_CUSTOM_START + 39) @@ -5467,7 +5439,7 @@ static void ChangeElement(int x, int y) #else int element = Feld[x][y]; #endif - struct ElementChangeInfo *change = &element_info[element].change; + struct ElementChangeInfo *change = element_info[element].change; if (ChangeDelay[x][y] == 0) /* initialize element change */ { @@ -5479,8 +5451,8 @@ static void ChangeElement(int x, int y) if (IS_CUSTOM_ELEMENT(element) && HAS_CHANGE_EVENT(element, CE_DELAY)) { - int max_random_delay = element_info[element].change.delay_random; - int delay_frames = element_info[element].change.delay_frames; + int max_random_delay = element_info[element].change->delay_random; + int delay_frames = element_info[element].change->delay_frames; ChangeDelay[x][y] += RND(max_random_delay * delay_frames); } @@ -5537,7 +5509,7 @@ static void ChangeElement(int x, int y) if (next_element != EL_UNDEFINED) ChangeElementNow(x, y, next_element); else - ChangeElementNow(x, y, element_info[element].change.target_element); + ChangeElementNow(x, y, element_info[element].change->target_element); if (changing_element[element].post_change_function) changing_element[element].post_change_function(x, y); @@ -5560,7 +5532,7 @@ static boolean CheckTriggeredElementChange(int lx, int ly, int trigger_element, for (i=0; itrigger_element != trigger_element) continue; for (y=0; ytrigger_element) change_center_element = TRUE; /* check for change of border element */ if (IS_CUSTOM_ELEMENT(border_element) && - center_element == element_info[border_element].change.trigger_element) + center_element == element_info[border_element].change->trigger_element) CheckElementChange(xx, yy, border_element, CE_OTHER_IS_TOUCHING); }