X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ftools.c;h=27c2a9f8c155b36e4c0a165eae93e180fe2c2f78;hb=1e5cae5e3ab889c3bcba80a065c6d7ba1e6d28a2;hp=e630cd18f7654c51546de9d6de66d5f33fdac2b1;hpb=4add6d49e770bbdcd7dc4176fdec56d6dad16bb2;p=rocksndiamonds.git diff --git a/src/tools.c b/src/tools.c index e630cd18..27c2a9f8 100644 --- a/src/tools.c +++ b/src/tools.c @@ -976,6 +976,11 @@ static void DrawLevelFieldCrumbledSandExt(int x, int y, int graphic, int frame) IS_MOVING(xx, yy)) continue; +#if 1 + if (Feld[xx][yy] == EL_ELEMENT_SNAPPING) + continue; +#endif + element = TILE_GFX_ELEMENT(xx, yy); if (!GFX_CRUMBLED(element)) @@ -988,7 +993,11 @@ static void DrawLevelFieldCrumbledSandExt(int x, int y, int graphic, int frame) continue; #endif +#if 1 + graphic = el_act2crm(element, ACTION_DEFAULT); +#else graphic = el_act2crm(Feld[xx][yy], ACTION_DEFAULT); +#endif crumbled_border_size = graphic_info[graphic].border_size; getGraphicSource(graphic, frame, &src_bitmap, &src_x, &src_y); @@ -1023,7 +1032,20 @@ void DrawLevelFieldCrumbledSand(int x, int y) if (!IN_LEV_FIELD(x, y)) return; +#if 1 + if (Feld[x][y] == EL_ELEMENT_SNAPPING && + GFX_CRUMBLED(GfxElement[x][y])) + { + DrawLevelFieldCrumbledSandDigging(x, y, GfxDir[x][y], GfxFrame[x][y]); + return; + } +#endif + +#if 1 + graphic = el_act2crm(TILE_GFX_ELEMENT(x, y), ACTION_DEFAULT); +#else graphic = el_act2crm(Feld[x][y], ACTION_DEFAULT); +#endif DrawLevelFieldCrumbledSandExt(x, y, graphic, 0); } @@ -1698,8 +1720,13 @@ inline void DrawLevelGraphicAnimationIfNeeded(int x, int y, int graphic) DrawGraphicAnimation(sx, sy, graphic); +#if 1 + if (GFX_CRUMBLED(TILE_GFX_ELEMENT(x, y))) + DrawLevelFieldCrumbledSand(x, y); +#else if (GFX_CRUMBLED(Feld[x][y])) DrawLevelFieldCrumbledSand(x, y); +#endif } void DrawLevelElementAnimationIfNeeded(int x, int y, int element) @@ -1723,7 +1750,7 @@ void DrawLevelElementAnimationIfNeeded(int x, int y, int element) static int getPlayerGraphic(struct PlayerInfo *player, int move_dir) { - if (player->use_murphy_graphic) + if (player->use_murphy) { /* this works only because currently only one player can be "murphy" ... */ static int last_horizontal_dir = MV_LEFT; @@ -1742,7 +1769,7 @@ static int getPlayerGraphic(struct PlayerInfo *player, int move_dir) return graphic; } else - return el_act_dir2img(player->element_nr, player->GfxAction, move_dir); + return el_act_dir2img(player->artwork_element, player->GfxAction,move_dir); } static boolean equalGraphics(int graphic1, int graphic2) @@ -4731,6 +4758,63 @@ int map_element_EM_to_RND(int element_em) return EL_UNKNOWN; } +void map_android_clone_elements_RND_to_EM(struct LevelInfo *level) +{ + struct LevelInfo_EM *level_em = level->native_em_level; + struct LEVEL *lev = level_em->lev; + int i, j; + + for (i = 0; i < level->num_android_clone_elements; i++) + { + int element_rnd = level->android_clone_element[i]; + int element_em = map_element_RND_to_EM(element_rnd); + + for (j = 0; em_object_mapping_list[j].element_em != -1; j++) + if (em_object_mapping_list[j].element_rnd == element_rnd) + lev->android_array[em_object_mapping_list[j].element_em] = element_em; + } +} + +void map_android_clone_elements_EM_to_RND(struct LevelInfo *level) +{ + struct LevelInfo_EM *level_em = level->native_em_level; + struct LEVEL *lev = level_em->lev; + int i, j; + + level->num_android_clone_elements = 0; + + for (i = 0; i < TILE_MAX; i++) + { + int element_em = lev->android_array[i]; + int element_rnd; + boolean element_found = FALSE; + + if (element_em == Xblank) + continue; + + element_rnd = map_element_EM_to_RND(element_em); + + for (j = 0; j < level->num_android_clone_elements; j++) + if (level->android_clone_element[j] == element_rnd) + element_found = TRUE; + + if (!element_found) + { + level->android_clone_element[level->num_android_clone_elements++] = + element_rnd; + + if (level->num_android_clone_elements == MAX_ANDROID_ELEMENTS) + break; + } + } + + if (level->num_android_clone_elements == 0) + { + level->num_android_clone_elements = 1; + level->android_clone_element[0] = EL_EMPTY; + } +} + #if 0 int map_element_RND_to_EM(int element_rnd) @@ -5365,6 +5449,24 @@ int map_element_EM_to_RND(int element_em) #endif +int map_direction_RND_to_EM(int direction) +{ + return (direction == MV_UP ? 0 : + direction == MV_RIGHT ? 1 : + direction == MV_DOWN ? 2 : + direction == MV_LEFT ? 3 : + -1); +} + +int map_direction_EM_to_RND(int direction) +{ + return (direction == 0 ? MV_UP : + direction == 1 ? MV_RIGHT : + direction == 2 ? MV_DOWN : + direction == 3 ? MV_LEFT : + MV_NONE); +} + int get_next_element(int element) { switch(element)