X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame.c;h=521cc1a8e549fcb3889e1ad86a6f055005d3bec5;hb=5335fd9e893a7af87a72fb78609c2eb281bd7f63;hp=01d6b72cc2d7df39362f53fe104ae13062ed4192;hpb=19b6c35938826bfd71478d7ddaf1a4729420d3b2;p=rocksndiamonds.git diff --git a/src/game.c b/src/game.c index 01d6b72c..521cc1a8 100644 --- a/src/game.c +++ b/src/game.c @@ -2764,11 +2764,21 @@ void ScrollLevel(int dx, int dy) int x,y; int softscroll_offset = (FX == TILEX ? TILEX : 0); + /* if (soft_scrolling_on) { ScreenMovPos = PlayerMovPos; redraw_mask |= REDRAW_FIELD; } + */ + + + ScreenMovPos = PlayerMovPos; + if (soft_scrolling_on) + { + redraw_mask |= REDRAW_FIELD; + } + XCopyArea(display,drawto_field,drawto_field,gc, FX + TILEX*(dx==-1) - softscroll_offset, @@ -2850,8 +2860,8 @@ BOOL MoveFigureOneStep(int dx, int dy, int real_dx, int real_dy) JY = newJY; - JX2 = oldJX; - JY2 = oldJY; + lastJX = oldJX; + lastJY = oldJY; PlayerMovPos = (dx > 0 || dy > 0 ? -1 : 1) * 3*TILEX/4; @@ -2980,29 +2990,49 @@ BOOL MoveFigure(int dx, int dy) void ScrollFigure(int init) { static long actual_frame_counter; - static int oldX = -1, oldY = -1; + static int oldJX = -1, oldJY = -1; if (init) { - if (PlayerMovPos && oldX != -1 && oldY != -1) + /* + if (PlayerMovPos && oldJX != -1 && oldJY != -1) + { + if (Feld[lastJX][lastJY] == EL_LEERRAUM) + Feld[lastJX][lastJY] = EL_PLAYER_IS_LEAVING; + DrawLevelElement(oldJX,oldJY, Feld[oldJX][oldJY]); + DrawPlayerField(); + } + */ + + if (oldJX != -1 && oldJY != -1) { - if (Feld[JX2][JY2] == EL_LEERRAUM) - Feld[JX2][JY2] = EL_UNSICHTBAR; - DrawLevelElement(oldX,oldY, Feld[oldX][oldY]); + /* + if (Feld[lastJX][lastJY] == EL_LEERRAUM) + Feld[lastJX][lastJY] = EL_PLAYER_IS_LEAVING; + */ + DrawLevelElement(oldJX,oldJY, Feld[oldJX][oldJY]); + /* + DrawLevelElement(lastJX,lastJY, Feld[lastJX][lastJY]); DrawPlayerField(); + */ } - oldX = JX2; - oldY = JY2; + if (Feld[lastJX][lastJY] == EL_LEERRAUM) + Feld[lastJX][lastJY] = EL_PLAYER_IS_LEAVING; + DrawLevelElement(lastJX,lastJY, Feld[lastJX][lastJY]); + DrawPlayerField(); + + oldJX = lastJX; + oldJY = lastJY; actual_frame_counter = FrameCounter; /* - redraw[redraw_x1 + oldX][redraw_y1 + oldY] = 1; + redraw[redraw_x1 + oldJX][redraw_y1 + oldJY] = 1; redraw_tiles++; */ /* - DrawLevelElement(oldX,oldY, Feld[oldX][oldY]); + DrawLevelElement(oldJX,oldJY, Feld[oldJX][oldJY]); */ DrawPlayerField(); @@ -3020,16 +3050,33 @@ void ScrollFigure(int init) redraw_mask |= REDRAW_FIELD; } - if (Feld[oldX][oldY] == EL_UNSICHTBAR) - Feld[oldX][oldY] = EL_LEERRAUM; + if (Feld[oldJX][oldJY] == EL_PLAYER_IS_LEAVING) + Feld[oldJX][oldJY] = EL_LEERRAUM; - DrawLevelElement(oldX,oldY, Feld[oldX][oldY]); + DrawLevelElement(oldJX,oldJY, Feld[oldJX][oldJY]); DrawPlayerField(); + + + if (Store[oldJX][oldJY]) + { + DrawGraphic(SCROLLX(oldJX),SCROLLY(oldJY),el2gfx(Store[oldJX][oldJY])); + DrawGraphicThruMask(SCROLLX(oldJX),SCROLLY(oldJY), + el2gfx(Feld[oldJX][oldJY])); + } + else if (Feld[oldJX][oldJY]==EL_DYNAMIT) + DrawDynamite(oldJX,oldJY); + else + DrawLevelField(oldJX,oldJY); + + + if (!PlayerMovPos) { - JX2 = JX; - JY2 = JY; + lastJX = JX; + lastJY = JY; + + oldJX = oldJY = -1; } } @@ -3539,7 +3586,7 @@ BOOL PlaceBomb(void) { int element; - if (PlayerGone) + if (PlayerGone || PlayerMovPos) return(FALSE); element = Feld[JX][JY];