X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Fgame_mm%2Fmm_tools.c;h=8a9de52af4d253e5f5e06de13bb4a2ee7175ad20;hp=e037aac9cc838af2da1f0ecc7be98e3c16a92795;hb=95f91d5fb8835feb5b461b97607b1730baaf699b;hpb=8b8ea53b13db11272139e2bd2fa62877ff0d32ec diff --git a/src/game_mm/mm_tools.c b/src/game_mm/mm_tools.c index e037aac9..8a9de52a 100644 --- a/src/game_mm/mm_tools.c +++ b/src/game_mm/mm_tools.c @@ -17,9 +17,6 @@ #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); @@ -29,49 +26,15 @@ void ClearWindow() 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) @@ -86,6 +49,7 @@ void DrawGraphic_MM(int x, int y, int graphic) #endif DrawGraphicExt_MM(drawto_field, FX + x*TILEX, FY + y*TILEY, graphic); + MarkTileDirty(x, y); } @@ -95,6 +59,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); + BlitBitmap(bitmap, d, src_x, src_y, TILEX, TILEY, x, y); } @@ -109,7 +74,9 @@ void DrawGraphicThruMask_MM(int x, int y, int graphic) } #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); } @@ -129,8 +96,10 @@ void DrawGraphicThruMaskExt_MM(DrawBuffer *d, int dest_x, int dest_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) @@ -144,6 +113,7 @@ void DrawMiniGraphicExt_MM(DrawBuffer *d, int x, int y, int graphic) 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); } @@ -158,6 +128,7 @@ void DrawGraphicShifted_MM(int x,int y, int dx,int dy, int graphic, if (graphic < 0) { DrawGraphic_MM(x, y, graphic); + return; } @@ -220,9 +191,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)) + { height -= dy; + } else if (dy) /* allg. Bewegung in y-Richtung */ + { MarkTileDirty(x, y + SIGN(dy)); + } } getGraphicSource(graphic, 0, &src_bitmap, &src_x, &src_y); @@ -243,10 +218,8 @@ void DrawGraphicShifted_MM(int x,int y, int dx,int dy, int graphic, #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); @@ -257,7 +230,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) { - 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, @@ -360,23 +333,31 @@ void DrawScreenField_MM(int x, int y) 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) @@ -391,10 +372,12 @@ void DrawMiniElement_MM(int x, int y, int element) if (!element) { DrawMiniGraphic_MM(x, y, IMG_EMPTY); + return; } graphic = el2gfx(element); + DrawMiniGraphic_MM(x, y, graphic); } @@ -421,8 +404,8 @@ void DrawLevel_MM() ClearWindow(); - for (x=0; x 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; } @@ -755,6 +739,7 @@ int el2gfx(int element) void RedrawPlayfield_MM() { DrawLevel_MM(); + DrawLaser_MM(); } void BlitScreenToBitmap_MM(Bitmap *target_bitmap)