#include "mm_tools.h"
-/* forward declaration for internal use */
-static int getGraphicAnimationPhase_MM(int, int, int);
-
void ClearWindow()
{
ClearRectangle(backbuffer, REAL_SX, REAL_SY, FULL_SXSIZE, FULL_SYSIZE);
redraw_mask |= REDRAW_FIELD;
}
-static int getGraphicAnimationPhase_MM(int frames, int delay, int mode)
-{
- int phase;
-
- if (mode == ANIM_PINGPONG)
- {
- int max_anim_frames = 2 * frames - 2;
- phase = (FrameCounter % (delay * max_anim_frames)) / delay;
- phase = (phase < frames ? phase : max_anim_frames - phase);
- }
- else
- phase = (FrameCounter % (delay * frames)) / delay;
-
- if (mode == ANIM_REVERSE)
- phase = -phase;
-
- return(phase);
-}
-
-void DrawGraphicAnimationExt_MM(int x, int y, int graphic,
- int frames, int delay, int mode, int mask_mode)
+void DrawGraphicAnimation_MM(int x, int y, int graphic, int frame)
{
- int phase = getGraphicAnimationPhase_MM(frames, delay, mode);
-
- if (!(FrameCounter % delay) && IN_SCR_FIELD(SCREENX(x), SCREENY(y)))
- {
- if (mask_mode == USE_MASKING)
- DrawGraphicThruMask_MM(SCREENX(x), SCREENY(y), graphic + phase);
- else
- DrawGraphic_MM(SCREENX(x), SCREENY(y), graphic + phase);
- }
-}
+ Bitmap *bitmap;
+ int src_x, src_y;
-void DrawGraphicAnimation_MM(int x, int y, int graphic,
- int frames, int delay, int mode)
-{
- DrawGraphicAnimationExt_MM(x, y, graphic, frames, delay, mode, NO_MASKING);
-}
+ getGraphicSource(graphic, frame, &bitmap, &src_x, &src_y);
-void DrawGraphicAnimationThruMask_MM(int x, int y, int graphic,
- int frames, int delay, int mode)
-{
- DrawGraphicAnimationExt_MM(x, y, graphic, frames, delay, mode, USE_MASKING);
+ BlitBitmap(bitmap, drawto_field, src_x, src_y, TILEX, TILEY,
+ FX + x * TILEX, FY + y * TILEY);
}
void DrawGraphic_MM(int x, int y, int graphic)
#endif
DrawGraphicExt_MM(drawto_field, FX + x*TILEX, FY + y*TILEY, graphic);
+
MarkTileDirty(x, y);
}
int src_x, src_y;
getGraphicSource(graphic, 0, &bitmap, &src_x, &src_y);
+
BlitBitmap(bitmap, d, src_x, src_y, TILEX, TILEY, x, y);
}
}
#endif
- DrawGraphicThruMaskExt_MM(drawto_field, FX + x*TILEX, FY + y*TILEY, graphic);
+ DrawGraphicThruMaskExt_MM(drawto_field, FX + x * TILEX, FY + 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, graphic);
- MarkTileDirty(x/2, y/2);
+ DrawMiniGraphicExt_MM(drawto, SX + x * MINI_TILEX, SY + y * MINI_TILEY,
+ graphic);
+
+ MarkTileDirty(x / 2, y / 2);
}
void getMicroGraphicSource(int graphic, Bitmap **bitmap, int *x, int *y)
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);
}
if (graphic < 0)
{
DrawGraphic_MM(x, y, graphic);
+
return;
}
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, 0, &src_bitmap, &src_x, &src_y);
#endif
if (mask_mode == USE_MASKING)
- {
BlitBitmapMasked(src_bitmap, drawto_field,
src_x, src_y, TILEX, TILEY, dest_x, dest_y);
- }
else
BlitBitmap(src_bitmap, drawto_field,
src_x, src_y, width, height, dest_x, dest_y);
void DrawGraphicShiftedThruMask_MM(int x,int y, int dx,int dy, int graphic,
int cut_mode)
{
- DrawGraphicShifted_MM(x,y, dx,dy, graphic, cut_mode, USE_MASKING);
+ DrawGraphicShifted_MM(x, y, dx, dy, graphic, cut_mode, USE_MASKING);
}
void DrawScreenElementExt_MM(int x, int y, int dx, int dy, int element,
if (element == EL_PACMAN)
{
- graphic += 4 * !phase2;
+ graphic = (phase2 ? IMG_MM_PACMAN_RIGHT : IMG_MM_PACMAN_EATING_RIGHT);
if (dir == MV_UP)
graphic += 1;
int horiz_move;
Blocked2Moving(x, y, &oldx, &oldy);
+
sx = SCREENX(oldx);
sy = SCREENY(oldy);
horiz_move = (MovDir[oldx][oldy] == MV_LEFT ||
MovDir[oldx][oldy] == MV_RIGHT);
DrawScreenElement_MM(x, y, EL_EMPTY);
+
element = Feld[oldx][oldy];
if (horiz_move)
- DrawScreenElementShifted_MM(sx,sy, MovPos[oldx][oldy],0,element,NO_CUTTING);
+ DrawScreenElementShifted_MM(sx, sy, MovPos[oldx][oldy], 0, element,
+ NO_CUTTING);
else
- DrawScreenElementShifted_MM(sx,sy, 0,MovPos[oldx][oldy],element,NO_CUTTING);
+ DrawScreenElementShifted_MM(sx, sy, 0, MovPos[oldx][oldy], element,
+ NO_CUTTING);
}
else if (IS_DRAWABLE(element))
+ {
DrawScreenElement_MM(x, y, element);
+ }
else
+ {
DrawScreenElement_MM(x, y, EL_EMPTY);
+ }
}
void DrawLevelField_MM(int x, int y)
if (!element)
{
DrawMiniGraphic_MM(x, y, IMG_EMPTY);
+
return;
}
graphic = el2gfx(element);
+
DrawMiniGraphic_MM(x, y, graphic);
}
ClearWindow();
- for (x=0; x<lev_fieldx; x++)
- for (y=0; y<lev_fieldy; y++)
+ for (x = 0; x < lev_fieldx; x++)
+ for (y = 0; y < lev_fieldy; y++)
DrawField_MM(x, y);
redraw_mask |= REDRAW_FIELD;
gy += MINI_TILEY;
*/
- for(i=0; i<4; i++)
+ 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);
frame = 0;
}
- getGraphicSource(graphic, frame, &bitmap, &src_x, &src_y);
+ getSizedGraphicSource(graphic, frame, MINI_TILESIZE, &bitmap,
+ &src_x, &src_y);
BlitBitmap(bitmap, drawto, src_x, src_y, MINI_TILEX, MINI_TILEY,
dst_x, dst_y);
getMicroGraphicSource(graphic, &bitmap, &gx, &gy);
- for (i=0; i<4; i++)
+ for (i = 0; i < 4; i++)
{
int xpos = MICROLEV_XPOS + x * MICRO_TILEX + MICRO_WALLX * (i % 2);
int ypos = MICROLEV_YPOS + y * MICRO_TILEY + MICRO_WALLY * (i / 2);
if (IS_WALL(element))
{
DrawMicroWalls_MM(x, y, element);
+
return;
}
void DrawMicroLevelExt_MM(int xpos, int ypos)
{
- int x,y;
+ int x, y;
ClearRectangle(drawto, xpos, ypos, MICROLEV_XSIZE, MICROLEV_YSIZE);
- for (x=0; x<STD_LEV_FIELDX; x++)
- for (y=0; y<STD_LEV_FIELDY; y++)
+ for (x = 0; x < STD_LEV_FIELDX; x++)
+ for (y = 0; y < STD_LEV_FIELDY; y++)
DrawMicroElement_MM(x, y, Ur[x][y]);
redraw_mask |= REDRAW_FIELD;
void DrawMiniLevel_MM(int size_x, int size_y, int scroll_x, int scroll_y)
{
- int x,y;
+ int x, y;
- for(x=0; x<size_x; x++)
- for(y=0; y<size_y; y++)
+ for(x = 0; x < size_x; x++)
+ for(y = 0; y < size_y; y++)
DrawMiniElementOrWall_MM(x, y, scroll_x, scroll_y);
redraw_mask |= REDRAW_FIELD;
int REQ_in_range(int x, int y)
{
- if (y > DY+249 && y < DY+278)
+ if (y > DY + 249 && y < DY + 278)
{
- if (x > DX+1 && x < DX+48)
+ if (x > DX + 1 && x < DX + 48)
return 1;
- else if (x > DX+51 && x < DX+98)
+ else if (x > DX + 51 && x < DX + 98)
return 2;
}
+
return 0;
}
return base_element + (element_phase + step + num_elements) % num_elements;
}
+static int map_element(int element)
+{
+ switch (element)
+ {
+ case EL_WALL_STEEL: return EL_STEEL_WALL;
+ case EL_WALL_WOOD: return EL_WOODEN_WALL;
+ case EL_WALL_ICE: return EL_ICE_WALL;
+ case EL_WALL_AMOEBA: return EL_AMOEBA_WALL;
+ case EL_DF_WALL_STEEL: return EL_DF_STEEL_WALL;
+ case EL_DF_WALL_WOOD: return EL_DF_WOODEN_WALL;
+
+ default: return element;
+ }
+}
+
int el2gfx(int element)
{
+ element = map_element(element);
+
switch (element)
{
case EL_LIGHTBALL: