- { EL_STEELWALL_TOPLEFT, EL_INVISIBLE_STEELWALL_TOPLEFT },
- { EL_STEELWALL_TOPRIGHT, EL_INVISIBLE_STEELWALL_TOPRIGHT },
- { EL_STEELWALL_BOTTOMLEFT, EL_INVISIBLE_STEELWALL_BOTTOMLEFT },
- { EL_STEELWALL_BOTTOMRIGHT, EL_INVISIBLE_STEELWALL_BOTTOMRIGHT },
- { EL_STEELWALL_VERTICAL, EL_INVISIBLE_STEELWALL_VERTICAL },
- { EL_STEELWALL_HORIZONTAL, EL_INVISIBLE_STEELWALL_HORIZONTAL },
- { EL_STEELWALL, EL_INVISIBLE_STEELWALL },
- { EL_EMPTY, EL_EMPTY }
- };
- int steel_type = (BorderElement == EL_STEELWALL ? 0 : 1);
- int steel_position = (ex == -1 && ey == -1 ? 0 :
- ex == +1 && ey == -1 ? 1 :
- ex == -1 && ey == +1 ? 2 :
- ex == +1 && ey == +1 ? 3 :
- ex == -1 || ex == +1 ? 4 :
- ey == -1 || ey == +1 ? 5 : 7);
- int element = border[steel_position][steel_type];
-
- DrawMiniGraphic(sx, sy, el2edimg(element));
+ int xsize = level.envelope_xsize[envelope_nr] + 2;
+ int ysize = i + 2;
+ int startx = (SXSIZE - xsize * font_width) / 2;
+ int starty = (SYSIZE - ysize * font_height) / 2;
+
+ SetDrawtoField(DRAW_BUFFERED);
+
+ BlitBitmap(fieldbuffer, backbuffer, FX, FY, SXSIZE, SYSIZE, SX, SY);
+
+ SetDrawtoField(DRAW_BACKBUFFER);
+
+#if 1
+ for (y=0; y < ysize; y++) for (x=0; x < xsize; x++)
+ DrawEnvelopeBackground(startx, starty, x, y, xsize, ysize, font_nr);
+#else
+ for (y=0; y < ysize; y++) for (x=0; x < xsize; x++)
+ {
+ int sx = SX + startx + x * font_width;
+ int sy = SY + starty + y * font_height;
+ int ex = (x == 0 ? -1 : x == xsize - 1 ? +1 : 0);
+ int ey = (y == 0 ? -1 : y == ysize - 1 ? +1 : 0);
+
+ DrawEnvelopeBackground(sx, sy, ex, ey, font_nr);
+ }
+#endif
+
+ DrawTextToTextArea(SX + startx + font_width, SY + starty + font_height,
+ level.envelope_text[envelope_nr], FONT_TEXT_1,
+ level.envelope_xsize[envelope_nr], i, mask_mode);
+
+ redraw_mask |= REDRAW_FIELD | REDRAW_FROM_BACKBUFFER;
+ BackToFront();
+
+ Delay(anim_delay);
+ }
+
+ if (tape.playing)
+ Delay(wait_delay);
+ else
+ WaitForEventToContinue();
+
+ if (game.envelope.anim_mode > 0)
+ {
+ /* close envelope window vertically */
+ for (i = level.envelope_ysize[envelope_nr]; i >= 0; i--)
+ {
+ int xsize = level.envelope_xsize[envelope_nr] + 2;
+ int ysize = i + 2;
+ int startx = (SXSIZE - xsize * font_width) / 2;
+ int starty = (SYSIZE - ysize * font_height) / 2;
+
+ SetDrawtoField(DRAW_BUFFERED);
+
+ BlitBitmap(fieldbuffer, backbuffer, FX, FY, SXSIZE, SYSIZE, SX, SY);
+
+ SetDrawtoField(DRAW_BACKBUFFER);
+
+#if 1
+ for (y=0; y < ysize; y++) for (x=0; x < xsize; x++)
+ DrawEnvelopeBackground(startx, starty, x, y, xsize, ysize, font_nr);
+#else
+ for (y=0; y < ysize; y++) for (x=0; x < xsize; x++)
+ {
+ int sx = SX + startx + x * font_width;
+ int sy = SY + starty + y * font_height;
+ int ex = (x == 0 ? -1 : x == xsize - 1 ? +1 : 0);
+ int ey = (y == 0 ? -1 : y == ysize - 1 ? +1 : 0);
+
+ DrawEnvelopeBackground(sx, sy, ex, ey, font_nr);
+ }
+#endif
+
+ DrawTextToTextArea(SX + startx + font_width, SY + starty + font_height,
+ level.envelope_text[envelope_nr], FONT_TEXT_1,
+ level.envelope_xsize[envelope_nr], i, mask_mode);
+
+ redraw_mask |= REDRAW_FIELD | REDRAW_FROM_BACKBUFFER;
+ BackToFront();
+
+ Delay(anim_delay);
+ }
+ }
+
+ if (game.envelope.anim_mode > 1)
+ {
+ /* close envelope window horizontally */
+ for (i = level.envelope_xsize[envelope_nr]; i >= 0; i--)
+ {
+ int xsize = i + 2;
+ int ysize = 2;
+ int startx = (SXSIZE - xsize * font_width) / 2;
+ int starty = (SYSIZE - ysize * font_height) / 2;
+
+ SetDrawtoField(DRAW_BUFFERED);
+
+ BlitBitmap(fieldbuffer, backbuffer, FX, FY, SXSIZE, SYSIZE, SX, SY);
+
+ SetDrawtoField(DRAW_BACKBUFFER);
+
+#if 1
+ for (y=0; y < ysize; y++) for (x=0; x < xsize; x++)
+ DrawEnvelopeBackground(startx, starty, x, y, xsize, ysize, font_nr);
+#else
+ for (y=0; y < ysize; y++) for (x=0; x < xsize; x++)
+ {
+ int sx = SX + startx + x * font_width;
+ int sy = SY + starty + y * font_height;
+ int ex = (x == 0 ? -1 : x == xsize - 1 ? +1 : 0);
+ int ey = (y == 0 ? -1 : y == ysize - 1 ? +1 : 0);
+
+ DrawEnvelopeBackground(sx, sy, ex, ey, font_nr);
+ }