X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame_sp%2FDDScrollBuffer.c;h=5a89919c320bc0982be26a0b3d365d535c6f680f;hb=f7b79b71faf7e5fbe38df38d26d1156f3ba2f0ce;hp=6df6f1e20c3aa24735e3861a58b3a1a4a646a56e;hpb=843029e7c2253a35aa1b4ac87241978808b9e6fc;p=rocksndiamonds.git diff --git a/src/game_sp/DDScrollBuffer.c b/src/game_sp/DDScrollBuffer.c index 6df6f1e2..5a89919c 100644 --- a/src/game_sp/DDScrollBuffer.c +++ b/src/game_sp/DDScrollBuffer.c @@ -185,6 +185,76 @@ void InitScrollPlayfield() } void UpdatePlayfield() +{ + int x, y; +#if 1 + int num_redrawn = 0; +#endif + + for (y = DisplayMinY; y <= DisplayMaxY; y++) + { + for (x = DisplayMinX; x <= DisplayMaxX; x++) + { + int element = LowByte(PlayField16[GetSI(x, y)]); + int graphic = GfxGraphic[x][y]; + int sync_frame = GfxFrame[x][y]; +#if 1 + boolean redraw = FALSE; +#else + boolean redraw = TRUE; // !!! TEST ONLY -- ALWAYS REDRAW !!! +#endif + + if (graphic < 0) + continue; + + if (element != GfxElementLast[x][y] && + graphic == GfxGraphicLast[x][y]) + { + /* element changed, but not graphic => disable updating graphic */ + + GfxElementLast[x][y] = element; + GfxGraphicLast[x][y] = GfxGraphic[x][y] = -1; + + continue; + } + + if (graphic != GfxGraphicLast[x][y]) // new graphic + { + redraw = TRUE; + + GfxElementLast[x][y] = element; + GfxGraphicLast[x][y] = GfxGraphic[x][y]; + sync_frame = GfxFrame[x][y] = 0; + } + else if (isNextAnimationFrame_SP(graphic, sync_frame)) // new frame + { + redraw = TRUE; + } + + if (redraw) + { + int sx = x * StretchWidth; + int sy = y * StretchWidth; + +#if 0 + printf("::: REDRAW (%d, %d): %d, %d\n", x, y, graphic, sync_frame); +#endif + + StretchedSprites.BltImg(sx, sy, graphic, sync_frame); + +#if 1 + num_redrawn++; +#endif + } + } + } + +#if 0 + printf("::: FRAME %d: %d redrawn\n", FrameCounter, num_redrawn); +#endif +} + +void UpdatePlayfield_TMP() { int x1 = mScrollX_last / TILEX - 2; int y1 = mScrollY_last / TILEY - 2; @@ -315,6 +385,8 @@ int DDScrollBuffer_Get_Height() return Height; } +#if 0 + long DDScrollBuffer_CreateAtSize(long Width, long Height, long hWndViewPort) { long CreateAtSize; @@ -358,6 +430,7 @@ void DDScrollBuffer_Cls(int BackColor) Buffer.BltColorFill(EmptyRect, BackColor); } +#endif /* copy the entire screen to the window at the scroll position */ @@ -553,8 +626,12 @@ void BackToFront_SP(void) void DDScrollBuffer_Blt_Ext(Bitmap *target_bitmap) { - RECT DR, SR; + MyRECT DR, SR; +#if 1 + long tX, tY; +#else long tX, tY, L; +#endif int sX, sY; // RECT ERect; // long Restore; @@ -670,8 +747,12 @@ void DDScrollBuffer_Blt_Ext(Bitmap *target_bitmap) if (IS_NOTHING(&Buffer, sizeof(Buffer))) return; +#if 0 if (IS_NOTHING(&PrimarySurface, sizeof(PrimarySurface))) return; +#endif + +#if 0 L = PrimarySurface.Blt(DR, &Buffer, SR, DDBLT_WAIT); if (L != DD_OK) @@ -740,6 +821,7 @@ void DDScrollBuffer_Blt_Ext(Bitmap *target_bitmap) break; #endif +#if 0 case DDERR_SURFACELOST: DDraw.RestoreAllSurfaces(); if (! PrimarySurface.isLost()) @@ -751,6 +833,7 @@ void DDScrollBuffer_Blt_Ext(Bitmap *target_bitmap) // RestorePrimarySurface // ClipToWindow 0 break; +#endif #if 0 case DDERR_UNSUPPORTED: @@ -768,6 +851,8 @@ void DDScrollBuffer_Blt_Ext(Bitmap *target_bitmap) } } +#endif + #if 0 // Buffer.UpdateOverlay SR, PrimarySurface, DR, DDOVER_SHOW if (EditFlag) @@ -867,6 +952,14 @@ void DDScrollBuffer_SoftScrollTo(int X, int Y, long TimeMS, int FPS) long oldX, oldY, maxD; static boolean AlreadyRunning = False; +#if 0 + printf(":a: %d, %d [%d, %d] [%d, %d] [%d, %d]\n", + mScrollX, mScrollY, + mScrollX_last, mScrollY_last, + ScreenScrollXPos, ScreenScrollYPos, + ScrollX, ScrollY); +#endif + if (NoDisplayFlag) return; @@ -909,9 +1002,20 @@ void DDScrollBuffer_SoftScrollTo(int X, int Y, long TimeMS, int FPS) mScrollY = oldY + T * dY; ScrollX = mScrollX; ScrollY = mScrollY; - // Blt(); + +#if 0 + Blt(); +#endif } +#if 0 + printf(":x: %d, %d [%d, %d] [%d, %d] [%d, %d]\n", + mScrollX, mScrollY, + mScrollX_last, mScrollY_last, + ScreenScrollXPos, ScreenScrollYPos, + ScrollX, ScrollY); +#endif + if (UserDragFlag) goto SoftScrollEH; @@ -923,7 +1027,10 @@ void DDScrollBuffer_SoftScrollTo(int X, int Y, long TimeMS, int FPS) mScrollY = Y; ScrollX = mScrollX; ScrollY = mScrollY; - // Blt(); + +#if 0 + Blt(); +#endif SoftScrollEH: AlreadyRunning = False; @@ -933,7 +1040,23 @@ SoftScrollEH: mScrollX, mScrollY); #endif +#if 0 + printf(":y: %d, %d [%d, %d] [%d, %d] [%d, %d]\n", + mScrollX, mScrollY, + mScrollX_last, mScrollY_last, + ScreenScrollXPos, ScreenScrollYPos, + ScrollX, ScrollY); +#endif + #if 1 ScrollPlayfieldIfNeeded(); #endif + +#if 0 + printf(":z: %d, %d [%d, %d] [%d, %d] [%d, %d]\n", + mScrollX, mScrollY, + mScrollX_last, mScrollY_last, + ScreenScrollXPos, ScreenScrollYPos, + ScrollX, ScrollY); +#endif }