X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ftools.c;h=aa1767a426c9f4e962b63a08ab06935564906ed2;hb=445f1cdcd097f1ede6f6224c1aeef91c7f8eae81;hp=33158a4856c1d2c8a45ad742f9f7f2fa8e07650d;hpb=0078fa1620abed262370083c0c6aa475a25e1b04;p=rocksndiamonds.git diff --git a/src/tools.c b/src/tools.c index 33158a48..aa1767a4 100644 --- a/src/tools.c +++ b/src/tools.c @@ -85,6 +85,7 @@ void DumpTile(int x, int y) 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]); @@ -256,8 +257,8 @@ void BackToFront() { 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 ? @@ -281,32 +282,7 @@ void BackToFront() 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); @@ -425,6 +401,12 @@ void FadeToFront() BackToFront(); } +void SetMainBackgroundImageIfDefined(int graphic) +{ + if (graphic_info[graphic].bitmap) + SetMainBackgroundImage(graphic); +} + void SetMainBackgroundImage(int graphic) { SetMainBackgroundBitmap(graphic == IMG_UNDEFINED ? NULL : @@ -528,28 +510,18 @@ inline void getGraphicSourceExt(int graphic, int frame, Bitmap **bitmap, 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 */ { @@ -810,12 +782,6 @@ inline static void DrawGraphicShiftedDouble(int x, int y, int dx, int dy, MarkTileDirty(x2, y2); } - -#if 0 - printf("::: DONE DrawGraphicShiftedDouble"); - BackToFront(); - Delay(1000); -#endif } static void DrawGraphicShifted(int x, int y, int dx, int dy, @@ -940,11 +906,7 @@ static void DrawLevelFieldCrumbledSandExt(int x, int y, int graphic, int frame) 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 }, @@ -953,12 +915,6 @@ static void DrawLevelFieldCrumbledSandExt(int x, int y, int graphic, int frame) { 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; @@ -977,24 +933,13 @@ static void DrawLevelFieldCrumbledSandExt(int x, int y, int graphic, int frame) 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; @@ -1018,10 +963,6 @@ static void DrawLevelFieldCrumbledSandExt(int x, int y, int graphic, int frame) } 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]; @@ -1047,12 +988,10 @@ static void DrawLevelFieldCrumbledSandExt(int x, int y, int graphic, int frame) 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) { @@ -1079,7 +1018,6 @@ static void DrawLevelFieldCrumbledSandExt(int x, int y, int graphic, int frame) void DrawLevelFieldCrumbledSand(int x, int y) { -#if 1 int graphic; if (!IN_LEV_FIELD(x, y)) @@ -1088,21 +1026,13 @@ void DrawLevelFieldCrumbledSand(int x, int 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); @@ -1359,13 +1289,8 @@ void DrawEnvelopeBackground(int envelope_nr, int startx, int starty, 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; @@ -1509,7 +1434,7 @@ static void DrawMicroLevelExt(int xpos, int ypos, int from_x, int from_y) { int x, y; - DrawBackground(xpos, ypos, MICROLEV_XSIZE, MICROLEV_YSIZE); + DrawBackground(xpos, ypos, MICROLEVEL_XSIZE, MICROLEVEL_YSIZE); if (lev_fieldx < STD_LEV_FIELDX) xpos += (STD_LEV_FIELDX - lev_fieldx) / 2 * MICRO_TILEX; @@ -1540,37 +1465,54 @@ static void DrawMicroLevelExt(int xpos, int ypos, int from_x, int from_y) #define MICROLABEL_EMPTY 0 #define MICROLABEL_LEVEL_NAME 1 -#define MICROLABEL_CREATED_BY 2 +#define MICROLABEL_LEVEL_AUTHOR_HEAD 2 #define MICROLABEL_LEVEL_AUTHOR 3 -#define MICROLABEL_IMPORTED_FROM 4 -#define MICROLABEL_LEVEL_IMPORT_INFO 5 +#define MICROLABEL_IMPORTED_FROM_HEAD 4 +#define MICROLABEL_IMPORTED_FROM 5 +#define MICROLABEL_IMPORTED_BY_HEAD 6 +#define MICROLABEL_IMPORTED_BY 7 static void DrawMicroLevelLabelExt(int mode) { char label_text[MAX_OUTPUT_LINESIZE + 1]; int max_len_label_text; int font_nr = FONT_TEXT_2; + int i; - if (mode == MICROLABEL_CREATED_BY || mode == MICROLABEL_IMPORTED_FROM) + if (mode == MICROLABEL_LEVEL_AUTHOR_HEAD || + mode == MICROLABEL_IMPORTED_FROM_HEAD || + mode == MICROLABEL_IMPORTED_BY_HEAD) font_nr = FONT_TEXT_3; max_len_label_text = SXSIZE / getFontWidth(font_nr); - DrawBackground(SX, MICROLABEL_YPOS, SXSIZE, getFontHeight(font_nr)); + for (i = 0; i < max_len_label_text; i++) + label_text[i] = ' '; + label_text[max_len_label_text] = '\0'; + + if (strlen(label_text) > 0) + { + int lxpos = SX + (SXSIZE - getTextWidth(label_text, font_nr)) / 2; + int lypos = MICROLABEL2_YPOS; + + DrawText(lxpos, lypos, label_text, font_nr); + } - strncpy(label_text, (mode == MICROLABEL_LEVEL_NAME ? level.name : - mode == MICROLABEL_CREATED_BY ? "created by" : - mode == MICROLABEL_LEVEL_AUTHOR ? level.author : - mode == MICROLABEL_IMPORTED_FROM ? "imported from" : - mode == MICROLABEL_LEVEL_IMPORT_INFO ? - leveldir_current->imported_from : ""), + strncpy(label_text, + (mode == MICROLABEL_LEVEL_NAME ? level.name : + mode == MICROLABEL_LEVEL_AUTHOR_HEAD ? "created by" : + mode == MICROLABEL_LEVEL_AUTHOR ? level.author : + mode == MICROLABEL_IMPORTED_FROM_HEAD ? "imported from" : + mode == MICROLABEL_IMPORTED_FROM ? leveldir_current->imported_from : + mode == MICROLABEL_IMPORTED_BY_HEAD ? "imported by" : + mode == MICROLABEL_IMPORTED_BY ? leveldir_current->imported_by :""), max_len_label_text); label_text[max_len_label_text] = '\0'; if (strlen(label_text) > 0) { int lxpos = SX + (SXSIZE - getTextWidth(label_text, font_nr)) / 2; - int lypos = MICROLABEL_YPOS; + int lypos = MICROLABEL2_YPOS; DrawText(lxpos, lypos, label_text, font_nr); } @@ -1605,11 +1547,18 @@ void DrawMicroLevel(int xpos, int ypos, boolean restart) if (leveldir_current->name) { - int text_width = getTextWidth(leveldir_current->name, FONT_TEXT_1); - int lxpos = SX + (SXSIZE - text_width) / 2; - int lypos = SY + 352; + char label_text[MAX_OUTPUT_LINESIZE + 1]; + int font_nr = FONT_TEXT_1; + int max_len_label_text = SXSIZE / getFontWidth(font_nr); + int lxpos, lypos; + + strncpy(label_text, leveldir_current->name, max_len_label_text); + label_text[max_len_label_text] = '\0'; + + lxpos = SX + (SXSIZE - getTextWidth(label_text, font_nr)) / 2; + lypos = SY + MICROLABEL1_YPOS; - DrawText(lxpos, lypos, leveldir_current->name, FONT_TEXT_1); + DrawText(lxpos, lypos, label_text, font_nr); } game_status = last_game_status; /* restore current game status */ @@ -1658,6 +1607,7 @@ void DrawMicroLevel(int xpos, int ypos, boolean restart) DrawMicroLevelExt(xpos, ypos, from_x, from_y); } + /* !!! THIS ALL SUCKS -- SHOULD BE CLEANLY REWRITTEN !!! */ /* redraw micro level label, if needed */ if (strcmp(level.name, NAMELESS_LEVEL_NAME) != 0 && strcmp(level.author, ANONYMOUS_NAME) != 0 && @@ -1666,20 +1616,35 @@ void DrawMicroLevel(int xpos, int ypos, boolean restart) { int max_label_counter = 23; - if (leveldir_current->imported_from != NULL) + if (leveldir_current->imported_from != NULL && + strlen(leveldir_current->imported_from) > 0) + max_label_counter += 14; + if (leveldir_current->imported_by != NULL && + strlen(leveldir_current->imported_by) > 0) max_label_counter += 14; label_counter = (label_counter + 1) % max_label_counter; label_state = (label_counter >= 0 && label_counter <= 7 ? MICROLABEL_LEVEL_NAME : label_counter >= 9 && label_counter <= 12 ? - MICROLABEL_CREATED_BY : + MICROLABEL_LEVEL_AUTHOR_HEAD : label_counter >= 14 && label_counter <= 21 ? MICROLABEL_LEVEL_AUTHOR : label_counter >= 23 && label_counter <= 26 ? - MICROLABEL_IMPORTED_FROM : + MICROLABEL_IMPORTED_FROM_HEAD : label_counter >= 28 && label_counter <= 35 ? - MICROLABEL_LEVEL_IMPORT_INFO : MICROLABEL_EMPTY); + MICROLABEL_IMPORTED_FROM : + label_counter >= 37 && label_counter <= 40 ? + MICROLABEL_IMPORTED_BY_HEAD : + label_counter >= 42 && label_counter <= 49 ? + MICROLABEL_IMPORTED_BY : MICROLABEL_EMPTY); + + if (leveldir_current->imported_from == NULL && + (label_state == MICROLABEL_IMPORTED_FROM_HEAD || + label_state == MICROLABEL_IMPORTED_FROM)) + label_state = (label_state == MICROLABEL_IMPORTED_FROM_HEAD ? + MICROLABEL_IMPORTED_BY_HEAD : MICROLABEL_IMPORTED_BY); + DrawMicroLevelLabelExt(label_state); } @@ -1716,13 +1681,9 @@ void DrawLevelGraphicAnimation(int x, int y, int graphic) 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) @@ -1819,13 +1780,6 @@ void DrawPlayer(struct PlayerInfo *player) 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); @@ -1833,7 +1787,6 @@ void DrawPlayer(struct PlayerInfo *player) 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]; @@ -1873,11 +1826,7 @@ void DrawPlayer(struct PlayerInfo *player) /* 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)) { @@ -1932,6 +1881,10 @@ void DrawPlayer(struct PlayerInfo *player) { 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); } } @@ -1940,8 +1893,6 @@ void DrawPlayer(struct PlayerInfo *player) /* draw player himself */ /* ----------------------------------------------------------------------- */ -#if 1 - graphic = getPlayerGraphic(player, move_dir); /* in the case of changed player action or direction, prevent the current @@ -1949,29 +1900,6 @@ void DrawPlayer(struct PlayerInfo *player) 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) @@ -2008,21 +1936,11 @@ void DrawPlayer(struct PlayerInfo *player) #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; @@ -2038,35 +1956,8 @@ void DrawPlayer(struct PlayerInfo *player) /* 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) */ @@ -2107,7 +1998,6 @@ void DrawPlayer(struct PlayerInfo *player) 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) { @@ -2118,22 +2008,6 @@ void DrawPlayer(struct PlayerInfo *player) 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; @@ -2224,21 +2098,15 @@ boolean Request(char *text, unsigned int req_state) } } -#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 */ @@ -2333,10 +2201,6 @@ boolean Request(char *text, unsigned int req_state) OpenDoor(DOOR_OPEN_1); -#if 0 - ClearEventQueue(); -#endif - if (!(req_state & REQUEST_WAIT_FOR_INPUT)) { SetDrawBackgroundMask(REDRAW_FIELD); @@ -2353,10 +2217,6 @@ boolean Request(char *text, unsigned int req_state) SetDrawBackgroundMask(REDRAW_FIELD | REDRAW_DOOR_1); -#if 0 - SetMouseCursor(CURSOR_DEFAULT); -#endif - while (result < 0) { if (PendingEvent()) @@ -2498,11 +2358,9 @@ boolean Request(char *text, unsigned int req_state) SendToServer_ContinuePlaying(); #endif -#if 1 /* restore deactivated drawing when quick-loading level tape recording */ if (tape.playing && tape.deactivate_display) TapeDeactivateDisplayOn(); -#endif return result; } @@ -2594,11 +2452,6 @@ unsigned int MoveDoor(unsigned int door_state) { 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) @@ -2799,14 +2652,6 @@ unsigned int MoveDoor(unsigned int door_state) } } -#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) @@ -3019,8 +2864,6 @@ static void HandleToolButtons(struct GadgetInfo *gi) request_gadget_id = gi->custom_id; } -#if 1 - static struct Mapping_EM_to_RND_object { int element_em; @@ -3807,7 +3650,7 @@ em_object_mapping_list[] = }, { Ybomb_eat, FALSE, FALSE, - EL_BOMB, ACTION_SMASHED_BY_ROCK, -1 + EL_BOMB, ACTION_ACTIVATING, -1 }, { Xballoon, TRUE, FALSE, @@ -3975,19 +3818,19 @@ em_object_mapping_list[] = }, { Ykey_5_eat, FALSE, FALSE, - EL_EM_KEY_5, ACTION_COLLECTING, -1 + EL_EMC_KEY_5, ACTION_COLLECTING, -1 }, { Ykey_6_eat, FALSE, FALSE, - EL_EM_KEY_6, ACTION_COLLECTING, -1 + EL_EMC_KEY_6, ACTION_COLLECTING, -1 }, { Ykey_7_eat, FALSE, FALSE, - EL_EM_KEY_7, ACTION_COLLECTING, -1 + EL_EMC_KEY_7, ACTION_COLLECTING, -1 }, { Ykey_8_eat, FALSE, FALSE, - EL_EM_KEY_8, ACTION_COLLECTING, -1 + EL_EMC_KEY_8, ACTION_COLLECTING, -1 }, { Ylenses_eat, FALSE, FALSE, @@ -4079,19 +3922,19 @@ em_object_mapping_list[] = }, { Xdoor_5, TRUE, FALSE, - EL_EM_GATE_5, -1, -1 + EL_EMC_GATE_5, -1, -1 }, { Xdoor_6, TRUE, FALSE, - EL_EM_GATE_6, -1, -1 + EL_EMC_GATE_6, -1, -1 }, { Xdoor_7, TRUE, FALSE, - EL_EM_GATE_7, -1, -1 + EL_EMC_GATE_7, -1, -1 }, { Xdoor_8, TRUE, FALSE, - EL_EM_GATE_8, -1, -1 + EL_EMC_GATE_8, -1, -1 }, { Xkey_1, TRUE, FALSE, @@ -4111,19 +3954,19 @@ em_object_mapping_list[] = }, { Xkey_5, TRUE, FALSE, - EL_EM_KEY_5, -1, -1 + EL_EMC_KEY_5, -1, -1 }, { Xkey_6, TRUE, FALSE, - EL_EM_KEY_6, -1, -1 + EL_EMC_KEY_6, -1, -1 }, { Xkey_7, TRUE, FALSE, - EL_EM_KEY_7, -1, -1 + EL_EMC_KEY_7, -1, -1 }, { Xkey_8, TRUE, FALSE, - EL_EM_KEY_8, -1, -1 + EL_EMC_KEY_8, -1, -1 }, { Xwind_n, TRUE, FALSE, @@ -4335,19 +4178,19 @@ em_object_mapping_list[] = }, { Xfake_door_5, TRUE, FALSE, - EL_EM_GATE_5_GRAY, -1, -1 + EL_EMC_GATE_5_GRAY, -1, -1 }, { Xfake_door_6, TRUE, FALSE, - EL_EM_GATE_6_GRAY, -1, -1 + EL_EMC_GATE_6_GRAY, -1, -1 }, { Xfake_door_7, TRUE, FALSE, - EL_EM_GATE_7_GRAY, -1, -1 + EL_EMC_GATE_7_GRAY, -1, -1 }, { Xfake_door_8, TRUE, FALSE, - EL_EM_GATE_8_GRAY, -1, -1 + EL_EMC_GATE_8_GRAY, -1, -1 }, { Xfake_acid_1, TRUE, FALSE, @@ -4888,7 +4731,7 @@ int map_element_EM_to_RND(int element_em) return EL_UNKNOWN; } -#else +#if 0 int map_element_RND_to_EM(int element_rnd) { @@ -5631,6 +5474,11 @@ int el2preimg(int element) 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; @@ -5936,7 +5784,6 @@ void InitGraphicInfo_EM(void) 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; @@ -5947,18 +5794,13 @@ void InitGraphicInfo_EM(void) g_em->width = TILEX; g_em->height = TILEY; - g_em->has_crumbled_graphics = FALSE; g_em->crumbled_bitmap = NULL; g_em->crumbled_src_x = 0; g_em->crumbled_src_y = 0; g_em->crumbled_border_size = 0; -#endif -#if 0 - if (effective_element == EL_EMC_GRASS && - effective_action == ACTION_DIGGING) - printf("::: %d\n", crumbled); -#endif + g_em->has_crumbled_graphics = FALSE; + g_em->preserve_background = FALSE; #if 0 if (has_crumbled_graphics && crumbled == IMG_EMPTY_SPACE) @@ -5981,7 +5823,6 @@ void InitGraphicInfo_EM(void) 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)) @@ -6030,7 +5871,6 @@ void InitGraphicInfo_EM(void) g_em->width = TILEX - cx * step; g_em->height = TILEY - cy * step; } -#endif /* create unique graphic identifier to decide if tile must be redrawn */ /* bit 31 - 16 (16 bit): EM style element @@ -6103,6 +5943,36 @@ void InitGraphicInfo_EM(void) } } + for (i = 0; i < TILE_MAX; i++) + { + for (j = 0; j < 8; j++) + { + int element = object_mapping[i].element_rnd; + int action = object_mapping[i].action; + + if (action == ACTION_SMASHED_BY_ROCK && + element_info[element].graphic[action] == + element_info[element].graphic[ACTION_DEFAULT]) + { + /* no separate animation for "smashed by rock" -- use rock instead */ + struct GraphicInfo_EM *g_em = &graphic_info_em_object[i][7 - j]; + struct GraphicInfo_EM *g_xx = &graphic_info_em_object[Ystone_s][7 - j]; + + g_em->bitmap = g_xx->bitmap; + g_em->src_x = g_xx->src_x; + g_em->src_y = g_xx->src_y; + g_em->src_offset_x = g_xx->src_offset_x; + g_em->src_offset_y = g_xx->src_offset_y; + g_em->dst_offset_x = g_xx->dst_offset_x; + g_em->dst_offset_y = g_xx->dst_offset_y; + g_em->width = g_xx->width; + g_em->height = g_xx->height; + + g_em->preserve_background = TRUE; + } + } + } + for (p = 0; p < 2; p++) { for (i = 0; i < SPR_MAX; i++) @@ -6139,7 +6009,6 @@ void InitGraphicInfo_EM(void) 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; @@ -6149,7 +6018,6 @@ void InitGraphicInfo_EM(void) 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 ||