major cleanup of preprocessor hell
[rocksndiamonds.git] / src / game_sp / DDSpriteBuffer.c
index e7412265cfde796c41926c6280793321eef035cd..e2f47eee2195a554e31a49720aea0642bf89e06f 100644 (file)
 
 #include "DDSpriteBuffer.h"
 
-static void Blt(int pX, int pY, int SpriteX, int SpriteY);
 
-// --- VERSION 1.0 CLASS
-// --- BEGIN
-// ---   MultiUse = -1  'True  // True
-// ---   Persistable = 0  'NotPersistable  // NotPersistable
-// ---   DataBindingBehavior = 0  'vbNone  // vbNone
-// ---   DataSourceBehavior  = 0  'vbNone  // vbNone
-// ---   MTSTransactionMode  = 0  'NotAnMTSObject  // NotAnMTSObject
-// --- END
+static void Blt(int pX, int pY, Bitmap *bitmap, int SpriteX, int SpriteY)
+{
+  int scx = (mScrollX_last < 0 ? 0 : mScrollX_last);
+  int scy = (mScrollY_last < 0 ? 0 : mScrollY_last);
+  int sx1 = scx - 2 * TILEX;
+  int sy1 = scy - 2 * TILEY;
+  int sx2 = scx + (SCR_FIELDX + 1) * TILEX;
+  int sy2 = scy + (SCR_FIELDY + 1) * TILEY;
+  int sx = pX - sx1;
+  int sy = pY - sy1;
+  int tile_x = sx / TILESIZE;
+  int tile_y = sy / TILESIZE;
+  int move_x = (sx + TILESIZE - 1) / TILESIZE;
+  int move_y = (sy + TILESIZE - 1) / TILESIZE;
 
-// static char *VB_Name = "DDSpriteBuffer";
-// static boolean VB_GlobalNameSpace = False;
-// static boolean VB_Creatable = True;
-// static boolean VB_PredeclaredId = False;
-// static boolean VB_Exposed = False;
-// --- Option Explicit
-
-// needs reference to: DirectX7 for Visual Basic Type Library
-
-DirectDrawSurface7 Buffer;
-DirectDrawSurface7 mDest;
-long mXSpriteCount, mYSpriteCount;
-long mSpriteWidth, mSpriteHeight;
-long mDestXOff, mDestYOff;
-
-void DDSpriteBuffer_Let_DestXOff(long NewVal)
-{
-  mDestXOff = NewVal;
-}
-
-long DDSpriteBuffer_Get_DestXOff()
-{
-  long DestXOff;
-
-  DestXOff = mDestXOff;
-
-  return DestXOff;
-}
-
-void DDSpriteBuffer_Let_DestYOff(long NewVal)
-{
-  mDestYOff = NewVal;
-}
-
-long DDSpriteBuffer_Get_DestYOff()
-{
-  long DestYOff;
-
-  DestYOff = mDestYOff;
-
-  return DestYOff;
-}
-
-int DDSpriteBuffer_Set_DestinationSurface(DirectDrawSurface7 DSurface)
-{
-  int DestinationSurface;
-
-  mDest = DSurface;
-
-  return DestinationSurface;
-}
-
-DirectDrawSurface7 DDSpriteBuffer_Get_Surface()
-{
-  DirectDrawSurface7 Surface;
-
-  Surface = Buffer;
-
-  return Surface;
-}
-
-long DDSpriteBuffer_Get_Width()
-{
-  long Width;
-
-  Width = mSpriteWidth * mXSpriteCount;
-
-  return Width;
-}
-
-int DDSpriteBuffer_Get_Height()
-{
-  int Height;
-
-  Height = mSpriteHeight * mYSpriteCount;
-
-  return Height;
-}
-
-boolean DDSpriteBuffer_CreateFromFile(char *Path, long xSprites, long ySprites)
-{
-  boolean CreateFromFile;
-
-  DDSURFACEDESC2 SD;
-
-  {
-    SD.lFlags = DDSD_CAPS; // Or DDSD_WIDTH Or DDSD_HEIGHT
-    SD.ddsCaps.lCaps = DDSCAPS_VIDEOMEMORY; // DDSCAPS_SYSTEMMEMORY 'DDSCAPS_OFFSCREENPLAIN
-  }
-
-  // --- On Error GoTo CreateFromFileEH
-#if 1
-  SD.LWidth  = 16 * TILEX;
-  SD.LHeight = 16 * TILEY;
-#else
-  Buffer = DDraw.CreateSurfaceFromFile(Path, SD);
-#endif
-  // --- On Error GoTo 0
-
-#if 0
-  Buffer.GetSurfaceDesc(SD);
-#endif
-
-  mSpriteWidth = SD.LWidth / xSprites;
-  mSpriteHeight = SD.LHeight / ySprites;
-  mXSpriteCount = xSprites;
-  mYSpriteCount = ySprites;
-
-  CreateFromFile = True;
-  return CreateFromFile;
-
-  // CreateFromFileEH:
-  CreateFromFile = False;
-
-  return CreateFromFile;
-}
-
-boolean DDSpriteBuffer_CreateAtSize(long Width, long Height, long xSprites, long ySprites)
-{
-  boolean CreateAtSize;
-
-  DDSURFACEDESC2 SD;
-
-  {
-    SD.lFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;
-    SD.ddsCaps.lCaps = DDSCAPS_VIDEOMEMORY;
-    // SD.ddsCaps.lCaps = DDSCAPS_OFFSCREENPLAIN
-    SD.LWidth = Width;
-    SD.LHeight = Height;
-  }
-
-  // --- On Error GoTo CreateAtSizeEH
-  Buffer = DDraw.CreateSurface(SD);
-  // --- On Error GoTo 0
-
-  mSpriteWidth = Width / xSprites;
-  mSpriteHeight = Height / ySprites;
-  mXSpriteCount = xSprites;
-  mYSpriteCount = ySprites;
-  CreateAtSize = True;
-  return CreateAtSize;
-
-  // CreateAtSizeEH:
-  CreateAtSize = False;
-
-  return CreateAtSize;
-}
+  if (NoDisplayFlag)
+    return;
 
-void DDSpriteBuffer_Cls(int BackColor)
-{
-  RECT EmptyRect;
+  /* do not draw fields that are outside the visible screen area */
+  if (pX < sx1 || pX > sx2 || pY < sy1 || pY > sy2)
+    return;
 
-  Buffer.BltColorFill(EmptyRect, BackColor);
-}
+  sx = sx * TILESIZE_VAR / TILESIZE;
+  sy = sy * TILESIZE_VAR / TILESIZE;
 
-static void Blt(int pX, int pY, int SpriteX, int SpriteY)
-{
-  RECT DR, SR;
-#if 0
-  long Tmp;
-#endif
+  BlitBitmap(bitmap, bitmap_db_field_sp, SpriteX, SpriteY,
+            TILEX_VAR, TILEY_VAR, sx, sy);
 
-#if 0
-  printf("::: DDSpriteBuffer.c: Blt(): %d, %d\n", pX, pY);
-#endif
-
-  if (NoDisplayFlag)
-    return;
+  redraw[tile_x][tile_y] = TRUE;
+  redraw_tiles++;
 
+  if (move_x != tile_x)
   {
-    DR.left = pX + mDestXOff;
-    DR.top = pY + mDestYOff;
-    DR.right = pX + mSpriteWidth + mDestXOff;
-    DR.bottom = pY + mSpriteHeight + mDestYOff;
+    redraw[move_x][tile_y] = TRUE;
+    redraw_tiles++;
   }
+  else if (move_y != tile_y)
   {
-    SR.left = mSpriteWidth * (SpriteX - 1);
-    SR.top = mSpriteHeight * (SpriteY - 1);
-    SR.right = SR.left + mSpriteWidth;
-    SR.bottom = SR.top + mSpriteHeight;
+    redraw[tile_x][move_y] = TRUE;
+    redraw_tiles++;
   }
-
-#if 0
-  printf("::: DDSpriteBuffer.c: Blt(): %d, %d\n", DR.left, DR.top);
-#endif
-
-#if 0
-  if (pX == 0 * StretchWidth && pY == 0 * StretchWidth)
-    printf("::: TEST: drawing topleft corner ...\n");
-  if (pX == 59 * StretchWidth && pY == 23 * StretchWidth)
-    printf("::: TEST: drawing bottomright corner ...\n");
-#endif
-
-#if 1
-  BlitBitmap(sp_objects, screenBitmap,
-            SR.left, SR.top,
-            mSpriteWidth, mSpriteHeight,
-            DR.left, DR.top);
-#else
-  Tmp = mDest.Blt(DR, &Buffer, SR, DDBLT_WAIT);
-#endif
 }
 
-void DDSpriteBuffer_BltEx(int pX, int pY, int SpritePos)
+void DDSpriteBuffer_BltImg(int pX, int pY, int graphic, int sync_frame)
 {
-  int XPos, YPos;
+  struct GraphicInfo_SP g;
 
   if (NoDisplayFlag)
     return;
 
-  XPos = (SpritePos % mXSpriteCount) + 1;
-  YPos = (SpritePos / mXSpriteCount) + 1;
-  Blt(pX, pY, XPos, YPos);
-}
+  getGraphicSource_SP(&g, graphic, sync_frame, -1, -1);
 
-// Public Function GetStretchCopy(Stretch!) As DDSpriteBuffer
-// Dim SR As RECT, DR As RECT, Y%, X%, pX%, pY%, Tmp&
-// //  Set GetStretchCopy = New DDSpriteBuffer // (handle this later, if needed)
-//  If Not GetStretchCopy.CreateAtSize(Stretch * Width, Stretch * Height, mXSpriteCount, mYSpriteCount) Then
-//    Set GetStretchCopy = Nothing
-//  Else
-//    For Y = 0 To mYSpriteCount - 1
-//      pY = Y * Stretch * mSpriteHeight
-//      For X = 0 To mXSpriteCount - 1
-//        pX = X * Stretch * mSpriteWidth
-//        With DR
-//          .left = pX
-//          .top = pY
-//          .right = pX + mSpriteWidth * Stretch
-//          .bottom = pY + mSpriteHeight * Stretch
-//        End With
-//        With SR
-//          .left = mSpriteWidth * X
-//          .top = mSpriteHeight * Y
-//          .right = .left + mSpriteWidth
-//          .bottom = .top + mSpriteHeight
-//        End With
-//        Tmp = GetStretchCopy.Surface.Blt(DR, Buffer, SR, DDBLT_WAIT)
-//      Next X
-//    Next Y
-//    'GetStretchCopy.Surface.Blt DR, Buffer, DR, DDBLT_WAIT
-//  End If
-// End Function
-
-#if 0
-
-static void Class_Initialize()
-{
-  mDestXOff = 0;
-  mDestYOff = 0;
+  Blt(pX, pY, g.bitmap, g.src_x, g.src_y);
 }
-
-#endif