rnd-20070302-1-src
[rocksndiamonds.git] / src / game_em / graphics.c
index 21ca0964ec8bfbeebc4bc190137ee2db6f07710d..fed6bcdf4616603627200a27f6f1f23bb279726f 100644 (file)
@@ -148,6 +148,12 @@ static void DrawLevelField_EM(int x, int y, int sx, int sy,
 {
   int tile = Draw[y][x];
   struct GraphicInfo_EM *g = &graphic_info_em_object[tile][frame];
+
+#if 1
+  getGraphicSourceObjectExt_EM(tile, frame, &g->bitmap, &g->src_x, &g->src_y,
+                              x - 2, y - 2);
+#endif
+
   int src_x = g->src_x + g->src_offset_x;
   int src_y = g->src_y + g->src_offset_y;
   int dst_x = sx * TILEX + g->dst_offset_x;
@@ -248,6 +254,11 @@ static void DrawLevelPlayer_EM(int x1, int y1, int player_nr, int anim,
 {
   struct GraphicInfo_EM *g = &graphic_info_em_player[player_nr][anim][frame];
 
+#if 1
+  getGraphicSourcePlayerExt_EM(player_nr, anim, frame,
+                              &g->bitmap, &g->src_x, &g->src_y);
+#endif
+
   int src_x = g->src_x, src_y = g->src_y;
   int dst_x, dst_y;
 
@@ -357,7 +368,7 @@ static void animscreen(void)
       }
 
       /* only redraw screen tiles if they (or their crumbled state) changed */
-      if (screentiles[sy][sx] != obj || crumbled_state[sy][sx] != crm)
+      // if (screentiles[sy][sx] != obj || crumbled_state[sy][sx] != crm)
       {
        DrawLevelField_EM(x, y, sx, sy, FALSE);
        DrawLevelFieldCrumbled_EM(x, y, sx, sy, crm, FALSE);
@@ -452,9 +463,14 @@ static void blitplayer(struct PLAYER *ply)
       DrawLevelField_EM(new_x, new_y, new_sx, new_sy, TRUE);
     }
 
-    /* mark screen tiles as dirty */
+    /* redraw screen tiles in the next frame (player may have left the tiles) */
     screentiles[old_sy][old_sx] = -1;
     screentiles[new_sy][new_sx] = -1;
+
+    /* mark screen tiles as dirty (force screen refresh with changed content) */
+    redraw[old_sx][old_sy] = TRUE;
+    redraw[new_sx][new_sy] = TRUE;
+    redraw_tiles += 2;
   }
 }