#include "mm_tools.h"
-void ClearWindow()
+void SetDrawtoField_MM(int mode)
+{
+ int full_xsize = lev_fieldx * TILESIZE_VAR;
+ int full_ysize = lev_fieldy * TILESIZE_VAR;
+
+ // distance (delta) from screen border (SX/SY) to centered level playfield
+ dSX = (full_xsize < SXSIZE ? (SXSIZE - full_xsize) / 2 : 0);
+ dSY = (full_ysize < SYSIZE ? (SYSIZE - full_ysize) / 2 : 0);
+
+ // for convenience, absolute screen position to centered level playfield
+ cSX = SX + dSX;
+ cSY = SY + dSY;
+ cSX2 = SX + dSX + 2; // including playfield border
+ cSY2 = SY + dSY + 2; // including playfield border
+
+ if (mode == DRAW_TO_BACKBUFFER)
+ {
+ cFX = FX + dSX;
+ cFY = FY + dSY;
+ }
+
+ SetTileCursorSXSY(cSX, cSY);
+}
+
+void ClearWindow(void)
{
ClearRectangle(backbuffer, REAL_SX, REAL_SY, FULL_SXSIZE, FULL_SYSIZE);
- SetDrawtoField(DRAW_BACKBUFFER);
+ SetDrawtoField(DRAW_TO_BACKBUFFER);
+ SetDrawtoField_MM(DRAW_TO_BACKBUFFER);
redraw_mask |= REDRAW_FIELD;
}
getGraphicSource(graphic, frame, &bitmap, &src_x, &src_y);
BlitBitmap(bitmap, drawto_field, src_x, src_y, TILEX, TILEY,
- FX + x * TILEX, FY + y * TILEY);
+ cFX + x * TILEX, cFY + y * TILEY);
}
void DrawGraphic_MM(int x, int y, int graphic)
}
#endif
- DrawGraphicExt_MM(drawto_field, FX + x*TILEX, FY + y*TILEY, graphic);
+ DrawGraphicExt_MM(drawto_field, cFX + x * TILEX, cFY + y * TILEY, graphic);
MarkTileDirty(x, y);
}
}
#endif
- DrawGraphicThruMaskExt_MM(drawto_field, FX + x * TILEX, FY + y * TILEY,
+ DrawGraphicThruMaskExt_MM(drawto_field, cFX + x * TILEX, cFY + y * TILEY,
graphic);
MarkTileDirty(x,y);
void DrawMiniGraphic_MM(int x, int y, int graphic)
{
- DrawMiniGraphicExt_MM(drawto, SX + x * MINI_TILEX, SY + y * MINI_TILEY,
+ DrawMiniGraphicExt_MM(drawto, cSX + x * MINI_TILEX, cSY + y * MINI_TILEY,
graphic);
MarkTileDirty(x / 2, y / 2);
src_x += cx;
src_y += cy;
- dest_x = FX + x * TILEX + dx;
- dest_y = FY + y * TILEY + dy;
+ dest_x = cFX + x * TILEX + dx;
+ dest_y = cFY + y * TILEY + dy;
#if DEBUG
if (!IN_SCR_FIELD(x,y))
DrawElement_MM(x, y, element);
}
-void DrawLevel_MM()
+void DrawLevel_MM(void)
{
int x,y;
getMiniGraphicSource(graphic, &bitmap, &gx, &gy);
- if (game_status != LEVELED || !editor.draw_walls_masked)
- DrawGraphic_MM(x, y, IMG_EMPTY);
+ DrawGraphic_MM(x, y, IMG_EMPTY);
/*
if (IS_WALL_WOOD(element) || IS_WALL_AMOEBA(element) ||
for (i = 0; i < 4; i++)
{
- int dest_x = SX + x * TILEX + MINI_TILEX * (i % 2);
- int dest_y = SY + y * TILEY + MINI_TILEY * (i / 2);
+ int dest_x = cSX + x * TILEX + MINI_TILEX * (i % 2);
+ int dest_y = cSY + y * TILEY + MINI_TILEY * (i / 2);
if (!((1 << i) & draw_mask))
continue;
if (element & (1 << i))
BlitBitmap(bitmap, drawto, gx, gy, MINI_TILEX, MINI_TILEY,
dest_x, dest_y);
- else if (!editor.draw_walls_masked)
+ else
ClearRectangle(drawto, dest_x, dest_y, MINI_TILEX, MINI_TILEY);
}
int frame;
Bitmap *bitmap;
int src_x, src_y;
- int dst_x = SX + x * TILEX + (i % 2) * MINI_TILEX;
- int dst_y = SY + y * TILEY + (i / 2) * MINI_TILEY;
+ int dst_x = cSX + x * TILEX + (i % 2) * MINI_TILEX;
+ int dst_y = cSY + y * TILEY + (i / 2) * MINI_TILEY;
if (bit_mask & (1 << i))
{
#endif
else if (element == EL_PACMAN)
DrawLevelField_MM(x, y);
+ else if (element == EL_FUSE_ON &&
+ laser.fuse_off &&
+ laser.fuse_x == x &&
+ laser.fuse_y == y)
+ DrawGraphic_MM(x, y, IMG_MM_FUSE);
else
DrawGraphic_MM(x, y, el2gfx(element));
}
}
}
-void RedrawPlayfield_MM()
+void RedrawPlayfield_MM(void)
{
DrawLevel_MM();
+ DrawLaser_MM();
}
void BlitScreenToBitmap_MM(Bitmap *target_bitmap)