-void getMiniGraphicSource(int graphic, Bitmap **bitmap, int *x, int *y)
-{
- if (graphic >= GFX_START_ROCKSELEMENTS && graphic <= GFX_END_ROCKSELEMENTS)
- {
- graphic -= GFX_START_ROCKSELEMENTS;
- *bitmap = pix[PIX_ELEMENTS];
- *x = MINI_GFX_STARTX + (graphic % MINI_GFX_PER_LINE) * MINI_TILEX;
- *y = MINI_GFX_STARTY + (graphic / MINI_GFX_PER_LINE) * MINI_TILEY;
- }
- else if (graphic >= GFX_START_ROCKSSP && graphic <= GFX_END_ROCKSSP)
- {
- graphic -= GFX_START_ROCKSSP;
- *bitmap = pix[PIX_SP];
- *x = MINI_SP_STARTX + (graphic % MINI_SP_PER_LINE) * MINI_TILEX;
- *y = MINI_SP_STARTY + (graphic / MINI_SP_PER_LINE) * MINI_TILEY;
- }
- else if (graphic >= GFX_START_ROCKSDC && graphic <= GFX_END_ROCKSDC)
- {
- graphic -= GFX_START_ROCKSDC;
- *bitmap = pix[PIX_DC];
- *x = MINI_DC_STARTX + (graphic % MINI_DC_PER_LINE) * MINI_TILEX;
- *y = MINI_DC_STARTY + (graphic / MINI_DC_PER_LINE) * MINI_TILEY;
- }
- else if (graphic >= GFX_START_ROCKSMORE && graphic <= GFX_END_ROCKSMORE)
- {
- graphic -= GFX_START_ROCKSMORE;
- *bitmap = pix[PIX_MORE];
- *x = MINI_MORE_STARTX + (graphic % MINI_MORE_PER_LINE) * MINI_TILEX;
- *y = MINI_MORE_STARTY + (graphic / MINI_MORE_PER_LINE) * MINI_TILEY;
- }
- else if (graphic >= GFX_START_ROCKSFONT && graphic <= GFX_END_ROCKSFONT)
- {
- graphic -= GFX_START_ROCKSFONT;
- *bitmap = pix[PIX_FONT_EM];
- *x = MINI_FONT_STARTX + (graphic % FONT_CHARS_PER_LINE) * FONT4_XSIZE;
- *y = MINI_FONT_STARTY + (graphic / FONT_CHARS_PER_LINE) * FONT4_YSIZE;
- }
- else
- {
- *bitmap = pix[PIX_SP];
- *x = MINI_SP_STARTX;
- *y = MINI_SP_STARTY;
- }
-}
-
-void DrawMiniGraphicExt(DrawBuffer *d, int x, int y, int graphic)
-{
- Bitmap *bitmap;
- int src_x, src_y;
-
- getMiniGraphicSource(graphic, &bitmap, &src_x, &src_y);
- BlitBitmap(bitmap, d, src_x, src_y, MINI_TILEX, MINI_TILEY, x, y);
-}
-
-void DrawGraphicShifted(int x,int y, int dx,int dy, int graphic,
- int cut_mode, int mask_mode)
-{
- int width = TILEX, height = TILEY;
- int cx = 0, cy = 0;
- int src_x, src_y, dest_x, dest_y;
- int tile = graphic;
- Bitmap *src_bitmap;
- GC drawing_gc;
-
- if (graphic < 0)
- {
- DrawGraphic(x, y, graphic);
- return;
- }
-
- if (dx || dy) /* Verschiebung der Grafik? */
- {
- if (x < BX1) /* Element kommt von links ins Bild */
- {
- x = BX1;
- width = dx;
- cx = TILEX - dx;
- dx = 0;
- }
- else if (x > BX2) /* Element kommt von rechts ins Bild */
- {
- x = BX2;
- width = -dx;
- dx = TILEX + dx;
- }
- else if (x==BX1 && dx < 0) /* Element verläßt links das Bild */
- {
- width += dx;
- cx = -dx;
- dx = 0;
- }
- else if (x==BX2 && dx > 0) /* Element verläßt rechts das Bild */
- width -= dx;
- else if (dx) /* allg. Bewegung in x-Richtung */
- MarkTileDirty(x + SIGN(dx), y);
-
- if (y < BY1) /* Element kommt von oben ins Bild */
- {
- if (cut_mode==CUT_BELOW) /* Element oberhalb des Bildes */
- return;
-
- y = BY1;
- height = dy;
- cy = TILEY - dy;
- dy = 0;
- }
- else if (y > BY2) /* Element kommt von unten ins Bild */
- {
- y = BY2;
- height = -dy;
- dy = TILEY + dy;
- }
- else if (y==BY1 && dy < 0) /* Element verläßt oben das Bild */
- {
- height += dy;
- cy = -dy;
- dy = 0;
- }
- else if (dy > 0 && cut_mode == CUT_ABOVE)
- {
- if (y == BY2) /* Element unterhalb des Bildes */
- return;
-
- height = dy;
- cy = TILEY - dy;
- dy = TILEY;
- MarkTileDirty(x, y + 1);
- } /* Element verläßt unten das Bild */
- else if (dy > 0 && (y == BY2 || cut_mode == CUT_BELOW))
- height -= dy;
- else if (dy) /* allg. Bewegung in y-Richtung */
- MarkTileDirty(x, y + SIGN(dy));
- }
-
- getGraphicSource(graphic, &src_bitmap, &src_x, &src_y);
- drawing_gc = src_bitmap->stored_clip_gc;
-
- src_x += cx;
- src_y += cy;
-
- dest_x = FX + x * TILEX + dx;
- dest_y = FY + y * TILEY + dy;
-
-#if DEBUG
- if (!IN_SCR_FIELD(x,y))
- {
- printf("DrawGraphicShifted(): x = %d, y = %d, graphic = %d\n",x,y,graphic);
- printf("DrawGraphicShifted(): This should never happen!\n");
- return;
- }
-#endif