}
}
-void DrawTileCursor(int draw_target)
+void DrawTileCursor(int draw_target, int drawing_stage)
{
- DrawTileCursor_MM(draw_target, game_status == GAME_MODE_PLAYING);
+ int tile_cursor_active = (game_status == GAME_MODE_PLAYING);
+
+ DrawTileCursor_MM(draw_target, drawing_stage, tile_cursor_active);
}
void BlitScreenToBitmapExt_RND(Bitmap *target_bitmap, int fx, int fy)
boolean ffwd_delay = (tape.playing && tape.fast_forward);
boolean no_delay = (tape.warp_forward);
int delay_value = (ffwd_delay ? delay_value_fast : delay_value_normal);
- int anim_delay_value = MAX(1, (no_delay ? 0 : delay_value + 500 * 0) / 2);
+ int anim_delay_value = MAX(1, (no_delay ? 0 : delay_value) / 2);
DelayCounter anim_delay = { anim_delay_value };
int tile_size = MAX(request.step_offset, 1);
static void DoRequestBefore(void)
{
+ boolean game_ended = (game_status == GAME_MODE_PLAYING && checkGameEnded());
+
+ // when showing request dialog after game ended, deactivate game panel
+ if (game_ended)
+ game.panel.active = FALSE;
+
if (game_status == GAME_MODE_PLAYING)
BlitScreenToBitmap(backbuffer);
TapeDeactivateDisplayOn();
}
-static boolean RequestDoor(char *text, unsigned int req_state)
+static void DrawRequestDoorText(char *text)
{
- int draw_buffer_last = GetDrawtoField();
- unsigned int old_door_state = GetDoorState();
+ char *text_ptr = text;
int max_request_line_len = MAX_REQUEST_LINE_FONT1_LEN;
int font_nr = FONT_TEXT_2;
- char *text_ptr;
- int result;
int ty;
+ // force DOOR font inside door area
+ SetFontStatus(GAME_MODE_PSEUDO_DOOR);
+
if (maxWordLengthInRequestString(text) > MAX_REQUEST_LINE_FONT1_LEN)
{
max_request_line_len = MAX_REQUEST_LINE_FONT2_LEN;
font_nr = FONT_TEXT_1;
}
- DoRequestBefore();
-
- // draw released gadget before proceeding
- // BackToFront();
-
- if (old_door_state & DOOR_OPEN_1)
- {
- CloseDoor(DOOR_CLOSE_1);
-
- // save old door content
- BlitBitmap(bitmap_db_door_1, bitmap_db_door_1,
- 0 * DXSIZE, 0, DXSIZE, DYSIZE, 1 * DXSIZE, 0);
- }
-
- SetDoorBackgroundImage(IMG_BACKGROUND_DOOR);
- SetDrawBackgroundMask(REDRAW_FIELD | REDRAW_DOOR_1);
-
- // clear door drawing field
- DrawBackground(DX, DY, DXSIZE, DYSIZE);
-
- // force DOOR font inside door area
- SetFontStatus(GAME_MODE_PSEUDO_DOOR);
-
- // write text for request
for (text_ptr = text, ty = 0; ty < MAX_REQUEST_LINES; ty++)
{
char text_line[max_request_line_len + 1];
for (tl = 0, tx = 0; tx < max_request_line_len; tl++, tx++)
{
tc = *(text_ptr + tx);
- // if (!tc || tc == ' ')
if (!tc || tc == ' ' || tc == '?' || tc == '!')
break;
}
text_line, font_nr);
text_ptr += tl + (tc == ' ' ? 1 : 0);
- // text_ptr += tl + (tc == ' ' || tc == '?' || tc == '!' ? 1 : 0);
}
ResetFontStatus();
+}
+
+static int RequestDoor(char *text, unsigned int req_state)
+{
+ unsigned int old_door_state = GetDoorState();
+ int draw_buffer_last = GetDrawtoField();
+ int result;
+
+ if (old_door_state & DOOR_OPEN_1)
+ {
+ CloseDoor(DOOR_CLOSE_1);
+
+ // save old door content
+ BlitBitmap(bitmap_db_door_1, bitmap_db_door_1,
+ 0, 0, DXSIZE, DYSIZE, DXSIZE, 0);
+ }
+
+ SetDoorBackgroundImage(IMG_BACKGROUND_DOOR);
+ SetDrawBackgroundMask(REDRAW_FIELD | REDRAW_DOOR_1);
+
+ // clear door drawing field
+ DrawBackground(DX, DY, DXSIZE, DYSIZE);
+
+ // write text for request
+ DrawRequestDoorText(text);
MapToolButtons(req_state);
OpenDoor(DOOR_OPEN_1);
- SetDrawBackgroundMask(REDRAW_FIELD | REDRAW_DOOR_1);
-
// ---------- handle request buttons ----------
result = RequestHandleEvents(req_state, draw_buffer_last);
OpenDoor(DOOR_OPEN_1 | DOOR_COPY_BACK);
}
- DoRequestAfter();
-
return result;
}
-static boolean RequestEnvelope(char *text, unsigned int req_state)
+static int RequestEnvelope(char *text, unsigned int req_state)
{
int draw_buffer_last = GetDrawtoField();
int result;
- DoRequestBefore();
-
DrawEnvelopeRequest(text, req_state);
ShowEnvelopeRequest(text, req_state, ACTION_OPENING);
- SetDrawBackgroundMask(REDRAW_FIELD | REDRAW_DOOR_1);
-
// ---------- handle request buttons ----------
result = RequestHandleEvents(req_state, draw_buffer_last);
ShowEnvelopeRequest(text, req_state, ACTION_CLOSING);
- DoRequestAfter();
-
return result;
}
-boolean Request(char *text, unsigned int req_state)
+int Request(char *text, unsigned int req_state)
{
- boolean game_ended = (game_status == GAME_MODE_PLAYING && checkGameEnded());
boolean overlay_enabled = GetOverlayEnabled();
- boolean result;
-
- // when showing request dialog after game ended, deactivate game panel
- if (game_ended)
- game.panel.active = FALSE;
+ int result;
game.request_active = TRUE;
SetOverlayEnabled(FALSE);
+ DoRequestBefore();
+
if (global.use_envelope_request)
result = RequestEnvelope(text, req_state);
else
result = RequestDoor(text, req_state);
+ DoRequestAfter();
+
SetOverlayEnabled(overlay_enabled);
game.request_active = FALSE;