projects
/
rocksndiamonds.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
rnd-20070316-1-src
[rocksndiamonds.git]
/
src
/
game_em
/
graphics.c
diff --git
a/src/game_em/graphics.c
b/src/game_em/graphics.c
index 800ee03faaf8de2a6022b7f3cb5440c36492a99f..b443991d9e726d4e34cc38cbea9bbad15fe1631a 100644
(file)
--- a/
src/game_em/graphics.c
+++ b/
src/game_em/graphics.c
@@
-27,6
+27,7
@@
(8 - frame) * ply[p].y) * TILEY / 8 \
- ((SCR_FIELDY - 1) * TILEY) / 2)
(8 - frame) * ply[p].y) * TILEY / 8 \
- ((SCR_FIELDY - 1) * TILEY) / 2)
+#define USE_EXTENDED_GRAPHICS_ENGINE 0
int frame; /* current screen frame */
int screen_x; /* current scroll position */
int frame; /* current screen frame */
int screen_x; /* current scroll position */
@@
-93,7
+94,7
@@
void BlitScreenToBitmap_EM(Bitmap *target_bitmap)
}
}
}
}
-void
blitscreen
(void)
+void
BackToFront_EM
(void)
{
static boolean scrolling_last = FALSE;
int left = screen_x / TILEX;
{
static boolean scrolling_last = FALSE;
int left = screen_x / TILEX;
@@
-101,6
+102,8
@@
void blitscreen(void)
boolean scrolling = (screen_x % TILEX != 0 || screen_y % TILEY != 0);
int x, y;
boolean scrolling = (screen_x % TILEX != 0 || screen_y % TILEY != 0);
int x, y;
+ SyncDisplay();
+
if (redraw_tiles > REDRAWTILES_THRESHOLD || scrolling || scrolling_last)
{
/* blit all (up to four) parts of the scroll buffer to the backbuffer */
if (redraw_tiles > REDRAWTILES_THRESHOLD || scrolling || scrolling_last)
{
/* blit all (up to four) parts of the scroll buffer to the backbuffer */
@@
-126,6
+129,8
@@
void blitscreen(void)
}
}
}
}
+ FlushDisplay();
+
for (x = 0; x < MAX_BUF_XSIZE; x++)
for (y = 0; y < MAX_BUF_YSIZE; y++)
redraw[x][y] = FALSE;
for (x = 0; x < MAX_BUF_XSIZE; x++)
for (y = 0; y < MAX_BUF_YSIZE; y++)
redraw[x][y] = FALSE;
@@
-134,11
+139,22
@@
void blitscreen(void)
scrolling_last = scrolling;
}
scrolling_last = scrolling;
}
+void blitscreen(void)
+{
+ BackToFront_EM();
+}
+
static void DrawLevelField_EM(int x, int y, int sx, int sy,
boolean draw_masked)
{
int tile = Draw[y][x];
struct GraphicInfo_EM *g = &graphic_info_em_object[tile][frame];
static void DrawLevelField_EM(int x, int y, int sx, int sy,
boolean draw_masked)
{
int tile = Draw[y][x];
struct GraphicInfo_EM *g = &graphic_info_em_object[tile][frame];
+
+#if USE_EXTENDED_GRAPHICS_ENGINE
+ 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;
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;
@@
-239,6
+255,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];
{
struct GraphicInfo_EM *g = &graphic_info_em_player[player_nr][anim][frame];
+#if USE_EXTENDED_GRAPHICS_ENGINE
+ 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;
int src_x = g->src_x, src_y = g->src_y;
int dst_x, dst_y;
@@
-348,7
+369,11
@@
static void animscreen(void)
}
/* only redraw screen tiles if they (or their crumbled state) changed */
}
/* only redraw screen tiles if they (or their crumbled state) changed */
+#if USE_EXTENDED_GRAPHICS_ENGINE
+ // if (screentiles[sy][sx] != obj || crumbled_state[sy][sx] != crm)
+#else
if (screentiles[sy][sx] != obj || crumbled_state[sy][sx] != crm)
if (screentiles[sy][sx] != obj || crumbled_state[sy][sx] != crm)
+#endif
{
DrawLevelField_EM(x, y, sx, sy, FALSE);
DrawLevelFieldCrumbled_EM(x, y, sx, sy, crm, FALSE);
{
DrawLevelField_EM(x, y, sx, sy, FALSE);
DrawLevelFieldCrumbled_EM(x, y, sx, sy, crm, FALSE);
@@
-443,9
+468,14
@@
static void blitplayer(struct PLAYER *ply)
DrawLevelField_EM(new_x, new_y, new_sx, new_sy, TRUE);
}
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;
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;
}
}
}
}
@@
-869,14
+899,16
@@
void RedrawPlayfield_EM(boolean force_redraw)
blitplayer(&ply[i]);
blitscreen();
blitplayer(&ply[i]);
blitscreen();
- FlushDisplay();
+
Delay(wait_delay_value);
/* scroll second step to align at full tile size */
screen_x -= dxx;
screen_y -= dyy;
Delay(wait_delay_value);
/* scroll second step to align at full tile size */
screen_x -= dxx;
screen_y -= dyy;
+#if 0
SyncDisplay();
SyncDisplay();
+#endif
animscreen();
animscreen();
@@
-884,7
+916,7
@@
void RedrawPlayfield_EM(boolean force_redraw)
blitplayer(&ply[i]);
blitscreen();
blitplayer(&ply[i]);
blitscreen();
- FlushDisplay();
+
Delay(wait_delay_value);
}
Delay(wait_delay_value);
}
@@
-1028,12
+1060,12
@@
void RedrawPlayfield_EM(boolean force_redraw)
for (i = 0; i < MAX_PLAYERS; i++)
blitplayer(&ply[i]);
for (i = 0; i < MAX_PLAYERS; i++)
blitplayer(&ply[i]);
+#if 0
#if 0
SyncDisplay();
#if 0
SyncDisplay();
+#endif
blitscreen();
blitscreen();
-
- FlushDisplay();
#endif
}
#endif
}