- int i = (door_state & DOOR_OPEN_2 ? VXSIZE - x : x);
- int j = (VXSIZE - i) / 3;
-
- BlitBitmap(bitmap_db_door, drawto,
- DOOR_GFX_PAGEX1, DOOR_GFX_PAGEY2 + i/2,
- VXSIZE, VYSIZE - i/2, VX, VY);
-
- ClearRectangle(drawto, VX, VY + VYSIZE-i/2, VXSIZE, i/2);
-
- 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);
+ int a = MIN(x * door_2.step_offset, VXSIZE);
+ int i = (door_state & DOOR_OPEN_2 ? VXSIZE - a : a);
+
+ if (x <= VYSIZE)
+ {
+ BlitBitmap(bitmap_db_door, drawto,
+ DOOR_GFX_PAGEX1, DOOR_GFX_PAGEY2 + i / 2,
+ VXSIZE, VYSIZE - i / 2, VX, VY);
+
+ ClearRectangle(drawto, VX, VY + VYSIZE - i / 2, VXSIZE, i / 2);
+ }
+
+ if (door_2.anim_mode == ANIM_HORIZONTAL && x <= VXSIZE)
+ {
+ int src1_x = VXSIZE, src1_y = DOOR_GFX_PAGEY2;
+ int dst1_x = VX + VXSIZE - i, dst1_y = VY;
+ int src2_x = VXSIZE - i, src2_y = DOOR_GFX_PAGEY2;
+ 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);
+ }
+ else if (door_2.anim_mode == ANIM_VERTICAL && x <= VYSIZE)
+ {
+ int src1_x = VXSIZE, src1_y = DOOR_GFX_PAGEY2;
+ int dst1_x = VX, dst1_y = VY + VYSIZE - i;
+ int src2_x = 0, src2_y = DOOR_GFX_PAGEY2 + 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);
+ }
+ else if (x <= VXSIZE) /* ANIM_DEFAULT */
+ {
+ int j = (door_2.anim_mode == ANIM_DEFAULT ? (VXSIZE - i) / 3 : 0);
+
+ 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);
+ }