X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fgame_sp%2FDDScrollBuffer.c;h=23ce4ce9af381573ff42c585aefa7f7cc3867ea5;hb=70e95507923cc6cfb20d9e9a74e8f5cc5f6e44de;hp=66b12072caa2a6751d0b1c402c1a3decd4d65bcd;hpb=8d3d7d213a9691455a49544624bf380e85f43461;p=rocksndiamonds.git diff --git a/src/game_sp/DDScrollBuffer.c b/src/game_sp/DDScrollBuffer.c index 66b12072..23ce4ce9 100644 --- a/src/game_sp/DDScrollBuffer.c +++ b/src/game_sp/DDScrollBuffer.c @@ -131,20 +131,27 @@ void DDScrollBuffer_Cls(int BackColor) Buffer.BltColorFill(EmptyRect, BackColor); } -void DDScrollBuffer_Blt() +void DDScrollBuffer_Blt_Ext(Bitmap *target_bitmap) { RECT DR, SR; long tX, tY, L; + int sX, sY; // RECT ERect; // long Restore; if (NoDisplayFlag) return; - +#if 1 + DR.left = 0; + DR.top = 0; + DR.right = SCR_FIELDX * TILEX; + DR.bottom = SCR_FIELDY * TILEY; +#else // --- On Error GoTo BltEH DirectX.GetWindowRect(mhWnd, DR); // --- On Error GoTo 0 +#endif { tX = (DR.right - DR.left) / Stretch; @@ -172,6 +179,70 @@ void DDScrollBuffer_Blt() // DR.top = DR.top - Stretch * (mScrollY + mDestYOff) // End If } + +#if 1 + SR.left = (SR.left < 0 ? 0 : SR.left); + SR.top = (SR.top < 0 ? 0 : SR.top); +#endif + +#if 1 + { + int full_xsize = (FieldWidth - (menBorder.Checked ? 0 : 1)) * TILEX; + int full_ysize = (FieldHeight - (menBorder.Checked ? 0 : 1)) * TILEY; + int sxsize = SCR_FIELDX * TILEX; + int sysize = SCR_FIELDY * TILEY; + + tX = (full_xsize < sxsize ? full_xsize : tX); + tY = (full_ysize < sysize ? full_ysize : tY); + sX = SX + (full_xsize < sxsize ? (sxsize - full_xsize) / 2 : 0); + sY = SY + (full_ysize < sysize ? (sysize - full_ysize) / 2 : 0); + } +#endif + +#if 1 + if (!menBorder.Checked) + { + SR.left += 16; + SR.top += 16; + } +#endif + +#if 1 + +#if 1 + printf("::: DDScrollBuffer.c: DDScrollBuffer_Blt(): blit from %d, %d [%ld, %ld] [%ld, %ld] [%ld, %ld]\n", + SR.left, SR.top, mScrollX, mScrollY, mDestXOff, mDestYOff, tX, tY); +#endif + +#if 0 + /* !!! quick and dirty -- FIX THIS !!! */ + if (tape.playing && tape.fast_forward && + target_bitmap == window && + (FrameCounter % 2) != 0) + printf("::: FrameCounter == %d\n", FrameCounter); +#endif + +#if 1 + SyncDisplay(); +#endif + +#if 1 + BlitBitmap(screenBitmap, target_bitmap, + SR.left, SR.top, tX, tY, sX, sY); +#else + BlitBitmap(screenBitmap, target_bitmap, + SR.left, SR.top, + SCR_FIELDX * TILEX, SCR_FIELDY * TILEY, SX, SY); +#endif + +#if 1 + FlushDisplay(); +#endif + + return; + +#endif + // DDraw.WaitForVerticalBlank DDWAITVB_BLOCKBEGIN, 0 if (IS_NOTHING(&Buffer, sizeof(Buffer))) return; @@ -184,6 +255,7 @@ void DDScrollBuffer_Blt() { switch (L) { +#if 0 case DDERR_GENERIC: Debug.Assert(False); break; @@ -243,6 +315,7 @@ void DDScrollBuffer_Blt() case DDERR_SURFACEBUSY: Debug.Assert(False); break; +#endif case DDERR_SURFACELOST: DDraw.RestoreAllSurfaces(); @@ -256,6 +329,7 @@ void DDScrollBuffer_Blt() // ClipToWindow 0 break; +#if 0 case DDERR_UNSUPPORTED: Debug.Assert(False); break; @@ -267,6 +341,7 @@ void DDScrollBuffer_Blt() default: Debug.Assert(False); break; +#endif } } @@ -279,6 +354,11 @@ void DDScrollBuffer_Blt() // BltEH: } +void DDScrollBuffer_Blt() +{ + DDScrollBuffer_Blt_Ext(window); +} + void DDScrollBuffer_ScrollTo(int X, int Y) { if (NoDisplayFlag) @@ -290,6 +370,11 @@ void DDScrollBuffer_ScrollTo(int X, int Y) mScrollY = Y; ScrollX = mScrollX; ScrollY = mScrollY; + +#if 0 + printf("::: DDScrollBuffer.c: DDScrollBuffer_ScrollTo(): mScroll: %ld, %ld [%d, %d]\n", + mScrollX, mScrollY, X, Y); +#endif } void DDScrollBuffer_ScrollTowards(int X, int Y, double Step) @@ -299,6 +384,11 @@ void DDScrollBuffer_ScrollTowards(int X, int Y, double Step) if (NoDisplayFlag) return; +#if 0 + printf("::: DDScrollBuffer.c: DDScrollBuffer_ScrollTowards(): (1) mScroll: %ld, %ld [%d, %d, %f]\n", + mScrollX, mScrollY, X, Y, Step); +#endif + X = X / Stretch; Y = Y / Stretch; dx = X - mScrollX; @@ -316,16 +406,23 @@ void DDScrollBuffer_ScrollTowards(int X, int Y, double Step) mScrollY = mScrollY + dY * r; ScrollX = mScrollX; ScrollY = mScrollY; + +#if 0 + printf("::: DDScrollBuffer.c: DDScrollBuffer_ScrollTowards(): (2) mScroll: %ld, %ld [%d, %d, %f]\n", + mScrollX, mScrollY, X, Y, Step); +#endif } void DDScrollBuffer_SoftScrollTo(int X, int Y, long TimeMS, int FPS) { double dx, dY; +#if 0 TickCountObject Tick; +#endif long dT, StepCount; double T, tStep; long oldX, oldY, maxD; - boolean AlreadyRunning; + static boolean AlreadyRunning = False; if (NoDisplayFlag) return; @@ -340,7 +437,7 @@ void DDScrollBuffer_SoftScrollTo(int X, int Y, long TimeMS, int FPS) Y = Y / Stretch; dx = X - mScrollX; dY = Y - mScrollY; - maxD = (Abs(dx) < Abs(dY) ? Abs(dY) : Abs(dY)); + maxD = (Abs(dx) < Abs(dY) ? Abs(dY) : Abs(dx)); StepCount = FPS * (TimeMS / (double)1000); if (StepCount > maxD) StepCount = maxD; @@ -360,7 +457,11 @@ void DDScrollBuffer_SoftScrollTo(int X, int Y, long TimeMS, int FPS) goto SoftScrollEH; // If Claim Then Exit For + +#if 0 Tick.DelayMS(dT, False); +#endif + mScrollX = oldX + T * dx; mScrollY = oldY + T * dY; ScrollX = mScrollX; @@ -371,7 +472,10 @@ void DDScrollBuffer_SoftScrollTo(int X, int Y, long TimeMS, int FPS) if (UserDragFlag) goto SoftScrollEH; +#if 0 Tick.DelayMS(dT, False); +#endif + mScrollX = X; mScrollY = Y; ScrollX = mScrollX; @@ -380,4 +484,9 @@ void DDScrollBuffer_SoftScrollTo(int X, int Y, long TimeMS, int FPS) SoftScrollEH: AlreadyRunning = False; + +#if 0 + printf("::: DDScrollBuffer.c: DDScrollBuffer_SoftScrollTo(): mScroll: %ld, %ld\n", + mScrollX, mScrollY); +#endif }