+ if ((door_state & door_token) & DOOR_OPEN)
+ {
+#if 0
+ // !!! TEST !!!
+ if (nr != 2)
+ continue;
+#endif
+
+#if 0
+ if (k == 0)
+ printf("::: step_xoffset == %d, step_yoffset == %d\n",
+ pos->step_xoffset, pos->step_yoffset);
+#endif
+
+ if (pos->step_xoffset < 0)
+ {
+#if 1
+ src_xx = 0;
+ dst_xx = pos->x + ABS(k * pos->step_xoffset);
+ width = g->width;
+
+ if (dst_xx + width > door_rect->width)
+ width = door_rect->width - dst_xx;
+#else
+ src_xx = 0;
+ width = g->width + k * pos->step_xoffset;
+
+ if (width > door_rect->width)
+ width = door_rect->width;
+
+ dst_xx = door_rect->width - width;
+#endif
+ }
+ else
+ {
+ src_xx = 0;
+ dst_xx = pos->x - k * pos->step_xoffset;
+
+ if (dst_xx < 0)
+ {
+ src_xx = ABS(dst_xx);
+ dst_xx = 0;
+ }
+
+ width = g->width - src_xx;
+ }
+
+ if (pos->step_yoffset < 0)
+ {
+#if 1
+ src_yy = 0;
+ dst_yy = pos->y + ABS(k * pos->step_yoffset);
+ height = g->height;
+
+ if (dst_yy + height > door_rect->height)
+ height = door_rect->height - dst_yy;
+#else
+ src_yy = 0;
+ height = g->height + k * pos->step_yoffset;
+
+ if (height > door_rect->height)
+ height = door_rect->height;
+
+ dst_yy = door_rect->height - height;
+#endif
+ }
+ else
+ {
+ src_yy = 0;
+ dst_yy = pos->y - k * pos->step_yoffset;
+
+ if (dst_yy < 0)
+ {
+ src_yy = ABS(dst_yy);
+ dst_yy = 0;
+ }
+
+ height = g->height - src_yy;
+ }
+
+ if (width < 0 || height < 0)
+ door_part_done[nr] = TRUE;
+ }
+ else // DOOR_CLOSE
+ {
+#if 1
+ // !!! TEST !!!
+
+ door_part_done[nr] = TRUE;
+
+ BlitBitmapMasked(g->bitmap, drawto, g->src_x, g->src_y,
+ g->width, g->height,
+ door_rect->x + pos->x, door_rect->y + pos->y);
+
+ redraw_mask |= REDRAW_DOOR_FROM_TOKEN(door_token);
+#else
+ src_xx = (num_xsteps[nr] - k) * pos->step_xoffset;
+ src_yy = (num_ysteps[nr] - k) * pos->step_yoffset;
+ dst_xx = pos->x;
+ dst_yy = pos->y;
+ width = g->width - src_xx;
+ height = g->height - src_yy;
+
+ // if (width < ABS(pos->step_xoffset)
+
+
+
+
+ src_xx = g->width - k * pos->step_xoffset;
+ src_yy = g->height - k * pos->step_yoffset;
+ dst_xx = pos->x;
+ dst_yy = pos->y;
+
+ if (width < 0 || height < 0)
+ door_part_done[nr] = TRUE;
+#endif
+ }
+
+ if (door_part_done[nr])
+ continue;
+
+#if 0
+ // !!! TEST !!!
+ if (nr != 7)
+ continue;
+#endif
+
+ BlitBitmapMasked(g->bitmap, drawto,
+ g->src_x + src_xx, g->src_y + src_yy, width, height,
+ door_rect->x + dst_xx, door_rect->y + dst_yy);
+#else
+ // !!! TEST !!!
+ if (!((door_state & door_token) & DOOR_CLOSE))
+ continue;
+
+ BlitBitmapMasked(g->bitmap, drawto, g->src_x, g->src_y,
+ g->width, g->height,
+ door_rect->x + pos->x, door_rect->y + pos->y);