printf(" MovDir: %d\n", MovDir[x][y]);
printf(" MovDelay: %d\n", MovDelay[x][y]);
printf(" ChangeDelay: %d\n", ChangeDelay[x][y]);
+ printf(" Count: %d\n", Count[x][y]);
printf(" GfxElement: %d\n", GfxElement[x][y]);
printf(" GfxAction: %d\n", GfxAction[x][y]);
printf(" GfxFrame: %d\n", GfxFrame[x][y]);
{
BlitBitmap(buffer, window, fx, fy, SXSIZE, SYSIZE, SX, SY);
-#ifdef DEBUG
#if 0
+#ifdef DEBUG
printf("redrawing all (ScreenGfxPos == %d) because %s\n",
ScreenGfxPos,
(setup.soft_scrolling ?
BlitBitmap(backbuffer, window, DX, DY, DXSIZE, DYSIZE, DX, DY);
if (redraw_mask & REDRAW_DOOR_2)
- {
-#if 0
- if ((redraw_mask & REDRAW_DOOR_2) == REDRAW_DOOR_2)
-#endif
- BlitBitmap(backbuffer, window, VX, VY, VXSIZE, VYSIZE, VX, VY);
-#if 0
- else
- {
- if (redraw_mask & REDRAW_VIDEO_1)
- BlitBitmap(backbuffer, window,
- VX + VIDEO_DISPLAY1_XPOS, VY + VIDEO_DISPLAY1_YPOS,
- VIDEO_DISPLAY_XSIZE, VIDEO_DISPLAY_YSIZE,
- VX + VIDEO_DISPLAY1_XPOS, VY + VIDEO_DISPLAY1_YPOS);
- if (redraw_mask & REDRAW_VIDEO_2)
- BlitBitmap(backbuffer, window,
- VX + VIDEO_DISPLAY2_XPOS, VY + VIDEO_DISPLAY2_YPOS,
- VIDEO_DISPLAY_XSIZE, VIDEO_DISPLAY_YSIZE,
- VX + VIDEO_DISPLAY2_XPOS, VY + VIDEO_DISPLAY2_YPOS);
- if (redraw_mask & REDRAW_VIDEO_3)
- BlitBitmap(backbuffer, window,
- VX + VIDEO_CONTROL_XPOS, VY + VIDEO_CONTROL_YPOS,
- VIDEO_CONTROL_XSIZE, VIDEO_CONTROL_YSIZE,
- VX + VIDEO_CONTROL_XPOS, VY + VIDEO_CONTROL_YPOS);
- }
-#endif
- }
+ BlitBitmap(backbuffer, window, VX, VY, VXSIZE, VYSIZE, VX, VY);
if (redraw_mask & REDRAW_DOOR_3)
BlitBitmap(backbuffer, window, EX, EY, EXSIZE, EYSIZE, EX, EY);
BackToFront();
}
+void SetMainBackgroundImageIfDefined(int graphic)
+{
+ if (graphic_info[graphic].bitmap)
+ SetMainBackgroundImage(graphic);
+}
+
void SetMainBackgroundImage(int graphic)
{
SetMainBackgroundBitmap(graphic == IMG_UNDEFINED ? NULL :
if (g->offset_y == 0) /* frames are ordered horizontally */
{
int max_width = g->anim_frames_per_line * g->width;
-#if 1
int pos = (src_y / g->height) * max_width + src_x + frame * g->offset_x;
*x = pos % max_width;
*y = src_y % g->height + pos / max_width * g->height;
-#else
- *x = (src_x + frame * g->offset_x) % max_width;
- *y = src_y + (src_x + frame * g->offset_x) / max_width * g->height;
-#endif
}
else if (g->offset_x == 0) /* frames are ordered vertically */
{
int max_height = g->anim_frames_per_line * g->height;
-#if 1
int pos = (src_x / g->width) * max_height + src_y + frame * g->offset_y;
*x = src_x % g->width + pos / max_height * g->width;
*y = pos % max_height;
-#else
- *x = src_x + (src_y + frame * g->offset_y) / max_height * g->width;
- *y = (src_y + frame * g->offset_y) % max_height;
-#endif
}
else /* frames are ordered diagonally */
{
MarkTileDirty(x2, y2);
}
-
-#if 0
- printf("::: DONE DrawGraphicShiftedDouble");
- BackToFront();
- Delay(1000);
-#endif
}
static void DrawGraphicShifted(int x, int y, int dx, int dy,
int sx = SCREENX(x), sy = SCREENY(y);
int element;
int width, height, cx, cy, i;
-#if 1
int crumbled_border_size = graphic_info[graphic].border_size;
-#else
- int snip = TILEX / 8; /* number of border pixels from "crumbled graphic" */
-#endif
static int xy[4][2] =
{
{ 0, -1 },
{ 0, +1 }
};
-#if 0
- if (x == 0 && y == 7)
- printf("::: %d, %d [%d]\n", GfxElement[x][y], Feld[x][y],
- crumbled_border_size);
-#endif
-
if (!IN_LEV_FIELD(x, y))
return;
int xx = x + xy[i][0];
int yy = y + xy[i][1];
-#if 1
element = (IN_LEV_FIELD(xx, yy) ? TILE_GFX_ELEMENT(xx, yy) :
BorderElement);
-#else
- element = (IN_LEV_FIELD(xx, yy) ? Feld[xx][yy] : BorderElement);
-#endif
/* check if neighbour field is of same type */
if (GFX_CRUMBLED(element) && !IS_MOVING(xx, yy))
continue;
-#if 0
- if (Feld[x][y] == EL_CUSTOM_START + 123)
- printf("::: crumble [%d] THE CHAOS ENGINE (%d, %d): %d, %d\n",
- i, Feld[x][y], element,
- GFX_CRUMBLED(element), IS_MOVING(x, y));
-#endif
-
if (i == 1 || i == 2)
{
width = crumbled_border_size;
}
else /* crumble neighbour fields */
{
-#if 0
- getGraphicSource(graphic, frame, &src_bitmap, &src_x, &src_y);
-#endif
-
for (i = 0; i < 4; i++)
{
int xx = x + xy[i][0];
continue;
#endif
-#if 1
graphic = el_act2crm(Feld[xx][yy], ACTION_DEFAULT);
crumbled_border_size = graphic_info[graphic].border_size;
getGraphicSource(graphic, frame, &src_bitmap, &src_x, &src_y);
-#endif
if (i == 1 || i == 2)
{
void DrawLevelFieldCrumbledSand(int x, int y)
{
-#if 1
int graphic;
if (!IN_LEV_FIELD(x, y))
graphic = el_act2crm(Feld[x][y], ACTION_DEFAULT);
DrawLevelFieldCrumbledSandExt(x, y, graphic, 0);
-#else
- DrawLevelFieldCrumbledSandExt(x, y, IMG_SAND_CRUMBLED, 0);
-#endif
}
void DrawLevelFieldCrumbledSandDigging(int x, int y, int direction,
int step_frame)
{
-#if 1
int graphic1 = el_act_dir2img(GfxElement[x][y], ACTION_DIGGING, direction);
int graphic2 = el_act_dir2crm(GfxElement[x][y], ACTION_DIGGING, direction);
-#else
- int graphic1 = el_act_dir2img(EL_SAND, ACTION_DIGGING, direction);
- int graphic2 = el_act_dir2img(EL_SAND_CRUMBLED, ACTION_DIGGING, direction);
-#endif
int frame1 = getGraphicAnimationFrame(graphic1, step_frame);
int frame2 = getGraphicAnimationFrame(graphic2, step_frame);
int sx = SCREENX(x), sy = SCREENY(y);
void AnimateEnvelope(int envelope_nr, int anim_mode, int action)
{
int graphic = IMG_BACKGROUND_ENVELOPE_1 + envelope_nr;
-#if 1
Bitmap *src_bitmap = graphic_info[graphic].bitmap;
int mask_mode = (src_bitmap != NULL ? BLIT_MASKED : BLIT_ON_BACKGROUND);
-#else
- boolean draw_masked = graphic_info[graphic].draw_masked;
- int mask_mode = (draw_masked ? BLIT_MASKED : BLIT_ON_BACKGROUND);
-#endif
boolean ffwd_delay = (tape.playing && tape.fast_forward);
boolean no_delay = (tape.warp_forward);
unsigned long anim_delay = 0;
max_len_label_text = SXSIZE / getFontWidth(font_nr);
-#if 1
-
for (i = 0; i < max_len_label_text; i++)
label_text[i] = ' ';
label_text[max_len_label_text] = '\0';
DrawText(lxpos, lypos, label_text, font_nr);
}
-#else
-
- DrawBackground(SX, MICROLABEL2_YPOS, SXSIZE, getFontHeight(font_nr));
-
-#endif
-
strncpy(label_text,
(mode == MICROLABEL_LEVEL_NAME ? level.name :
mode == MICROLABEL_LEVEL_AUTHOR_HEAD ? "created by" :
void DrawLevelElementAnimation(int x, int y, int element)
{
-#if 1
int graphic = el_act_dir2img(element, GfxAction[x][y], GfxDir[x][y]);
DrawGraphicAnimation(SCREENX(x), SCREENY(y), graphic);
-#else
- DrawGraphicAnimation(SCREENX(x), SCREENY(y), el2img(element));
-#endif
}
inline void DrawLevelGraphicAnimationIfNeeded(int x, int y, int graphic)
int jx = player->jx;
int jy = player->jy;
int move_dir = player->MovDir;
-#if 0
- int last_jx = player->last_jx;
- int last_jy = player->last_jy;
- int next_jx = jx + (jx - last_jx);
- int next_jy = jy + (jy - last_jy);
- boolean player_is_moving = (last_jx != jx || last_jy != jy ? TRUE : FALSE);
-#else
int dx = (move_dir == MV_LEFT ? -1 : move_dir == MV_RIGHT ? +1 : 0);
int dy = (move_dir == MV_UP ? -1 : move_dir == MV_DOWN ? +1 : 0);
int last_jx = (player->is_moving ? jx - dx : jx);
int next_jx = jx + dx;
int next_jy = jy + dy;
boolean player_is_moving = (player->MovPos ? TRUE : FALSE);
-#endif
int sx = SCREENX(jx), sy = SCREENY(jy);
int sxx = 0, syy = 0;
int element = Feld[jx][jy], last_element = Feld[last_jx][last_jy];
/* draw things in the field the player is leaving, if needed */
/* ----------------------------------------------------------------------- */
-#if 1
if (player->is_moving)
-#else
- if (player_is_moving)
-#endif
{
if (Back[last_jx][last_jy] && IS_DRAWABLE(last_element))
{
{
GfxElement[jx][jy] = EL_UNDEFINED;
+ /* make sure that pushed elements are drawn with correct frame rate */
+ if (player->is_pushing && player->is_moving)
+ GfxFrame[jx][jy] = player->StepFrame;
+
DrawLevelField(jx, jy);
}
}
/* draw player himself */
/* ----------------------------------------------------------------------- */
-#if 1
-
graphic = getPlayerGraphic(player, move_dir);
/* in the case of changed player action or direction, prevent the current
if (player->Frame == 0 && equalGraphics(graphic, last_player_graphic))
player->Frame = last_player_frame;
-#else
-
- if (player->use_murphy_graphic)
- {
- static int last_horizontal_dir = MV_LEFT;
-
- if (move_dir == MV_LEFT || move_dir == MV_RIGHT)
- last_horizontal_dir = move_dir;
-
- graphic = el_act_dir2img(EL_SP_MURPHY, player->GfxAction, move_dir);
-
- if (graphic == IMG_SP_MURPHY) /* undefined => use special graphic */
- {
- int direction = (player->is_snapping ? move_dir : last_horizontal_dir);
-
- graphic = el_act_dir2img(EL_SP_MURPHY, player->GfxAction, direction);
- }
- }
- else
- graphic = el_act_dir2img(player->element_nr, player->GfxAction, move_dir);
-
-#endif
-
frame = getGraphicAnimationFrame(graphic, player->Frame);
if (player->GfxPos)
#if 1
if (player->is_pushing && player->is_moving)
-#else
- if (player->is_pushing && player_is_moving)
-#endif
{
-#if 1
int px = SCREENX(jx), py = SCREENY(jy);
int pxx = (TILEX - ABS(sxx)) * dx;
int pyy = (TILEY - ABS(syy)) * dy;
-#else
- int px = SCREENX(next_jx), py = SCREENY(next_jy);
- int pxx = sxx;
- int pyy = syy;
-#endif
-#if 1
int graphic;
int frame;
/* masked drawing is needed for EMC style (double) movement graphics */
DrawGraphicShiftedThruMask(px, py, pxx, pyy, graphic, frame, NO_CUTTING);
-
-#else
- if (Back[next_jx][next_jy])
- DrawLevelElement(next_jx, next_jy, Back[next_jx][next_jy]);
-
- if ((pxx || pyy) && element == EL_SOKOBAN_OBJECT)
- DrawGraphicShiftedThruMask(px, py, pxx, pyy, IMG_SOKOBAN_OBJECT, 0,
- NO_CUTTING);
- else
- {
- int element = MovingOrBlocked2Element(next_jx, next_jy);
- int graphic = el_act_dir2img(element, ACTION_PUSHING, move_dir);
-#if 1
- int frame = getGraphicAnimationFrame(graphic, player->StepFrame);
-#else
- int frame = getGraphicAnimationFrame(graphic, player->Frame);
-#endif
-
-#if 1
- /* masked drawing is needed for EMC style (double) movement graphics */
- DrawGraphicShiftedThruMask(px, py, pxx, pyy, graphic, frame,
- NO_CUTTING);
-#else
- DrawGraphicShifted(px, py, pxx, pyy, graphic, frame,
- NO_CUTTING, NO_MASKING);
-#endif
- }
-#endif
}
+#endif
/* ----------------------------------------------------------------------- */
/* draw things in front of player (active dynamite or dynabombs) */
DrawLevelFieldThruMask(last_jx, last_jy);
}
-#if 1
/* do not redraw accessible elements if the player is just pushing them */
if (!player_is_moving || !player->is_pushing)
{
DrawLevelFieldThruMask(jx, jy);
}
-#else
-
-#if 0
- /* !!! I have forgotton what this should be good for !!! */
- /* !!! causes player being visible when pushing from within tubes !!! */
- if (!player->is_pushing)
-#endif
- {
- /* ... and the field the player is entering */
- if (IS_ACCESSIBLE_INSIDE(element))
- DrawLevelField(jx, jy);
- else if (IS_ACCESSIBLE_UNDER(element))
- DrawLevelFieldThruMask(jx, jy);
- }
-#endif
-
if (setup.direct_draw)
{
int dst_x = SX + SCREENX(MIN(jx, last_jx)) * TILEX;
}
}
-#if 1
if (game_status == GAME_MODE_PLAYING &&
level.game_engine_type == GAME_ENGINE_TYPE_EM)
BlitScreenToBitmap_EM(backbuffer);
-#endif
-#if 1
/* disable deactivated drawing when quick-loading level tape recording */
if (tape.playing && tape.deactivate_display)
TapeDeactivateDisplayOff(TRUE);
-#endif
-#if 1
SetMouseCursor(CURSOR_DEFAULT);
-#endif
#if defined(NETWORK_AVALIABLE)
/* pause network game while waiting for request to answer */
OpenDoor(DOOR_OPEN_1);
-#if 0
- ClearEventQueue();
-#endif
-
if (!(req_state & REQUEST_WAIT_FOR_INPUT))
{
SetDrawBackgroundMask(REDRAW_FIELD);
SetDrawBackgroundMask(REDRAW_FIELD | REDRAW_DOOR_1);
-#if 0
- SetMouseCursor(CURSOR_DEFAULT);
-#endif
-
while (result < 0)
{
if (PendingEvent())
SendToServer_ContinuePlaying();
#endif
-#if 1
/* restore deactivated drawing when quick-loading level tape recording */
if (tape.playing && tape.deactivate_display)
TapeDeactivateDisplayOn();
-#endif
return result;
}
{
stepsize = 20; /* must be choosen to always draw last frame */
door_delay_value = 0;
-
-#if 0
- StopSound(SND_DOOR_OPENING);
- StopSound(SND_DOOR_CLOSING);
-#endif
}
if (global.autoplay_leveldir)
}
}
-#if 0
- if (setup.quick_doors)
- {
- StopSound(SND_DOOR_OPENING);
- StopSound(SND_DOOR_CLOSING);
- }
-#endif
-
if (door_state & DOOR_ACTION_1)
door1 = door_state & DOOR_ACTION_1;
if (door_state & DOOR_ACTION_2)
request_gadget_id = gi->custom_id;
}
-#if 1
-
static struct Mapping_EM_to_RND_object
{
int element_em;
return EL_UNKNOWN;
}
-#else
+#if 0
int map_element_RND_to_EM(int element_rnd)
{
return element_info[element].special_graphic[GFX_SPECIAL_ARG_PREVIEW];
}
+int font2baseimg(int font_nr)
+{
+ return font_info[font_nr].special_graphic[GFX_SPECIAL_ARG_DEFAULT];
+}
+
int getGameFrameDelay_EM(int native_em_game_frame_delay)
{
int game_frame_delay_value;
getGraphicSourceExt(graphic, frame, &src_bitmap, &src_x, &src_y,
g->double_movement && is_backside);
-#if 1
g_em->bitmap = src_bitmap;
g_em->src_x = src_x;
g_em->src_y = src_y;
g_em->has_crumbled_graphics = FALSE;
g_em->preserve_background = FALSE;
-#endif
-
-#if 0
- if (effective_element == EL_EMC_GRASS &&
- effective_action == ACTION_DIGGING)
- printf("::: %d\n", crumbled);
-#endif
#if 0
if (has_crumbled_graphics && crumbled == IMG_EMPTY_SPACE)
g_em->crumbled_border_size = graphic_info[crumbled].border_size;
}
-#if 1
if (!g->double_movement && (effective_action == ACTION_FALLING ||
effective_action == ACTION_MOVING ||
effective_action == ACTION_PUSHING))
g_em->height = TILEY - cy * step;
}
-#if 0
- if (effective_action == ACTION_SMASHED_BY_ROCK &&
- element_info[effective_element].graphic[effective_action] ==
- element_info[effective_element].graphic[ACTION_DEFAULT])
- {
- int move_dir = MV_DOWN;
- int dx = (move_dir == MV_LEFT ? -1 : move_dir == MV_RIGHT ? 1 : 0);
- int dy = (move_dir == MV_UP ? -1 : move_dir == MV_DOWN ? 1 : 0);
- int num_steps = 8;
- int cx = ABS(dx) * (TILEX / num_steps);
- int cy = ABS(dy) * (TILEY / num_steps);
- int step_frame = j + 1;
- int step = (is_backside ? step_frame : num_steps - step_frame);
-
- graphic = (el_act_dir2img(EL_ROCK, ACTION_FALLING, MV_DOWN));
- g = &graphic_info[graphic];
- sync_frame = j;
- frame = getAnimationFrame(g->anim_frames,
- g->anim_delay,
- g->anim_mode,
- g->anim_start_frame,
- sync_frame);
- getGraphicSourceExt(graphic, frame, &src_bitmap, &src_x, &src_y,
- g->double_movement && is_backside);
-
- g_em->bitmap = src_bitmap;
- g_em->src_x = src_x;
- g_em->src_y = src_y;
- g_em->src_offset_x = 0;
- g_em->src_offset_y = 0;
- g_em->dst_offset_x = 0;
- g_em->dst_offset_y = 0;
-
- if (is_backside) /* tile where movement starts */
- {
- if (dx < 0 || dy < 0)
- {
- g_em->src_offset_x = cx * step;
- g_em->src_offset_y = cy * step;
- }
- else
- {
- g_em->dst_offset_x = cx * step;
- g_em->dst_offset_y = cy * step;
- }
- }
- else /* tile where movement ends */
- {
- if (dx < 0 || dy < 0)
- {
- g_em->dst_offset_x = cx * step;
- g_em->dst_offset_y = cy * step;
- }
- else
- {
- g_em->src_offset_x = cx * step;
- g_em->src_offset_y = cy * step;
- }
- }
-
- g_em->width = TILEX - cx * step;
- g_em->height = TILEY - cy * step;
-
-#if 0
- printf("::: -> '%s'\n", element_info[effective_element].token_name);
-#endif
- }
-#endif
-
-#endif
-
/* create unique graphic identifier to decide if tile must be redrawn */
/* bit 31 - 16 (16 bit): EM style element
bit 15 - 12 ( 4 bit): EM style frame
}
}
-#if 1
for (i = 0; i < TILE_MAX; i++)
{
for (j = 0; j < 8; j++)
}
}
}
-#endif
for (p = 0; p < 2; p++)
{
getGraphicSourceExt(graphic, frame, &src_bitmap, &src_x,&src_y, FALSE);
-#if 1
g_em->bitmap = src_bitmap;
g_em->src_x = src_x;
g_em->src_y = src_y;
g_em->dst_offset_y = 0;
g_em->width = TILEX;
g_em->height = TILEY;
-#endif
#if DEBUG_EM_GFX
if (g_em->bitmap != debug_bitmap ||