projects
/
rocksndiamonds.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
added using variable for screen positions in input setup menu
[rocksndiamonds.git]
/
src
/
game_mm
/
mm_tools.c
diff --git
a/src/game_mm/mm_tools.c
b/src/game_mm/mm_tools.c
index e037aac9cc838af2da1f0ecc7be98e3c16a92795..a5cd79da35f90ab3ae9a0eeaa33597df57982459 100644
(file)
--- a/
src/game_mm/mm_tools.c
+++ b/
src/game_mm/mm_tools.c
@@
-17,61
+17,49
@@
#include "mm_tools.h"
#include "mm_tools.h"
-/* forward declaration for internal use */
-static int getGraphicAnimationPhase_MM(int, int, int);
-
-void ClearWindow()
+void SetDrawtoField_MM(int mode)
{
{
- ClearRectangle(backbuffer, REAL_SX, REAL_SY, FULL_SXSIZE, FULL_SYSIZE);
+ int full_xsize = lev_fieldx * TILESIZE_VAR;
+ int full_ysize = lev_fieldy * TILESIZE_VAR;
- SetDrawtoField(DRAW_BACKBUFFER);
+ // 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);
- redraw_mask |= REDRAW_FIELD;
-}
-
-static int getGraphicAnimationPhase_MM(int frames, int delay, int mode)
-{
- int phase;
+ // 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 ==
ANIM_PINGPONG
)
+ if (mode ==
DRAW_TO_BACKBUFFER
)
{
{
- int max_anim_frames = 2 * frames - 2;
- phase = (FrameCounter % (delay * max_anim_frames)) / delay;
- phase = (phase < frames ? phase : max_anim_frames - phase);
+ cFX = FX + dSX;
+ cFY = FY + dSY;
}
}
- else
- phase = (FrameCounter % (delay * frames)) / delay;
-
- if (mode == ANIM_REVERSE)
- phase = -phase;
-
return(phase
);
+
SetTileCursorSXSY(cSX, cSY
);
}
}
-void DrawGraphicAnimationExt_MM(int x, int y, int graphic,
- int frames, int delay, int mode, int mask_mode)
+void ClearWindow()
{
{
-
int phase = getGraphicAnimationPhase_MM(frames, delay, mode
);
+
ClearRectangle(backbuffer, REAL_SX, REAL_SY, FULL_SXSIZE, FULL_SYSIZE
);
- 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);
- }
-}
+ SetDrawtoField(DRAW_TO_BACKBUFFER);
+ SetDrawtoField_MM(DRAW_TO_BACKBUFFER);
-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);
+ redraw_mask |= REDRAW_FIELD;
}
}
-void DrawGraphicAnimationThruMask_MM(int x, int y, int graphic,
- int frames, int delay, int mode)
+void DrawGraphicAnimation_MM(int x, int y, int graphic, int frame)
{
{
- DrawGraphicAnimationExt_MM(x, y, graphic, frames, delay, mode, USE_MASKING);
+ Bitmap *bitmap;
+ int src_x, src_y;
+
+ getGraphicSource(graphic, frame, &bitmap, &src_x, &src_y);
+
+ BlitBitmap(bitmap, drawto_field, src_x, src_y, TILEX, TILEY,
+ cFX + x * TILEX, cFY + y * TILEY);
}
void DrawGraphic_MM(int x, int y, int graphic)
}
void DrawGraphic_MM(int x, int y, int graphic)
@@
-85,7
+73,8
@@
void DrawGraphic_MM(int x, int y, int graphic)
}
#endif
}
#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);
}
MarkTileDirty(x, y);
}
@@
-95,6
+84,7
@@
void DrawGraphicExt_MM(DrawBuffer *d, int x, int y, int graphic)
int src_x, src_y;
getGraphicSource(graphic, 0, &bitmap, &src_x, &src_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);
}
BlitBitmap(bitmap, d, src_x, src_y, TILEX, TILEY, x, y);
}
@@
-109,7
+99,9
@@
void DrawGraphicThruMask_MM(int x, int y, int graphic)
}
#endif
}
#endif
- DrawGraphicThruMaskExt_MM(drawto_field, FX + x*TILEX, FY + y*TILEY, graphic);
+ DrawGraphicThruMaskExt_MM(drawto_field, cFX + x * TILEX, cFY + y * TILEY,
+ graphic);
+
MarkTileDirty(x,y);
}
MarkTileDirty(x,y);
}
@@
-129,8
+121,10
@@
void DrawGraphicThruMaskExt_MM(DrawBuffer *d, int dest_x, int dest_y,
void DrawMiniGraphic_MM(int x, int y, int graphic)
{
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, cSX + x * MINI_TILEX, cSY + y * MINI_TILEY,
+ graphic);
+
+ MarkTileDirty(x / 2, y / 2);
}
void getMicroGraphicSource(int graphic, Bitmap **bitmap, int *x, int *y)
}
void getMicroGraphicSource(int graphic, Bitmap **bitmap, int *x, int *y)
@@
-144,6
+138,7
@@
void DrawMiniGraphicExt_MM(DrawBuffer *d, int x, int y, int graphic)
int src_x, src_y;
getMiniGraphicSource(graphic, &bitmap, &src_x, &src_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);
}
BlitBitmap(bitmap, d, src_x, src_y, MINI_TILEX, MINI_TILEY, x, y);
}
@@
-158,6
+153,7
@@
void DrawGraphicShifted_MM(int x,int y, int dx,int dy, int graphic,
if (graphic < 0)
{
DrawGraphic_MM(x, y, graphic);
if (graphic < 0)
{
DrawGraphic_MM(x, y, graphic);
+
return;
}
return;
}
@@
-220,9
+216,13
@@
void DrawGraphicShifted_MM(int x,int y, int dx,int dy, int graphic,
MarkTileDirty(x, y + 1);
} /* Element verläßt unten das Bild */
else if (dy > 0 && (y == BY2 || cut_mode == CUT_BELOW))
MarkTileDirty(x, y + 1);
} /* Element verläßt unten das Bild */
else if (dy > 0 && (y == BY2 || cut_mode == CUT_BELOW))
+ {
height -= dy;
height -= dy;
+ }
else if (dy) /* allg. Bewegung in y-Richtung */
else if (dy) /* allg. Bewegung in y-Richtung */
+ {
MarkTileDirty(x, y + SIGN(dy));
MarkTileDirty(x, y + SIGN(dy));
+ }
}
getGraphicSource(graphic, 0, &src_bitmap, &src_x, &src_y);
}
getGraphicSource(graphic, 0, &src_bitmap, &src_x, &src_y);
@@
-230,8
+230,8
@@
void DrawGraphicShifted_MM(int x,int y, int dx,int dy, int graphic,
src_x += cx;
src_y += cy;
src_x += cx;
src_y += cy;
- dest_x = FX + x * TILEX + dx;
- dest_y = FY + y * TILEY + dy;
+ dest_x =
c
FX + x * TILEX + dx;
+ dest_y =
c
FY + y * TILEY + dy;
#if DEBUG
if (!IN_SCR_FIELD(x,y))
#if DEBUG
if (!IN_SCR_FIELD(x,y))
@@
-243,10
+243,8
@@
void DrawGraphicShifted_MM(int x,int y, int dx,int dy, int graphic,
#endif
if (mask_mode == USE_MASKING)
#endif
if (mask_mode == USE_MASKING)
- {
BlitBitmapMasked(src_bitmap, drawto_field,
src_x, src_y, TILEX, TILEY, dest_x, dest_y);
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);
else
BlitBitmap(src_bitmap, drawto_field,
src_x, src_y, width, height, dest_x, dest_y);
@@
-257,7
+255,7
@@
void DrawGraphicShifted_MM(int x,int y, int dx,int dy, int graphic,
void DrawGraphicShiftedThruMask_MM(int x,int y, int dx,int dy, int graphic,
int cut_mode)
{
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,
}
void DrawScreenElementExt_MM(int x, int y, int dx, int dy, int element,
@@
-360,23
+358,31
@@
void DrawScreenField_MM(int x, int y)
int horiz_move;
Blocked2Moving(x, y, &oldx, &oldy);
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);
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)
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
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))
}
else if (IS_DRAWABLE(element))
+ {
DrawScreenElement_MM(x, y, element);
DrawScreenElement_MM(x, y, element);
+ }
else
else
+ {
DrawScreenElement_MM(x, y, EL_EMPTY);
DrawScreenElement_MM(x, y, EL_EMPTY);
+ }
}
void DrawLevelField_MM(int x, int y)
}
void DrawLevelField_MM(int x, int y)
@@
-391,10
+397,12
@@
void DrawMiniElement_MM(int x, int y, int element)
if (!element)
{
DrawMiniGraphic_MM(x, y, IMG_EMPTY);
if (!element)
{
DrawMiniGraphic_MM(x, y, IMG_EMPTY);
+
return;
}
graphic = el2gfx(element);
return;
}
graphic = el2gfx(element);
+
DrawMiniGraphic_MM(x, y, graphic);
}
DrawMiniGraphic_MM(x, y, graphic);
}
@@
-421,8
+429,8
@@
void DrawLevel_MM()
ClearWindow();
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;
DrawField_MM(x, y);
redraw_mask |= REDRAW_FIELD;
@@
-437,8
+445,7
@@
void DrawWallsExt_MM(int x, int y, int element, int draw_mask)
getMiniGraphicSource(graphic, &bitmap, &gx, &gy);
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) ||
/*
if (IS_WALL_WOOD(element) || IS_WALL_AMOEBA(element) ||
@@
-448,10
+455,10
@@
void DrawWallsExt_MM(int x, int y, int element, int draw_mask)
gy += MINI_TILEY;
*/
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);
+ int dest_x =
c
SX + x * TILEX + MINI_TILEX * (i % 2);
+ int dest_y =
c
SY + y * TILEY + MINI_TILEY * (i / 2);
if (!((1 << i) & draw_mask))
continue;
if (!((1 << i) & draw_mask))
continue;
@@
-459,7
+466,7
@@
void DrawWallsExt_MM(int x, int y, int element, int draw_mask)
if (element & (1 << i))
BlitBitmap(bitmap, drawto, gx, gy, MINI_TILEX, MINI_TILEY,
dest_x, dest_y);
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);
}
ClearRectangle(drawto, dest_x, dest_y, MINI_TILEX, MINI_TILEY);
}
@@
-490,8
+497,8
@@
void DrawWallsAnimation_MM(int x, int y, int element, int phase, int bit_mask)
int frame;
Bitmap *bitmap;
int src_x, src_y;
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 =
c
SX + x * TILEX + (i % 2) * MINI_TILEX;
+ int dst_y =
c
SY + y * TILEY + (i / 2) * MINI_TILEY;
if (bit_mask & (1 << i))
{
if (bit_mask & (1 << i))
{
@@
-535,6
+542,11
@@
void DrawElement_MM(int x, int y, int element)
#endif
else if (element == EL_PACMAN)
DrawLevelField_MM(x, y);
#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));
}
else
DrawGraphic_MM(x, y, el2gfx(element));
}
@@
-548,7
+560,7
@@
void DrawMicroWalls_MM(int x, int y, int element)
getMicroGraphicSource(graphic, &bitmap, &gx, &gy);
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);
{
int xpos = MICROLEV_XPOS + x * MICRO_TILEX + MICRO_WALLX * (i % 2);
int ypos = MICROLEV_YPOS + y * MICRO_TILEY + MICRO_WALLY * (i / 2);
@@
-572,6
+584,7
@@
void DrawMicroElement_MM(int x, int y, int element)
if (IS_WALL(element))
{
DrawMicroWalls_MM(x, y, element);
if (IS_WALL(element))
{
DrawMicroWalls_MM(x, y, element);
+
return;
}
return;
}
@@
-583,12
+596,12
@@
void DrawMicroElement_MM(int x, int y, int element)
void DrawMicroLevelExt_MM(int xpos, int ypos)
{
void DrawMicroLevelExt_MM(int xpos, int ypos)
{
- int x,y;
+ int x,
y;
ClearRectangle(drawto, xpos, ypos, MICROLEV_XSIZE, MICROLEV_YSIZE);
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;
DrawMicroElement_MM(x, y, Ur[x][y]);
redraw_mask |= REDRAW_FIELD;
@@
-596,10
+609,10
@@
void DrawMicroLevelExt_MM(int xpos, int ypos)
void DrawMiniLevel_MM(int size_x, int size_y, int scroll_x, int scroll_y)
{
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;
DrawMiniElementOrWall_MM(x, y, scroll_x, scroll_y);
redraw_mask |= REDRAW_FIELD;
@@
-607,13
+620,14
@@
void DrawMiniLevel_MM(int size_x, int size_y, int scroll_x, int scroll_y)
int REQ_in_range(int x, int y)
{
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;
return 1;
- else if (x > DX
+51 && x < DX+
98)
+ else if (x > DX
+ 51 && x < DX +
98)
return 2;
}
return 2;
}
+
return 0;
}
return 0;
}
@@
-755,6
+769,7
@@
int el2gfx(int element)
void RedrawPlayfield_MM()
{
DrawLevel_MM();
void RedrawPlayfield_MM()
{
DrawLevel_MM();
+ DrawLaser_MM();
}
void BlitScreenToBitmap_MM(Bitmap *target_bitmap)
}
void BlitScreenToBitmap_MM(Bitmap *target_bitmap)