X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ftools.c;h=dbd8c5d5b9c567b5e5aca73c7f45c521b8fa4631;hb=9a95effa1085fd67ed18fe1903c27a1fa820088f;hp=b2815d94539d92823baa700818d5afcf53771c37;hpb=370a25a79d2e8df1e6e3e4cb4be39496d0190c28;p=rocksndiamonds.git diff --git a/src/tools.c b/src/tools.c index b2815d94..dbd8c5d5 100644 --- a/src/tools.c +++ b/src/tools.c @@ -586,6 +586,8 @@ void DrawPlayer(struct PlayerInfo *player) graphic = GFX_MURPHY_GO_LEFT; else if (player->MovDir & (MV_UP | MV_DOWN) && last_dir == MV_RIGHT) graphic = GFX_MURPHY_GO_RIGHT; + else + graphic = GFX_MURPHY_GO_LEFT; graphic += getGraphicAnimationPhase(3, 2, ANIM_OSCILLATE); } @@ -645,7 +647,9 @@ void DrawPlayer(struct PlayerInfo *player) int element = Feld[next_jx][next_jy]; int graphic = el2gfx(element); - if ((element == EL_FELSBROCKEN || element == EL_SP_ZONK) && sxx) + if ((element == EL_FELSBROCKEN || + element == EL_SP_ZONK || + element == EL_BD_ROCK) && sxx) { int phase = (player->GfxPos / (TILEX / 4)); @@ -928,6 +932,13 @@ void getMiniGraphicSource(int graphic, Pixmap *pixmap, int *x, int *y) *x = MINI_DC_STARTX + (graphic % MINI_DC_PER_LINE) * MINI_TILEX; *y = MINI_DC_STARTY + (graphic / MINI_DC_PER_LINE) * MINI_TILEY; } + else if (graphic >= GFX_START_ROCKSMORE && graphic <= GFX_END_ROCKSMORE) + { + graphic -= GFX_START_ROCKSMORE; + *pixmap = pix[PIX_MORE]; + *x = MINI_MORE_STARTX + (graphic % MINI_MORE_PER_LINE) * MINI_TILEX; + *y = MINI_MORE_STARTY + (graphic / MINI_MORE_PER_LINE) * MINI_TILEY; + } else if (graphic >= GFX_START_ROCKSFONT && graphic <= GFX_END_ROCKSFONT) { graphic -= GFX_START_ROCKSFONT; @@ -1163,12 +1174,16 @@ void DrawScreenElementExt(int x, int y, int dx, int dy, int element, { graphic += phase4; } - else if ((element == EL_FELSBROCKEN || element == EL_SP_ZONK || + else if ((element == EL_FELSBROCKEN || + element == EL_SP_ZONK || + element == EL_BD_ROCK || IS_GEM(element)) && !cut_mode) { if (uy >= lev_fieldy-1 || !IS_BELT(Feld[ux][uy+1])) { - if (element == EL_FELSBROCKEN || element == EL_SP_ZONK) + if (element == EL_FELSBROCKEN || + element == EL_SP_ZONK || + element == EL_BD_ROCK) { if (dir == MV_LEFT) graphic += (4 - phase4) % 4; @@ -1278,7 +1293,10 @@ void ErdreichAnbroeckeln(int x, int y) element = Feld[ux][uy]; - if (element == EL_ERDREICH || element == EL_LANDMINE) + if (element == EL_ERDREICH || + element == EL_LANDMINE || + element == EL_TRAP_INACTIVE || + element == EL_TRAP_ACTIVE) { if (!IN_SCR_FIELD(x, y)) return; @@ -1296,7 +1314,10 @@ void ErdreichAnbroeckeln(int x, int y) else element = Feld[uxx][uyy]; - if (element == EL_ERDREICH || element == EL_LANDMINE) + if (element == EL_ERDREICH || + element == EL_LANDMINE || + element == EL_TRAP_INACTIVE || + element == EL_TRAP_ACTIVE) continue; if (i == 1 || i == 2) @@ -1336,7 +1357,10 @@ void ErdreichAnbroeckeln(int x, int y) uyy = uy + xy[i][1]; if (!IN_LEV_FIELD(uxx, uyy) || - (Feld[uxx][uyy] != EL_ERDREICH && Feld[uxx][uyy] != EL_LANDMINE) || + (Feld[uxx][uyy] != EL_ERDREICH && + Feld[uxx][uyy] != EL_LANDMINE && + Feld[uxx][uyy] != EL_TRAP_INACTIVE && + Feld[uxx][uyy] != EL_TRAP_ACTIVE) || !IN_SCR_FIELD(xx, yy)) continue; @@ -1552,6 +1576,14 @@ void DrawMicroElement(int xpos, int ypos, int element) MICRO_DC_STARTY + (graphic / MICRO_DC_PER_LINE) * MICRO_TILEY, MICRO_TILEX, MICRO_TILEY, xpos, ypos); } + else if (graphic >= GFX_START_ROCKSMORE && graphic <= GFX_END_ROCKSMORE) + { + graphic -= GFX_START_ROCKSMORE; + XCopyArea(display, pix[PIX_MORE], drawto, gc, + MICRO_MORE_STARTX + (graphic % MICRO_MORE_PER_LINE) *MICRO_TILEX, + MICRO_MORE_STARTY + (graphic / MICRO_MORE_PER_LINE) *MICRO_TILEY, + MICRO_TILEX, MICRO_TILEY, xpos, ypos); + } else XCopyArea(display, pix[PIX_BACK], drawto, gc, MICRO_GFX_STARTX + (graphic % MICRO_GFX_PER_LINE) * MICRO_TILEX, @@ -2614,6 +2646,24 @@ int el2gfx(int element) case EL_EMC_WALL_6: return GFX_EMC_WALL_6; case EL_EMC_WALL_7: return GFX_EMC_WALL_7; case EL_EMC_WALL_8: return GFX_EMC_WALL_8; + case EL_TUBE_CROSS: return GFX_TUBE_CROSS; + case EL_TUBE_VERTICAL: return GFX_TUBE_VERTICAL; + case EL_TUBE_HORIZONTAL: return GFX_TUBE_HORIZONTAL; + case EL_TUBE_VERT_LEFT: return GFX_TUBE_VERT_LEFT; + case EL_TUBE_VERT_RIGHT: return GFX_TUBE_VERT_RIGHT; + case EL_TUBE_HORIZ_UP: return GFX_TUBE_HORIZ_UP; + case EL_TUBE_HORIZ_DOWN: return GFX_TUBE_HORIZ_DOWN; + case EL_TUBE_LEFT_UP: return GFX_TUBE_LEFT_UP; + case EL_TUBE_LEFT_DOWN: return GFX_TUBE_LEFT_DOWN; + case EL_TUBE_RIGHT_UP: return GFX_TUBE_RIGHT_UP; + case EL_TUBE_RIGHT_DOWN: return GFX_TUBE_RIGHT_DOWN; + case EL_SPRING: return GFX_SPRING; + case EL_SPRING_MOVING: return GFX_SPRING; + case EL_TRAP_INACTIVE: return GFX_TRAP_INACTIVE; + case EL_TRAP_ACTIVE: return GFX_TRAP_ACTIVE; + case EL_BD_WALL: return GFX_BD_WALL; + case EL_BD_ROCK: return GFX_BD_ROCK; + case EL_DX_SUPABOMB: return GFX_DX_SUPABOMB; default: {