From aaef409525599bb87a6dc8c099fbc0e11a455bae Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Mon, 17 Aug 1998 23:45:23 +0200 Subject: [PATCH] rnd-19980817 --- src/events.c | 19 ------- src/game.c | 114 ++-------------------------------------- src/tools.c | 145 ++++++++++++++------------------------------------- 3 files changed, 44 insertions(+), 234 deletions(-) diff --git a/src/events.c b/src/events.c index 1b77ca40..940fd379 100644 --- a/src/events.c +++ b/src/events.c @@ -668,18 +668,6 @@ void HandleJoystick() return; } - -#if 0 - if (PlayerMovPos) - { - ScrollFigure(0); - /* - BackToFront(); - */ - } -#endif - - if (tape.pausing || PlayerGone) joy = 0; @@ -733,13 +721,6 @@ void HandleJoystick() } } } - - - /* - DrawPlayerField(); - */ - - break; } default: diff --git a/src/game.c b/src/game.c index f70257ed..eb64c053 100644 --- a/src/game.c +++ b/src/game.c @@ -107,8 +107,8 @@ void InitGame() case EL_SPIELFIGUR: case EL_SPIELER1: Feld[x][y] = EL_LEERRAUM; - JX = x; - JY = y; + JX = lastJX = x; + JY = lastJY = y; break; case EL_SPIELER2: Feld[x][y] = EL_LEERRAUM; @@ -2724,14 +2724,6 @@ void GameActions() } } } - - /* - if (PlayerMovPos) - ScrollFigure(0); - - DrawPlayerField(); - */ - } if (TimeLeft>0 && TimeFrames>=25 && !tape.pausing) @@ -2751,43 +2743,17 @@ void GameActions() KillHero(); } - /* - if (PlayerMovPos) - ScrollFigure(0); - */ - - - /* DrawPlayerField(); - */ - - - DrawPlayerField(); - BackToFront(); } void ScrollLevel(int dx, int dy) { + int softscroll_offset = (soft_scrolling_on ? TILEX : 0); 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, @@ -2819,10 +2785,6 @@ BOOL MoveFigureOneStep(int dx, int dy, int real_dx, int real_dy) int element; int can_move; -/* - int old_move_dir = PlayerMovDir; -*/ - if (PlayerGone || (!dx && !dy)) return(MF_NO_ACTION); @@ -2830,12 +2792,6 @@ BOOL MoveFigureOneStep(int dx, int dy, int real_dx, int real_dy) dx > 0 ? MV_RIGHT : dy < 0 ? MV_UP : dy > 0 ? MV_DOWN : MV_NO_MOVING); -/* - if (old_move_dir != PlayerMovDir) - PlayerFrame = 0; - else - PlayerFrame = (PlayerFrame + 1) % 4; -*/ if (!IN_LEV_FIELD(newJX,newJY)) return(MF_NO_ACTION); @@ -2900,21 +2856,6 @@ BOOL MoveFigure(int dx, int dy) if (PlayerGone || (!dx && !dy)) return(FALSE); -/* - if (!DelayReached(&move_delay,8) && !tape.playing) - return(FALSE); -*/ - -/* - if (!DelayReached(&move_delay,10) && !tape.playing) - return(FALSE); -*/ - -/* - if (!FrameReached(&move_delay,2) && !tape.playing) - return(FALSE); -*/ - if (Movemethod == 0) { if (!DelayReached(&move_delay,Movespeed[0]) && !tape.playing) @@ -2926,7 +2867,6 @@ BOOL MoveFigure(int dx, int dy) return(FALSE); } - if (last_move_dir & (MV_LEFT | MV_RIGHT)) { if (!(moved |= MoveFigureOneStep(0,dy, dx,dy))) @@ -2940,17 +2880,6 @@ BOOL MoveFigure(int dx, int dy) last_move_dir = MV_NO_MOVING; - - /* - if (moved |= MoveFigureOneStep(dx,0, dx,dy)) - moved |= MoveFigureOneStep(0,dy, dx,dy); - else - { - moved |= MoveFigureOneStep(0,dy, dx,dy); - moved |= MoveFigureOneStep(dx,0, dx,dy); - } - */ - if (moved & MF_MOVING) { int old_scroll_x=scroll_x, old_scroll_y=scroll_y; @@ -2986,10 +2915,6 @@ BOOL MoveFigure(int dx, int dy) TestIfHeroHitsBadThing(); - /* - BackToFront(); - */ - if (PlayerGone) RemoveHero(); @@ -3003,28 +2928,8 @@ void ScrollFigure(int init) if (init) { - /* - 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[lastJX][lastJY] == EL_LEERRAUM) - Feld[lastJX][lastJY] = EL_PLAYER_IS_LEAVING; - */ DrawLevelElement(oldJX,oldJY, Feld[oldJX][oldJY]); - /* - DrawLevelElement(lastJX,lastJY, Feld[lastJX][lastJY]); - DrawPlayerField(); - */ - } if (Feld[lastJX][lastJY] == EL_LEERRAUM) Feld[lastJX][lastJY] = EL_PLAYER_IS_LEAVING; @@ -3035,16 +2940,6 @@ void ScrollFigure(int init) oldJY = lastJY; actual_frame_counter = FrameCounter; - /* - redraw[redraw_x1 + oldJX][redraw_y1 + oldJY] = 1; - redraw_tiles++; - */ - - /* - DrawLevelElement(oldJX,oldJY, Feld[oldJX][oldJY]); - */ - - if (PlayerPushing) { int nextJX = JX + (JX - lastJX); @@ -3054,8 +2949,7 @@ void ScrollFigure(int init) DrawLevelElement(nextJX,nextJY, EL_SOKOBAN_FELD_LEER); else DrawLevelElement(nextJX,nextJY, EL_LEERRAUM); - } - + } DrawPlayerField(); diff --git a/src/tools.c b/src/tools.c index 85c9009f..fe7f0e5c 100644 --- a/src/tools.c +++ b/src/tools.c @@ -65,68 +65,12 @@ void BackToFront() if (direct_draw_on && game_status == PLAYING) redraw_mask &= ~REDRAW_MAIN; - - - /* - if (ScreenMovPos && redraw_mask & REDRAW_FIELD) - { - redraw_mask |= REDRAW_FIELD; - - printf("FULL SCREEN REDRAW FORCED by ScreenMovPos == %d\n", ScreenMovPos); - } - */ - - - - /* - if (ScreenMovPos && redraw_mask & REDRAW_TILES) - { - redraw_mask |= REDRAW_FIELD; - - printf("FULL SCREEN REDRAW FORCED by ScreenMovPos == %d\n", ScreenMovPos); - } - */ - - - /* - if (ScreenMovPos && !(redraw_mask & REDRAW_FIELD)) - { - printf("OOPS!\n"); - - *((int *)NULL) = 0; - } - */ - - /* - if (IN_SCR_FIELD(lastJX,lastJY)) - redraw[redraw_x1 + lastJX][redraw_y1 + lastJY] = 0; - */ - - if (redraw_mask & REDRAW_TILES && redraw_tiles > REDRAWTILES_THRESHOLD) redraw_mask |= REDRAW_FIELD; if (redraw_mask & REDRAW_FIELD) redraw_mask &= ~REDRAW_TILES; - /* - { - static int lastFrame = 0; - - printf("FrameCounter: %d\n", FrameCounter); - - if (FrameCounter != lastFrame + 1) - { - printf("SYNC LOST! <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n"); - - if (FrameCounter > 100) - *((int *)NULL) = 0; - } - - lastFrame = FrameCounter; - } - */ - if (!redraw_mask) return; @@ -140,29 +84,24 @@ void BackToFront() if (redraw_mask & REDRAW_FIELD) { - int fx = FX, fy = FY; - - if (soft_scrolling_on) + if (game_status != PLAYING || redraw_mask & REDRAW_FROM_BACKBUFFER) + XCopyArea(display,backbuffer,window,gc, + REAL_SX,REAL_SY, FULL_SXSIZE,FULL_SYSIZE, + REAL_SX,REAL_SY); + else { - fx += (PlayerMovDir & (MV_LEFT|MV_RIGHT) ? ScreenMovPos : 0); - fy += (PlayerMovDir & (MV_UP|MV_DOWN) ? ScreenMovPos : 0); - } + int fx = FX, fy = FY; + + if (soft_scrolling_on) + { + fx += (PlayerMovDir & (MV_LEFT|MV_RIGHT) ? ScreenMovPos : 0); + fy += (PlayerMovDir & (MV_UP|MV_DOWN) ? ScreenMovPos : 0); + } - if (game_status == PLAYING && !(redraw_mask & REDRAW_FROM_BACKBUFFER)) - { XCopyArea(display,buffer,window,gc, fx,fy, SXSIZE,SYSIZE, SX,SY); - - /* - printf("FULL SCREEN REDRAW / ScreenMovPos == %d\n", ScreenMovPos); - */ - } - else - XCopyArea(display,backbuffer,window,gc, - REAL_SX,REAL_SY, FULL_SXSIZE,FULL_SYSIZE, - REAL_SX,REAL_SY); redraw_mask &= ~REDRAW_MAIN; } @@ -232,7 +171,6 @@ void BackToFront() void FadeToFront() { - /* long fading_delay = 300000; @@ -391,11 +329,6 @@ void DrawPlayerField() if (PlayerGone) return; - /* - printf("INFO: DrawPlayerField(): x = %d, y = %d\n",x,y); - */ - - #if DEBUG if (!IN_LEV_FIELD(x,y) || !IN_SCR_FIELD(sx,sy)) { @@ -468,33 +401,12 @@ void DrawPlayerField() syy = PlayerMovPos; } -#if 0 - if (!soft_scrolling_on) - { - int old_scroll_x=scroll_x, old_scroll_y=scroll_y; - int new_scroll_x=scroll_x, new_scroll_y=scroll_y; - int offset = (scroll_delay_on ? 3 : 0); - - if ((scroll_x < lastJX-MIDPOSX-offset || scroll_x > lastJX-MIDPOSX+offset) && - lastJX>=MIDPOSX-1-offset && lastJX<=lev_fieldx-(MIDPOSX-offset)) - new_scroll_x = lastJX-MIDPOSX + (scroll_x < lastJX-MIDPOSX ? -offset : offset); - if ((scroll_y < lastJY-MIDPOSY-offset || scroll_y > lastJY-MIDPOSY+offset) && - JY>=MIDPOSY-1-offset && JY<=lev_fieldy-(MIDPOSY-offset)) - new_scroll_y = lastJY-MIDPOSY + (scroll_y < lastJY-MIDPOSY ? -offset : offset); - - if (new_scroll_x!=old_scroll_x || new_scroll_y!=old_scroll_y) - /* - ScrollLevel(old_scroll_x-scroll_x,old_scroll_y-scroll_y); - */ - sxx = syy = 0; - } -#endif - if (!soft_scrolling_on && ScreenMovPos) sxx = syy = 0; + if (draw_thru_mask) DrawGraphicShiftedThruMask(sx,sy,sxx,syy,graphic,CUT_NO_CUTTING); /* @@ -520,9 +432,22 @@ void DrawPlayerField() GFX_SOKOBAN_OBJEKT, CUT_NO_CUTTING); else - DrawGraphicShifted(px,py,sxx,syy, - el2gfx(Feld[nextJX][nextJY]), - CUT_NO_CUTTING); + { + int element = Feld[nextJX][nextJY]; + int graphic = el2gfx(element); + + if (element == EL_FELSBROCKEN && sxx) + { + int phase = PlayerMovPos / (TILEX/4); + + if (PlayerMovDir == MV_LEFT) + graphic += phase; + else + graphic += phase+4; + } + + DrawGraphicShifted(px,py, sxx,syy, graphic, CUT_NO_CUTTING); + } } @@ -551,9 +476,19 @@ void DrawPlayerField() { int dest_x = SX+SCROLLX(x)*TILEX; int dest_y = SY+SCROLLY(y)*TILEY; + int x_size = TILEX; + int y_size = TILEY; + + if (!ScreenMovPos) + { + dest_x = SX + SCROLLX(MIN(JX,lastJX))*TILEX; + dest_y = SY + SCROLLY(MIN(JY,lastJY))*TILEY; + x_size = TILEX * (1 + ABS(JX - lastJX)); + y_size = TILEY * (1 + ABS(JY - lastJY)); + } XCopyArea(display,drawto_field,window,gc, - dest_x,dest_y, TILEX,TILEY, dest_x,dest_y); + dest_x,dest_y, x_size,y_size, dest_x,dest_y); SetDrawtoField(DRAW_DIRECT); } } -- 2.34.1