-#if 1
- struct GraphicInfo *g1_left = &graphic_info[IMG_DOOR_1_WING_LEFT];
- struct GraphicInfo *g1_right = &graphic_info[IMG_DOOR_1_WING_RIGHT];
- struct GraphicInfo *g2_left = &graphic_info[IMG_DOOR_2_WING_LEFT];
- struct GraphicInfo *g2_right = &graphic_info[IMG_DOOR_2_WING_RIGHT];
- int door_1_left_width = g1_left->width;
- int door_1_left_height = g1_left->height;
- int door_1_right_width = g1_right->width;
- int door_1_right_height = g1_right->height;
- int door_2_left_width = g2_left->width;
- int door_2_left_height = g2_left->height;
- int door_2_right_width = g2_right->width;
- int door_2_right_height = g2_right->height;
- int door_1_width = MAX(door_1_left_width, door_1_right_width);
- int door_1_height = MAX(door_1_left_height, door_1_right_height);
- int door_2_width = MAX(door_2_left_width, door_2_right_width);
- int door_2_height = MAX(door_2_left_height, door_2_right_height);
-#endif
- boolean handle_door_1 = (door_state & DOOR_ACTION_1);
- boolean handle_door_2 = (door_state & DOOR_ACTION_2);
- boolean door_1_done = (!handle_door_1);
- boolean door_2_done = (!handle_door_2);
- boolean door_1_vertical = (door_1.anim_mode & ANIM_VERTICAL);
- boolean door_2_vertical = (door_2.anim_mode & ANIM_VERTICAL);
-#if 1
-#if 1
- int door_size_1 = (door_1_vertical ? door_1_height : door_1_width);
- int door_size_2 = (door_2_vertical ? door_2_height : door_2_width);
-#else
- int door_size_1 = (door_1_vertical ? DYSIZE : DXSIZE);
- int door_size_2 = (door_2_vertical ? VYSIZE : VXSIZE);
-#endif
-#else
- int door_size_1 = (door_1_vertical ? door_1.height : door_1.width);
- int door_size_2 = (door_2_vertical ? door_2.height : door_2.width);
-#endif
- int max_door_size_1 = (door_1_vertical ? DYSIZE : DXSIZE);
- int max_door_size_2 = (door_2_vertical ? VYSIZE : VXSIZE);
- // int door_size = (handle_door_1 ? door_size_1 : door_size_2);
- int door_size = (handle_door_2 ? door_size_2 : door_size_1);
- int max_door_size = (handle_door_1 ? max_door_size_1 : max_door_size_2);
- int door_skip = max_door_size - door_size;
- int end = door_size;
- int start = ((door_state & DOOR_NO_DELAY) ? end : 0);
- int k;
-
- if (!(door_state & DOOR_NO_DELAY) && !setup.quick_doors)
- {
- /* opening door sound has priority over simultaneously closing door */
- if (door_state & (DOOR_OPEN_1 | DOOR_OPEN_2))
- PlayMenuSoundStereo(SND_DOOR_OPENING, SOUND_MIDDLE);
- else if (door_state & (DOOR_CLOSE_1 | DOOR_CLOSE_2))
- PlayMenuSoundStereo(SND_DOOR_CLOSING, SOUND_MIDDLE);
- }
-
- for (k = start; k <= end && !(door_1_done && door_2_done); k += stepsize)
- {
- int x = k;
-#if 0
- Bitmap *bitmap = graphic_info[IMG_GLOBAL_DOOR].bitmap;
- GC gc = bitmap->stored_clip_gc;
-#endif
-
- if (door_state & DOOR_ACTION_1 &&
- x * door_1.step_offset <= door_size_1)
- {
- int a = MIN(x * door_1.step_offset, end);
- int p = (door_state & DOOR_OPEN_1 ? end - a : a);
-#if 1
- int i = p;
-#else
- int i = p + door_skip;
-#endif
-
-#if 1
- struct GraphicInfo *g_left = &graphic_info[IMG_DOOR_1_WING_LEFT];
- struct GraphicInfo *g_right = &graphic_info[IMG_DOOR_1_WING_RIGHT];
- Bitmap *bm_left = g_left->bitmap;
- Bitmap *bm_right = g_right->bitmap;
- GC gc_left = bm_left->stored_clip_gc;
- GC gc_right = bm_right->stored_clip_gc;
-#endif
-
- int classic_dxsize = 100;
- int classic_dysize = 280;
- boolean classic_door_1_size = (DXSIZE == classic_dxsize &&
- DYSIZE == classic_dysize);
-
- if (door_1.anim_mode & ANIM_STATIC_PANEL)
- {
- BlitBitmap(bitmap_db_door, drawto,
- DOOR_GFX_PAGEX1, DOOR_GFX_PAGEY1,
- DXSIZE, DYSIZE, DX, DY);
- }
- else if (x <= a)
- {
- BlitBitmap(bitmap_db_door, drawto,
- DOOR_GFX_PAGEX1, DOOR_GFX_PAGEY1 + p / 2,
- DXSIZE, DYSIZE - p / 2, DX, DY);
-
-#if 1
- // printf("::: p == %d\n", p);
- ClearRectangle(drawto, DX, DY + DYSIZE - p / 2, DXSIZE, p / 2);
-#endif
- }
-
- if (door_1.anim_mode & ANIM_HORIZONTAL && x <= DXSIZE)
- {
-#if 1
- int src1_x = g_right->src_x;
- int src1_y = g_right->src_y;
- int src2_x = g_left->src_x + g_left->width - i;
- int src2_y = g_left->src_y;
- int dst1_x = DX + DXSIZE - i;
- int dst1_y = DY;
- int dst2_x = DX;
- int dst2_y = DY;
- int width = i;
- int height = DYSIZE;
-
- SetClipOrigin(bm_right, gc_right, dst1_x - src1_x, dst1_y - src1_y);
- BlitBitmapMasked(bm_right, drawto, src1_x, src1_y, width, height,
- dst1_x, dst1_y);
-
- SetClipOrigin(bm_left, gc_left, dst2_x - src2_x, dst2_y - src2_y);
- BlitBitmapMasked(bm_left, drawto, src2_x, src2_y, width, height,
- dst2_x, dst2_y);
-#else
- int src1_x = DXSIZE, src1_y = DOOR_GFX_PAGEY1;
- int src2_x = DXSIZE - i, src2_y = DOOR_GFX_PAGEY1;
- int dst1_x = DX + DXSIZE - i, dst1_y = DY;
- int dst2_x = DX, dst2_y = DY;
- int width = i, height = DYSIZE;
-
- SetClipOrigin(bitmap, gc, dst1_x - src1_x, dst1_y - src1_y);
- BlitBitmapMasked(bitmap, drawto, src1_x, src1_y, width, height,
- dst1_x, dst1_y);
-
- SetClipOrigin(bitmap, gc, dst2_x - src2_x, dst2_y - src2_y);
- BlitBitmapMasked(bitmap, drawto, src2_x, src2_y, width, height,
- dst2_x, dst2_y);
-#endif
- }
- else if (door_1.anim_mode & ANIM_VERTICAL && x <= DYSIZE)
- {
-#if 1
- int src1_x = g_right->src_x;
- int src1_y = g_right->src_y;
- int src2_x = g_left->src_x;
- int src2_y = g_left->src_y + g_left->height - i;
- int dst1_x = DX;
- int dst1_y = DY + DYSIZE - i;
- int dst2_x = DX;
- int dst2_y = DY;
- int width = DXSIZE;
- int height = i;
-
- SetClipOrigin(bm_right, gc_right, dst1_x - src1_x, dst1_y - src1_y);
- BlitBitmapMasked(bm_right, drawto, src1_x, src1_y, width, height,
- dst1_x, dst1_y);
-
- SetClipOrigin(bm_left, gc_left, dst2_x - src2_x, dst2_y - src2_y);
- BlitBitmapMasked(bm_left, drawto, src2_x, src2_y, width, height,
- dst2_x, dst2_y);
-#else
- int src1_x = DXSIZE, src1_y = DOOR_GFX_PAGEY1;
- int src2_x = 0, src2_y = DOOR_GFX_PAGEY1 + DYSIZE - i;
- int dst1_x = DX, dst1_y = DY + DYSIZE - i;
- int dst2_x = DX, dst2_y = DY;
- int width = DXSIZE, height = i;
-
- SetClipOrigin(bitmap, gc, dst1_x - src1_x, dst1_y - src1_y);
- BlitBitmapMasked(bitmap, drawto, src1_x, src1_y, width, height,
- dst1_x, dst1_y);
-
- SetClipOrigin(bitmap, gc, dst2_x - src2_x, dst2_y - src2_y);
- BlitBitmapMasked(bitmap, drawto, src2_x, src2_y, width, height,
- dst2_x, dst2_y);
-#endif
- }
- else if (classic_door_1_size && x <= DXSIZE) /* ANIM_DEFAULT */
- {
- int j = (door_1.anim_mode == ANIM_DEFAULT ? (DXSIZE - i) / 3 : 0);
-
-#if 1
- int src1_x = g_right->src_x;
- int src1_y = g_right->src_y;
- int src2_x = g_left->src_x + g_left->width - i;
- int src2_y = g_left->src_y;
- int dst1_x = DX + DXSIZE - i;
- int dst1_y = DY;
- int dst2_x = DX;
- int dst2_y = DY;
- int width = i;
- int height1 = 63, height2 = DYSIZE / 2 - height1;
- int ypos1 = 0, ypos2 = height2;
- int ypos3 = DYSIZE / 2, ypos4 = DYSIZE - height2;
-
- SetClipOrigin(bm_right, gc_right,
- dst1_x - src1_x, dst1_y - src1_y + j);
- BlitBitmapMasked(bm_right, drawto,
- src1_x, src1_y + ypos1, width, height2,
- dst1_x, dst1_y + ypos1 + j);
- BlitBitmapMasked(bm_right, drawto,
- src1_x, src1_y + ypos3, width, height1,
- dst1_x, dst1_y + ypos3 + j);
- SetClipOrigin(bm_left, gc_left,
- dst2_x - src2_x, dst2_y - src2_y - j);
- BlitBitmapMasked(bm_left, drawto,
- src2_x, src2_y + ypos1 + j, width, height2 - j,
- dst2_x, dst2_y + ypos1);
- BlitBitmapMasked(bm_left, drawto,
- src2_x, src2_y + ypos3, width, height1,
- dst2_x, dst2_y + ypos3 - j);
-
- SetClipOrigin(bm_left, gc_left,
- dst2_x - src2_x, dst2_y - src2_y - j);
- BlitBitmapMasked(bm_left, drawto,
- src2_x, src2_y + ypos2, width, height1,
- dst2_x, dst2_y + ypos2 - j);
- BlitBitmapMasked(bm_left, drawto,
- src2_x, src2_y + ypos4, width, height2,
- dst2_x, dst2_y + ypos4 - j);
- SetClipOrigin(bm_right, gc_right,
- dst1_x - src1_x, dst1_y - src1_y + j);
- BlitBitmapMasked(bm_right, drawto,
- src1_x, src1_y + ypos2, width, height1,
- dst1_x, dst1_y + ypos2 + j);
- BlitBitmapMasked(bm_right, drawto,
- src1_x, src1_y + ypos4, width, height2 - j,
- dst1_x, dst1_y + ypos4 + j);
-
-#else
- int src1_x = DXSIZE, src1_y = DOOR_GFX_PAGEY1;
- int src2_x = DXSIZE - i, src2_y = DOOR_GFX_PAGEY1;
- int dst1_x = DX + DXSIZE - i, dst1_y = DY;
- int dst2_x = DX, dst2_y = DY;
- int width = i, height = DYSIZE;
- int ypos1 = 63, ypos2 = 77, ypos3 = 140, ypos4 = 203;
-
- SetClipOrigin(bitmap, gc, dst1_x - src1_x, dst1_y - src1_y + j);
- BlitBitmapMasked(bitmap, drawto,
- src1_x, src1_y, width, ypos2,
- dst1_x, dst1_y + j);
- BlitBitmapMasked(bitmap, drawto,
- src1_x, src1_y + ypos3, width, ypos1,
- dst1_x, dst1_y + ypos3 + j);
- SetClipOrigin(bitmap, gc, dst2_x - src2_x, dst2_y - src2_y - j);
- BlitBitmapMasked(bitmap, drawto,
- src2_x, src2_y + j, width, ypos2 - j,
- dst2_x, dst2_y);
- BlitBitmapMasked(bitmap, drawto,
- src2_x, src2_y + ypos3, width, ypos1,
- dst2_x, dst2_y + ypos3 - j);
-
- SetClipOrigin(bitmap, gc, dst2_x - src2_x, dst2_y - src2_y - j);
- BlitBitmapMasked(bitmap, drawto,
- src2_x, src2_y + ypos2, width, ypos1,
- dst2_x, dst2_y + ypos2 - j);
- BlitBitmapMasked(bitmap, drawto,
- src2_x, src2_y + ypos4, width, ypos2,
- dst2_x, dst2_y + ypos4 - j);
- SetClipOrigin(bitmap, gc, dst1_x - src1_x, dst1_y - src1_y + j);
- BlitBitmapMasked(bitmap, drawto,
- src1_x, src1_y + ypos2, width, ypos1,
- dst1_x, dst1_y + ypos2 + j);
- BlitBitmapMasked(bitmap, drawto,
- src1_x, src1_y + ypos4, width, ypos2 - j,
- dst1_x, dst1_y + ypos4 + j);
-
- /*
- SetClipOrigin(bitmap, gc, DX - i, (DY + j) - DOOR_GFX_PAGEY1);
- BlitBitmapMasked(bitmap, drawto,
- DXSIZE, DOOR_GFX_PAGEY1, i, 77,
- DX + DXSIZE - i, DY + j);
- BlitBitmapMasked(bitmap, drawto,
- DXSIZE, DOOR_GFX_PAGEY1 + 140, i, 63,
- DX + DXSIZE - i, DY + 140 + j);
- SetClipOrigin(bitmap, gc, DX - DXSIZE + i,
- DY - (DOOR_GFX_PAGEY1 + j));
- BlitBitmapMasked(bitmap, drawto,
- DXSIZE - i, DOOR_GFX_PAGEY1 + j, i, 77 - j,
- DX, DY);
- BlitBitmapMasked(bitmap, drawto,
- DXSIZE-i, DOOR_GFX_PAGEY1 + 140, i, 63,
- DX, DY + 140 - j);
-
- BlitBitmapMasked(bitmap, drawto,
- DXSIZE - i, DOOR_GFX_PAGEY1 + 77, i, 63,
- DX, DY + 77 - j);
- BlitBitmapMasked(bitmap, drawto,
- DXSIZE - i, DOOR_GFX_PAGEY1 + 203, i, 77,
- DX, DY + 203 - j);
- SetClipOrigin(bitmap, gc, DX - i, (DY + j) - DOOR_GFX_PAGEY1);
- BlitBitmapMasked(bitmap, drawto,
- DXSIZE, DOOR_GFX_PAGEY1 + 77, i, 63,
- DX + DXSIZE - i, DY + 77 + j);
- BlitBitmapMasked(bitmap, drawto,
- DXSIZE, DOOR_GFX_PAGEY1 + 203, i, 77 - j,
- DX + DXSIZE - i, DY + 203 + j);
- */
-#endif
- }
-
- redraw_mask |= REDRAW_DOOR_1;
- door_1_done = (a == end);
- }
-
- if (door_state & DOOR_ACTION_2 &&
- x * door_2.step_offset <= door_size_2)
- {
- int a = MIN(x * door_2.step_offset, door_size);
- int p = (door_state & DOOR_OPEN_2 ? door_size - a : a);
- int i = p + door_skip;
-
-#if 1
- struct GraphicInfo *g_left = &graphic_info[IMG_DOOR_2_WING_LEFT];
- struct GraphicInfo *g_right = &graphic_info[IMG_DOOR_2_WING_RIGHT];
- Bitmap *bm_left = g_left->bitmap;
- Bitmap *bm_right = g_right->bitmap;
- GC gc_left = bm_left->stored_clip_gc;
- GC gc_right = bm_right->stored_clip_gc;
-#endif
-
- int classic_vxsize = 100;
- int classic_vysize = 100;
- boolean classic_door_2_size = (VXSIZE == classic_vxsize &&
- VYSIZE == classic_vysize);
-
- if (door_2.anim_mode & ANIM_STATIC_PANEL)
- {
- BlitBitmap(bitmap_db_door, drawto,
- DOOR_GFX_PAGEX1, DOOR_GFX_PAGEY2,
- VXSIZE, VYSIZE, VX, VY);
- }
- else if (x <= VYSIZE)
- {
- BlitBitmap(bitmap_db_door, drawto,
- DOOR_GFX_PAGEX1, DOOR_GFX_PAGEY2 + p / 2,
- VXSIZE, VYSIZE - p / 2, VX, VY);
-
- ClearRectangle(drawto, VX, VY + VYSIZE - p / 2, VXSIZE, p / 2);
- }
-
- if (door_2.anim_mode & ANIM_HORIZONTAL && x <= VXSIZE)
- {
-#if 1
- int src1_x = g_right->src_x;
- int src1_y = g_right->src_y;
- int src2_x = g_left->src_x + g_left->width - i;
- int src2_y = g_left->src_y;
- int dst1_x = VX + VXSIZE - i;
- int dst1_y = VY;
- int dst2_x = VX;
- int dst2_y = VY;
- int width = i;
- int height = VYSIZE;
-
- SetClipOrigin(bm_right, gc_right, dst1_x - src1_x, dst1_y - src1_y);
- BlitBitmapMasked(bm_right, drawto, src1_x, src1_y, width, height,
- dst1_x, dst1_y);
-
- SetClipOrigin(bm_left, gc_left, dst2_x - src2_x, dst2_y - src2_y);
- BlitBitmapMasked(bm_left, drawto, src2_x, src2_y, width, height,
- dst2_x, dst2_y);
-#else
- int src1_x = VXSIZE, src1_y = DOOR_GFX_PAGEY2;
- int src2_x = VXSIZE - i, src2_y = DOOR_GFX_PAGEY2;
- int dst1_x = VX + VXSIZE - i, dst1_y = VY;
- int dst2_x = VX, dst2_y = VY;
- int width = i, height = VYSIZE;
-
- SetClipOrigin(bitmap, gc, dst1_x - src1_x, dst1_y - src1_y);
- BlitBitmapMasked(bitmap, drawto, src1_x, src1_y, width, height,
- dst1_x, dst1_y);
-
- SetClipOrigin(bitmap, gc, dst2_x - src2_x, dst2_y - src2_y);
- BlitBitmapMasked(bitmap, drawto, src2_x, src2_y, width, height,
- dst2_x, dst2_y);
-#endif
- }
- else if (door_2.anim_mode & ANIM_VERTICAL && x <= VYSIZE)
- {
-#if 1
- int src1_x = g_right->src_x;
- int src1_y = g_right->src_y;
- int src2_x = g_left->src_x;
- int src2_y = g_left->src_y + g_left->height - i;
- int dst1_x = VX;
- int dst1_y = VY + VYSIZE - i;
- int dst2_x = VX;
- int dst2_y = VY;
- int width = VXSIZE;
- int height = i;
-
- SetClipOrigin(bm_right, gc_right, dst1_x - src1_x, dst1_y - src1_y);
- BlitBitmapMasked(bm_right, drawto, src1_x, src1_y, width, height,
- dst1_x, dst1_y);
-
- SetClipOrigin(bm_left, gc_left, dst2_x - src2_x, dst2_y - src2_y);
- BlitBitmapMasked(bm_left, drawto, src2_x, src2_y, width, height,
- dst2_x, dst2_y);
-#else
- int src1_x = VXSIZE, src1_y = DOOR_GFX_PAGEY2;
- int src2_x = 0, src2_y = DOOR_GFX_PAGEY2 + VYSIZE - i;
- int dst1_x = VX, dst1_y = VY + VYSIZE - i;
- int dst2_x = VX, dst2_y = VY;
- int width = VXSIZE, height = i;
-
- SetClipOrigin(bitmap, gc, dst1_x - src1_x, dst1_y - src1_y);
- BlitBitmapMasked(bitmap, drawto, src1_x, src1_y, width, height,
- dst1_x, dst1_y);
-
- SetClipOrigin(bitmap, gc, dst2_x - src2_x, dst2_y - src2_y);
- BlitBitmapMasked(bitmap, drawto, src2_x, src2_y, width, height,
- dst2_x, dst2_y);
-#endif
- }
- else if (classic_door_2_size && x <= VXSIZE) /* ANIM_DEFAULT */
- {
- int j = (door_2.anim_mode == ANIM_DEFAULT ? (VXSIZE - i) / 3 : 0);
-
-#if 1
- int src1_x = g_right->src_x;
- int src1_y = g_right->src_y;
- int src2_x = g_left->src_x + g_left->width - i;
- int src2_y = g_left->src_y;
- int dst1_x = VX + VXSIZE - i;
- int dst1_y = VY;
- int dst2_x = VX;
- int dst2_y = VY;
- int width = i;
- int height = VYSIZE / 2;
- int ypos1 = 0, ypos2 = VYSIZE / 2;
-
- SetClipOrigin(bm_right, gc_right,
- dst1_x - src1_x, dst1_y - src1_y + j);
- BlitBitmapMasked(bm_right, drawto,
- src1_x, src1_y + ypos1, width, height,
- dst1_x, dst1_y + ypos1 + j);
- SetClipOrigin(bm_left, gc_left,
- dst2_x - src2_x, dst2_y - src2_y - j);
- BlitBitmapMasked(bm_left, drawto,
- src2_x, src2_y + ypos1 + j, width, height - j,
- dst2_x, dst2_y + ypos1);
-
- SetClipOrigin(bm_left, gc_left,
- dst2_x - src2_x, dst2_y - src2_y - j);
- BlitBitmapMasked(bm_left, drawto,
- src2_x, src2_y + ypos2, width, height,
- dst2_x, dst2_y + ypos2 - j);
- SetClipOrigin(bm_right, gc_right,
- dst1_x - src1_x, dst1_y - src1_y + j);
- BlitBitmapMasked(bm_right, drawto,
- src1_x, src1_y + ypos2, width, height - j,
- dst1_x, dst1_y + ypos2 + j);
-#else
- int src1_x = VXSIZE, src1_y = DOOR_GFX_PAGEY2;
- int src2_x = VXSIZE - i, src2_y = DOOR_GFX_PAGEY2;
- int dst1_x = VX + VXSIZE - i, dst1_y = VY;
- int dst2_x = VX, dst2_y = VY;
- int width = i, height = VYSIZE;
- int ypos = VYSIZE / 2;
-
- SetClipOrigin(bitmap, gc, dst1_x - src1_x, dst1_y - src1_y + j);
- BlitBitmapMasked(bitmap, drawto,
- src1_x, src1_y, width, ypos,
- dst1_x, dst1_y + j);
- SetClipOrigin(bitmap, gc, dst2_x - src2_x, dst2_y - src1_y - j);
- BlitBitmapMasked(bitmap, drawto,
- src2_x, src2_y + j, width, ypos - j,
- dst2_x, dst2_y);
-
- SetClipOrigin(bitmap, gc, dst2_x - src2_x, dst2_y - src1_y - j);
- BlitBitmapMasked(bitmap, drawto,
- src2_x, src2_y + ypos, width, ypos,
- dst2_x, dst2_y + ypos - j);
- SetClipOrigin(bitmap, gc, dst1_x - src1_x, dst1_y - src1_y + j);
- BlitBitmapMasked(bitmap, drawto,
- src1_x, src1_y + ypos, width, ypos - j,
- dst1_x, dst1_y + ypos + j);
-
- /*
- SetClipOrigin(bitmap, gc, VX - i, (VY + j) - DOOR_GFX_PAGEY2);
- BlitBitmapMasked(bitmap, drawto,
- VXSIZE, DOOR_GFX_PAGEY2, i, VYSIZE / 2,
- VX + VXSIZE - i, VY + j);
- SetClipOrigin(bitmap, gc,
- VX - VXSIZE + i, VY - (DOOR_GFX_PAGEY2 + j));
- BlitBitmapMasked(bitmap, drawto,
- VXSIZE - i, DOOR_GFX_PAGEY2 + j, i, VYSIZE / 2 - j,
- VX, VY);
-
- BlitBitmapMasked(bitmap, drawto,
- VXSIZE - i, DOOR_GFX_PAGEY2 + VYSIZE / 2,
- i, VYSIZE / 2, VX, VY + VYSIZE / 2 - j);
- SetClipOrigin(bitmap, gc, VX - i, (VY + j) - DOOR_GFX_PAGEY2);
- BlitBitmapMasked(bitmap, drawto,
- VXSIZE, DOOR_GFX_PAGEY2 + VYSIZE / 2,
- i, VYSIZE / 2 - j,
- VX + VXSIZE - i, VY + VYSIZE / 2 + j);
- */
-#endif
- }
-
- redraw_mask |= REDRAW_DOOR_2;
- door_2_done = (a == VXSIZE);
- }
-
- if (!(door_state & DOOR_NO_DELAY))
- {
- BackToFront();
-
- if (game_status == GAME_MODE_MAIN)
- DoAnimation();
-
- WaitUntilDelayReached(&door_delay, door_delay_value);
- }
- }
- }
-
- if (door_state & DOOR_ACTION_1)
- door1 = door_state & DOOR_ACTION_1;
- if (door_state & DOOR_ACTION_2)
- door2 = door_state & DOOR_ACTION_2;
-
- return (door1 | door2);
-}
-
-#endif
-
-void DrawSpecialEditorDoor()
-{
-#if 1
- struct GraphicInfo *gfx1 = &graphic_info[IMG_DOOR_2_TOP_BORDER_CORRECTION];
- int top_border_width = gfx1->width;
- int top_border_height = gfx1->height;
- int outer_border = viewport.door_2[GAME_MODE_EDITOR].border_size;
- int ex = EX - outer_border;
- int ey = EY - outer_border;
- int vy = VY - outer_border;
- int exsize = EXSIZE + 2 * outer_border;
-
- CloseDoor(DOOR_CLOSE_2);
-
- /* draw bigger level editor toolbox window */
- BlitBitmap(gfx1->bitmap, drawto, gfx1->src_x, gfx1->src_y,
- top_border_width, top_border_height, ex, ey - top_border_height);
- BlitBitmap(graphic_info[IMG_GLOBAL_BORDER].bitmap, drawto, ex, vy,
- exsize, EYSIZE - VYSIZE + outer_border, ex, ey);
-#else
- /* draw bigger level editor toolbox window */
- BlitBitmap(graphic_info[IMG_GLOBAL_DOOR].bitmap, drawto,
- DOOR_GFX_PAGEX7, 0, EXSIZE + 8, 8,
- EX - 4, EY - 12);
- BlitBitmap(graphic_info[IMG_GLOBAL_BORDER].bitmap, drawto,
- EX - 6, VY - 4, EXSIZE + 12, EYSIZE - VYSIZE + 4,
- EX - 6, EY - 4);
-#endif
-
- redraw_mask |= REDRAW_ALL;
-}
-
-void UndrawSpecialEditorDoor()
-{
-#if 1
- struct GraphicInfo *gfx1 = &graphic_info[IMG_DOOR_2_TOP_BORDER_CORRECTION];
- int top_border_width = gfx1->width;
- int top_border_height = gfx1->height;
- int outer_border = viewport.door_2[GAME_MODE_EDITOR].border_size;
- int ex = EX - outer_border;
- int ey = EY - outer_border;
- int ey_top = ey - top_border_height;
- int exsize = EXSIZE + 2 * outer_border;
- int eysize = EYSIZE + 2 * outer_border;
-
- /* draw normal tape recorder window */
- if (graphic_info[IMG_GLOBAL_BORDER].bitmap)
+ O_DIRT_SLOPED_DOWN_LEFT, TRUE,
+ EL_BD_SAND_SLOPED_DOWN_LEFT, -1, -1
+ },
+ {
+ O_DIRT_SLOPED_DOWN_RIGHT, TRUE,
+ EL_BD_SAND_SLOPED_DOWN_RIGHT, -1, -1
+ },
+ {
+ O_DIRT_BALL, TRUE,
+ EL_BD_SAND_BALL, -1, -1
+ },
+ {
+ O_DIRT_BALL_F, FALSE,
+ EL_BD_SAND_BALL, ACTION_FALLING, -1
+ },
+ {
+ O_DIRT_LOOSE, TRUE,
+ EL_BD_SAND_LOOSE, -1, -1
+ },
+ {
+ O_DIRT_LOOSE_F, FALSE,
+ EL_BD_SAND_LOOSE, ACTION_FALLING, -1
+ },
+ {
+ O_DIRT2, TRUE,
+ EL_BD_SAND_2, -1, -1
+ },
+ {
+ O_BRICK, TRUE,
+ EL_BD_WALL, -1, -1
+ },
+ {
+ O_BRICK_SLOPED_UP_RIGHT, TRUE,
+ EL_BD_WALL_SLOPED_UP_RIGHT, -1, -1
+ },
+ {
+ O_BRICK_SLOPED_UP_LEFT, TRUE,
+ EL_BD_WALL_SLOPED_UP_LEFT, -1, -1
+ },
+ {
+ O_BRICK_SLOPED_DOWN_LEFT, TRUE,
+ EL_BD_WALL_SLOPED_DOWN_LEFT, -1, -1
+ },
+ {
+ O_BRICK_SLOPED_DOWN_RIGHT, TRUE,
+ EL_BD_WALL_SLOPED_DOWN_RIGHT, -1, -1
+ },
+ {
+ O_BRICK_NON_SLOPED, TRUE,
+ EL_BD_WALL_NON_SLOPED, -1, -1
+ },
+ {
+ O_MAGIC_WALL, TRUE,
+ EL_BD_MAGIC_WALL, ACTION_ACTIVE, -1
+ },
+ {
+ O_PRE_OUTBOX, TRUE,
+ EL_BD_EXIT_CLOSED, -1, -1
+ },
+ {
+ O_OUTBOX, TRUE,
+ EL_BD_EXIT_OPEN, -1, -1
+ },
+ {
+ O_PRE_INVIS_OUTBOX, TRUE,
+ EL_BD_INVISIBLE_EXIT_CLOSED, -1, -1
+ },
+ {
+ O_INVIS_OUTBOX, TRUE,
+ EL_BD_INVISIBLE_EXIT_OPEN, -1, -1
+ },
+ {
+ O_STEEL, TRUE,
+ EL_BD_STEELWALL, -1, -1
+ },
+ {
+ O_STEEL_SLOPED_UP_RIGHT, TRUE,
+ EL_BD_STEELWALL_SLOPED_UP_RIGHT, -1, -1
+ },
+ {
+ O_STEEL_SLOPED_UP_LEFT, TRUE,
+ EL_BD_STEELWALL_SLOPED_UP_LEFT, -1, -1
+ },
+ {
+ O_STEEL_SLOPED_DOWN_LEFT, TRUE,
+ EL_BD_STEELWALL_SLOPED_DOWN_LEFT, -1, -1
+ },
+ {
+ O_STEEL_SLOPED_DOWN_RIGHT, TRUE,
+ EL_BD_STEELWALL_SLOPED_DOWN_RIGHT, -1, -1
+ },
+ {
+ O_STEEL_EXPLODABLE, TRUE,
+ EL_BD_STEELWALL_EXPLODABLE, -1, -1
+ },
+ {
+ O_STEEL_EATABLE, TRUE,
+ EL_BD_STEELWALL_DIGGABLE, -1, -1
+ },
+ {
+ O_BRICK_EATABLE, TRUE,
+ EL_BD_WALL_DIGGABLE, -1, -1
+ },
+ {
+ O_STONE, TRUE,
+ EL_BD_ROCK, -1, -1
+ },
+ {
+ O_STONE_F, FALSE,
+ EL_BD_ROCK, ACTION_FALLING, -1
+ },
+ {
+ O_FLYING_STONE, TRUE,
+ EL_BD_FLYING_ROCK, -1, -1
+ },
+ {
+ O_FLYING_STONE_F, FALSE,
+ EL_BD_FLYING_ROCK, ACTION_FALLING, -1
+ },
+ {
+ O_MEGA_STONE, TRUE,
+ EL_BD_MEGA_ROCK, -1, -1
+ },
+ {
+ O_MEGA_STONE_F, FALSE,
+ EL_BD_MEGA_ROCK, ACTION_FALLING, -1
+ },
+ {
+ O_DIAMOND, TRUE,
+ EL_BD_DIAMOND, -1, -1
+ },
+ {
+ O_DIAMOND_F, FALSE,
+ EL_BD_DIAMOND, ACTION_FALLING, -1
+ },
+ {
+ O_FLYING_DIAMOND, TRUE,
+ EL_BD_FLYING_DIAMOND, -1, -1
+ },
+ {
+ O_FLYING_DIAMOND_F, FALSE,
+ EL_BD_FLYING_DIAMOND, ACTION_FALLING, -1
+ },
+ {
+ O_NUT, TRUE,
+ EL_BD_NUT, -1, -1
+ },
+ {
+ O_NUT_F, FALSE,
+ EL_BD_NUT, ACTION_FALLING, -1
+ },
+ {
+ O_BLADDER_SPENDER, TRUE,
+ EL_BD_BLADDER_SPENDER, -1, -1
+ },
+ {
+ O_INBOX, TRUE,
+ EL_BD_INBOX, -1, -1
+ },
+ {
+ O_H_EXPANDING_WALL, TRUE,
+ EL_BD_EXPANDABLE_WALL_HORIZONTAL, -1, -1
+ },
+ {
+ O_V_EXPANDING_WALL, TRUE,
+ EL_BD_EXPANDABLE_WALL_VERTICAL, -1, -1
+ },
+ {
+ O_EXPANDING_WALL, TRUE,
+ EL_BD_EXPANDABLE_WALL_ANY, -1, -1
+ },
+ {
+ O_H_EXPANDING_STEEL_WALL, TRUE,
+ EL_BD_EXPANDABLE_STEELWALL_HORIZONTAL, -1, -1
+ },
+ {
+ O_V_EXPANDING_STEEL_WALL, TRUE,
+ EL_BD_EXPANDABLE_STEELWALL_VERTICAL, -1, -1
+ },
+ {
+ O_EXPANDING_STEEL_WALL, TRUE,
+ EL_BD_EXPANDABLE_STEELWALL_ANY, -1, -1
+ },
+ {
+ O_EXPANDING_WALL_SWITCH, TRUE,
+ EL_BD_EXPANDABLE_WALL_SWITCH_HORIZONTAL, -1, -1
+ },
+ {
+ O_CREATURE_SWITCH, TRUE,
+ EL_BD_CREATURE_SWITCH, -1, -1
+ },
+ {
+ O_BITER_SWITCH, TRUE,
+ EL_BD_BITER_SWITCH_1, -1, -1
+ },
+ {
+ O_REPLICATOR_SWITCH, TRUE,
+ EL_BD_REPLICATOR_SWITCH, -1, -1
+ },
+ {
+ O_CONVEYOR_SWITCH, TRUE,
+ EL_BD_CONVEYOR_SWITCH, -1, -1
+ },
+ {
+ O_CONVEYOR_DIR_SWITCH, TRUE,
+ EL_BD_CONVEYOR_DIR_SWITCH_RIGHT, -1, -1
+ },
+ {
+ O_ACID, TRUE,
+ EL_BD_ACID, -1, -1
+ },
+ {
+ O_FALLING_WALL, TRUE,
+ EL_BD_FALLING_WALL, -1, -1
+ },
+ {
+ O_FALLING_WALL_F, FALSE,
+ EL_BD_FALLING_WALL, ACTION_FALLING, -1
+ },
+ {
+ O_BOX, TRUE,
+ EL_BD_BOX, -1, -1
+ },
+ {
+ O_TIME_PENALTY, TRUE,
+ EL_BD_TIME_PENALTY, -1, -1
+ },
+ {
+ O_GRAVESTONE, TRUE,
+ EL_BD_GRAVESTONE, -1, -1
+ },
+ {
+ O_STONE_GLUED, TRUE,
+ EL_BD_ROCK_GLUED, -1, -1
+ },
+ {
+ O_DIAMOND_GLUED, TRUE,
+ EL_BD_DIAMOND_GLUED, -1, -1
+ },
+ {
+ O_DIAMOND_KEY, TRUE,
+ EL_BD_DIAMOND_KEY, -1, -1
+ },
+ {
+ O_TRAPPED_DIAMOND, TRUE,
+ EL_BD_TRAPPED_DIAMOND, -1, -1
+ },
+ {
+ O_CLOCK, TRUE,
+ EL_BD_CLOCK, -1, -1
+ },
+ {
+ O_DIRT_GLUED, TRUE,
+ EL_BD_SAND_GLUED, -1, -1
+ },
+ {
+ O_KEY_1, TRUE,
+ EL_BD_KEY_1, -1, -1
+ },
+ {
+ O_KEY_2, TRUE,
+ EL_BD_KEY_2, -1, -1
+ },
+ {
+ O_KEY_3, TRUE,
+ EL_BD_KEY_3, -1, -1
+ },
+ {
+ O_DOOR_1, TRUE,
+ EL_BD_GATE_1, -1, -1
+ },
+ {
+ O_DOOR_2, TRUE,
+ EL_BD_GATE_2, -1, -1
+ },
+ {
+ O_DOOR_3, TRUE,
+ EL_BD_GATE_3, -1, -1
+ },
+ {
+ O_POT, TRUE,
+ EL_BD_POT, -1, -1
+ },
+ {
+ O_GRAVITY_SWITCH, TRUE,
+ EL_BD_GRAVITY_SWITCH, -1, -1
+ },
+ {
+ O_PNEUMATIC_HAMMER, TRUE,
+ EL_BD_PNEUMATIC_HAMMER, -1, -1
+ },
+ {
+ O_TELEPORTER, TRUE,
+ EL_BD_TELEPORTER, -1, -1
+ },
+ {
+ O_SKELETON, TRUE,
+ EL_BD_SKELETON, -1, -1
+ },
+ {
+ O_WATER, TRUE,
+ EL_BD_WATER, -1, -1
+ },
+ {
+ O_WATER_1, FALSE,
+ EL_BD_WATER, -1, -1
+ },
+ {
+ O_WATER_2, FALSE,
+ EL_BD_WATER, -1, -1
+ },
+ {
+ O_WATER_3, FALSE,
+ EL_BD_WATER, -1, -1
+ },
+ {
+ O_WATER_4, FALSE,
+ EL_BD_WATER, -1, -1
+ },
+ {
+ O_WATER_5, FALSE,
+ EL_BD_WATER, -1, -1
+ },
+ {
+ O_WATER_6, FALSE,
+ EL_BD_WATER, -1, -1
+ },
+ {
+ O_WATER_7, FALSE,
+ EL_BD_WATER, -1, -1
+ },
+ {
+ O_WATER_8, FALSE,
+ EL_BD_WATER, -1, -1
+ },
+ {
+ O_WATER_9, FALSE,
+ EL_BD_WATER, -1, -1
+ },
+ {
+ O_WATER_10, FALSE,
+ EL_BD_WATER, -1, -1
+ },
+ {
+ O_WATER_11, FALSE,
+ EL_BD_WATER, -1, -1
+ },
+ {
+ O_WATER_12, FALSE,
+ EL_BD_WATER, -1, -1
+ },
+ {
+ O_WATER_13, FALSE,
+ EL_BD_WATER, -1, -1
+ },
+ {
+ O_WATER_14, FALSE,
+ EL_BD_WATER, -1, -1
+ },
+ {
+ O_WATER_15, FALSE,
+ EL_BD_WATER, -1, -1
+ },
+ {
+ O_WATER_16, FALSE,
+ EL_BD_WATER, -1, -1
+ },
+ {
+ O_COW_1, TRUE,
+ EL_BD_COW_LEFT, -1, -1
+ },
+ {
+ O_COW_2, TRUE,
+ EL_BD_COW_UP, -1, -1
+ },
+ {
+ O_COW_3, TRUE,
+ EL_BD_COW_RIGHT, -1, -1
+ },
+ {
+ O_COW_4, TRUE,
+ EL_BD_COW_DOWN, -1, -1
+ },
+ {
+ O_COW_ENCLOSED_1, FALSE,
+ EL_BD_COW_DOWN, -1, -1
+ },
+ {
+ O_COW_ENCLOSED_2, FALSE,
+ EL_BD_COW_DOWN, -1, -1
+ },
+ {
+ O_COW_ENCLOSED_3, FALSE,
+ EL_BD_COW_DOWN, -1, -1
+ },
+ {
+ O_COW_ENCLOSED_4, FALSE,
+ EL_BD_COW_DOWN, -1, -1
+ },
+ {
+ O_COW_ENCLOSED_5, FALSE,
+ EL_BD_COW_DOWN, -1, -1
+ },
+ {
+ O_COW_ENCLOSED_6, FALSE,
+ EL_BD_COW_DOWN, -1, -1
+ },
+ {
+ O_COW_ENCLOSED_7, FALSE,
+ EL_BD_COW_DOWN, -1, -1
+ },
+ {
+ O_WALLED_DIAMOND, TRUE,
+ EL_BD_WALL_DIAMOND, -1, -1
+ },
+ {
+ O_WALLED_KEY_1, TRUE,
+ EL_BD_WALL_KEY_1, -1, -1
+ },
+ {
+ O_WALLED_KEY_2, TRUE,
+ EL_BD_WALL_KEY_2, -1, -1
+ },
+ {
+ O_WALLED_KEY_3, TRUE,
+ EL_BD_WALL_KEY_3, -1, -1
+ },
+ {
+ O_AMOEBA, TRUE,
+ EL_BD_AMOEBA, -1, -1
+ },
+ {
+ O_AMOEBA_2, TRUE,
+ EL_BD_AMOEBA_2, -1, -1
+ },
+ {
+ O_REPLICATOR, TRUE,
+ EL_BD_REPLICATOR, -1, -1
+ },
+ {
+ O_CONVEYOR_LEFT, TRUE,
+ EL_BD_CONVEYOR_LEFT, -1, -1
+ },
+ {
+ O_CONVEYOR_RIGHT, TRUE,
+ EL_BD_CONVEYOR_RIGHT, -1, -1
+ },
+ {
+ O_LAVA, TRUE,
+ EL_BD_LAVA, -1, -1
+ },
+ {
+ O_SWEET, TRUE,
+ EL_BD_SWEET, -1, -1
+ },
+ {
+ O_VOODOO, TRUE,
+ EL_BD_VOODOO_DOLL, -1, -1
+ },
+ {
+ O_SLIME, TRUE,
+ EL_BD_SLIME, -1, -1
+ },
+ {
+ O_BLADDER, TRUE,
+ EL_BD_BLADDER, -1, -1
+ },
+ {
+ O_BLADDER_1, FALSE,
+ EL_BD_BLADDER, -1, -1
+ },
+ {
+ O_BLADDER_2, FALSE,
+ EL_BD_BLADDER, -1, -1
+ },
+ {
+ O_BLADDER_3, FALSE,
+ EL_BD_BLADDER, -1, -1
+ },
+ {
+ O_BLADDER_4, FALSE,
+ EL_BD_BLADDER, -1, -1
+ },
+ {
+ O_BLADDER_5, FALSE,
+ EL_BD_BLADDER, -1, -1
+ },
+ {
+ O_BLADDER_6, FALSE,
+ EL_BD_BLADDER, -1, -1
+ },