- door_delay_value = max_step_delay;
-
-#if 0
- door_delay_value *= 10;
-#endif
-
-#if 0
- printf("::: num_move_steps == %d, max_move_delay == %d, max_step_delay == %d\n", num_move_steps, max_move_delay, max_step_delay);
-#endif
-
- for (k = 0; k < num_move_steps; k++)
- {
- door_part_done_all = TRUE;
-
- for (i = 0; i < NUM_DOORS; i++)
- door_panel_drawn[i] = FALSE;
-
- for (i = 0; i < MAX_DOOR_PARTS; i++)
- {
- int nr = door_part_order[i].nr;
- struct DoorPartControlInfo *dpc = &door_part_controls[nr];
- struct DoorPartPosInfo *pos = dpc->pos;
- struct GraphicInfo *g = &graphic_info[dpc->graphic];
- int door_token = dpc->door_token;
- int door_index = DOOR_INDEX_FROM_TOKEN(door_token);
- boolean is_panel = DOOR_PART_IS_PANEL(nr);
-#if 0
- struct XY *panel_pos = &panel_pos_list[door_index];
-#endif
- struct Rect *door_rect = &door_rect_list[door_index];
- Bitmap *bitmap_db_door = (door_token == DOOR_1 ? bitmap_db_door_1 :
- bitmap_db_door_2);
- Bitmap *bitmap = (is_panel ? bitmap_db_door : g->bitmap);
- int current_door_state = door_state & door_token;
- boolean door_opening = ((current_door_state & DOOR_OPEN) != 0);
- boolean door_closing = !door_opening;
- boolean part_opening = (is_panel ? door_closing : door_opening);
- boolean part_closing = !part_opening;
- int start_step = (part_opening ? pos->start_step_opening :
- pos->start_step_closing);
- int step_delay = pos->step_delay;
- int step_factor = step_delay / max_step_delay;
- int k1 = (step_factor ? k / step_factor + 1 : k);
- int k2 = (part_opening ? k1 + start_step : num_steps[nr] - k1);
- int kk = (k2 < 0 ? 0 : k2);
- int src_x, src_y, src_xx, src_yy;
- int dst_x, dst_y, dst_xx, dst_yy;
- int width, height;
-
-#if 0
- if (k == 0 && is_panel && door_token == DOOR_2)
- printf("::: %d, %d\n", g->width, g->height);
-#endif
-
-#if 0
- if (DOOR_PART_IS_PANEL(nr))
- {
- int start_step = pos->start_step;
-
- k2 = (door_closing ? k1 : num_steps[nr] - k1);// - start_step;
- kk = (k2 < 0 ? 0 : k2);
- }
-#endif
-
-#if 0
- // !!! TEST !!!
- if (nr != 16 && nr != 0)
- continue;
-#endif
-
-#if 0
- // !!! TEST !!!
- if (!is_panel)
- continue;
-#endif
-
-#if 1
- if (door_part_skip[nr])
- continue;
-#endif
-
- if (!(door_state & door_token))
- continue;
-
- if (!g->bitmap)
- continue;
-
-#if 0
- if (current_move_delay % step_delay)
- continue;
-#endif
-
- // draw door panel
-
- if (!door_panel_drawn[door_index])
- {
-#if 1
- ClearRectangle(drawto, door_rect->x, door_rect->y,
- door_rect->width, door_rect->height);
-#else
- BlitBitmap(bitmap_db_door, drawto, panel_pos->x, panel_pos->y,
- door_rect->width, door_rect->height,
- door_rect->x, door_rect->y);
-#endif
-
- door_panel_drawn[door_index] = TRUE;
- }
-
- // draw opening or closing door parts
-
- if (pos->step_xoffset < 0) // door part on right side
- {
- src_xx = 0;
- dst_xx = pos->x + ABS(kk * pos->step_xoffset);
- width = g->width;
-
- if (dst_xx + width > door_rect->width)
- width = door_rect->width - dst_xx;
- }
- else // door part on left side
- {
- src_xx = 0;
- dst_xx = pos->x - kk * pos->step_xoffset;
-
- if (dst_xx < 0)
- {
- src_xx = ABS(dst_xx);
- dst_xx = 0;
- }
-
- width = g->width - src_xx;
-
- // printf("::: k == %d [%d] \n", k, start_step);
- }
-
- if (pos->step_yoffset < 0) // door part on bottom side
- {
- src_yy = 0;
- dst_yy = pos->y + ABS(kk * pos->step_yoffset);
- height = g->height;
-
- if (dst_yy + height > door_rect->height)
- height = door_rect->height - dst_yy;
- }
- else // door part on top side
- {
- src_yy = 0;
- dst_yy = pos->y - kk * pos->step_yoffset;
-
- if (dst_yy < 0)
- {
- src_yy = ABS(dst_yy);
- dst_yy = 0;
- }
-
- height = g->height - src_yy;
- }
-
- if (is_panel)
- {
-#if 1
- src_x = src_xx;
- src_y = src_yy;
-#else
- src_x = panel_pos->x + src_xx;
- src_y = panel_pos->y + src_yy;
-#endif
- }
- else
- {
- src_x = g->src_x + src_xx;
- src_y = g->src_y + src_yy;
- }
-
- dst_x = door_rect->x + dst_xx;
- dst_y = door_rect->y + dst_yy;
-
-#if 0
- if (DOOR_PART_IS_PANEL(nr))
- {
- printf("::: width == %d, height == %d [%d, %d] [%d, %d]\n",
- width, height, g->width, g->height, src_x, src_y);
- }
-#endif
-
- if (width >= 0 && width <= g->width &&
- height >= 0 && height <= g->height)
- {
- if (is_panel || !pos->draw_masked)
- BlitBitmap(bitmap, drawto, src_x, src_y, width, height,
- dst_x, dst_y);
- else
- BlitBitmapMasked(bitmap, drawto, src_x, src_y, width, height,
- dst_x, dst_y);
- }
-
-#if 0
- if (DOOR_PART_IS_PANEL(nr))
- {
- bitmap = bitmap_db_door;
- src_x = panel_pos->x + src_xx;
- src_y = panel_pos->y + src_yy;
-
- printf("::: width == %d, height == %d [%d, %d] [%d, %d]\n",
- width, height, g->width, g->height, src_x, src_y);
-
- if (width >= 0 && width <= g->width &&
- height >= 0 && height <= g->height)
- BlitBitmap(bitmap, drawto, src_x, src_y,
- width, height,
- dst_x, dst_y);
- }
-#endif
-
- redraw_mask |= REDRAW_DOOR_FROM_TOKEN(door_token);
-
-#if 1
- if ((part_opening && (width < 0 || height < 0)) ||
- (part_closing && (width >= g->width && height >= g->height)))
- door_part_done[nr] = TRUE;
-#else
- if ((door_opening && (width < 0 || height < 0)) ||
- (door_closing && (width >= g->width && height >= g->height)))
- door_part_done[nr] = TRUE;
-#endif
-
-#if 1
- // continue door part animations, but not panel after door has closed
- if (!door_part_done[nr] &&
- !(is_panel && door_closing && panel_has_doors[door_index]))
- door_part_done_all = FALSE;
-#else
- // continue door part animations, but not panel after door has closed
- if (!door_part_done[nr] && !(is_panel && door_closing))
- door_part_done_all = FALSE;
-#endif
-
-#if 0
- if (!door_part_done[nr])
- printf("::: k == %d, nr == %d\n", k, nr);
-#endif
- }
-
- if (!(door_state & DOOR_NO_DELAY))
- {
- BackToFront();
-
- if (game_status == GAME_MODE_MAIN)
- DoAnimation();
-
- WaitUntilDelayReached(&door_delay, door_delay_value);
-
- current_move_delay += max_step_delay;
- }
-
-#if 0
- door_part_done_all = TRUE;
-
- for (i = 0; i < MAX_DOOR_PARTS; i++)
- if (!door_part_done[i] &&
- !(DOOR_PART_IS_PANEL(i) && door_closing))
- door_part_done_all = FALSE;
-#endif
-#if 1
- if (door_part_done_all)
- break;
-#endif
- }
- }
-
- if (door_state & DOOR_ACTION_1)
- door1 = door_state & DOOR_ACTION_1;
- if (door_state & DOOR_ACTION_2)
- door2 = door_state & DOOR_ACTION_2;
-
-#if 0
- printf("::: DOORS DONE %08x\n", door_state);
- Delay(3000);
- printf("::: GO!\n");
-#endif
-
- return (door1 | door2);
-}
-
-#else
-
-// ========== OLD ==============================================================
-
-unsigned int MoveDoor(unsigned int door_state)
-{
- static int door1 = DOOR_OPEN_1;
- static int door2 = DOOR_CLOSE_2;
- unsigned int door_delay = 0;
- unsigned int door_delay_value;
- int stepsize = 1;
-
-#if 1
- if (door_1.width < 0 || door_1.width > DXSIZE)
- door_1.width = DXSIZE;
- if (door_1.height < 0 || door_1.height > DYSIZE)
- door_1.height = DYSIZE;
- if (door_2.width < 0 || door_2.width > VXSIZE)
- door_2.width = VXSIZE;
- if (door_2.height < 0 || door_2.height > VYSIZE)
- door_2.height = VYSIZE;
-#endif
-
- if (door_state == DOOR_GET_STATE)
- return (door1 | door2);
-
- if (door_state & DOOR_SET_STATE)
- {
- 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);
- }
-
- if (!(door_state & DOOR_FORCE_REDRAW))
- {
- if (door1 == DOOR_OPEN_1 && door_state & DOOR_OPEN_1)
- door_state &= ~DOOR_OPEN_1;
- else if (door1 == DOOR_CLOSE_1 && door_state & DOOR_CLOSE_1)
- door_state &= ~DOOR_CLOSE_1;
- if (door2 == DOOR_OPEN_2 && door_state & DOOR_OPEN_2)
- door_state &= ~DOOR_OPEN_2;
- else if (door2 == DOOR_CLOSE_2 && door_state & DOOR_CLOSE_2)
- door_state &= ~DOOR_CLOSE_2;
- }
-
- door_delay_value = (door_state & DOOR_ACTION_1 ? door_1.step_delay :
- door_2.step_delay);
-
- // door_delay_value *= 4; // !!! TEST ONLY !!!
-
- if (setup.quick_doors)
- {
- stepsize = 20; /* must be chosen to always draw last frame */
- door_delay_value = 0;
- }
-
- if (global.autoplay_leveldir)
- {
- door_state |= DOOR_NO_DELAY;
- door_state &= ~DOOR_CLOSE_ALL;
- }
-
-#if 1
- if (game_status == GAME_MODE_EDITOR)
- door_state |= DOOR_NO_DELAY;
-#endif
-
- if (door_state & DOOR_ACTION)
- {
-#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)
- {
- BlitBitmap(graphic_info[IMG_GLOBAL_BORDER].bitmap, drawto,
- ex, ey_top, top_border_width, top_border_height,
- ex, ey_top);
- BlitBitmap(graphic_info[IMG_GLOBAL_BORDER].bitmap, drawto,
- ex, ey, exsize, eysize, ex, ey);
- }
- else
- {
- // if screen background is set to "[NONE]", clear editor toolbox window
- ClearRectangle(drawto, ex, ey_top, top_border_width, top_border_height);
- ClearRectangle(drawto, ex, ey, exsize, eysize);
- }
-#else
- /* draw normal tape recorder window */
- BlitBitmap(graphic_info[IMG_GLOBAL_BORDER].bitmap, drawto,
- EX - 6, EY - 12, EXSIZE + 12, EYSIZE - VYSIZE + 12,
- EX - 6, EY - 12);
-#endif
-
- redraw_mask |= REDRAW_ALL;
-}
-
-
-/* ---------- new tool button stuff ---------------------------------------- */
-
-#if 1
-
-static struct
-{
- int graphic;
- struct TextPosInfo *pos;
- int gadget_id;
- char *infotext;
-} toolbutton_info[NUM_TOOL_BUTTONS] =
-{
- {
- IMG_REQUEST_BUTTON_GFX_YES, &request.button.yes,
- TOOL_CTRL_ID_YES, "yes"
- },
- {
- IMG_REQUEST_BUTTON_GFX_NO, &request.button.no,
- TOOL_CTRL_ID_NO, "no"
- },
- {
- IMG_REQUEST_BUTTON_GFX_CONFIRM, &request.button.confirm,
- TOOL_CTRL_ID_CONFIRM, "confirm"
- },
- {
- IMG_REQUEST_BUTTON_GFX_PLAYER_1, &request.button.player_1,
- TOOL_CTRL_ID_PLAYER_1, "player 1"
- },
- {
- IMG_REQUEST_BUTTON_GFX_PLAYER_2, &request.button.player_2,
- TOOL_CTRL_ID_PLAYER_2, "player 2"
- },
- {
- IMG_REQUEST_BUTTON_GFX_PLAYER_3, &request.button.player_3,
- TOOL_CTRL_ID_PLAYER_3, "player 3"
- },
- {
- IMG_REQUEST_BUTTON_GFX_PLAYER_4, &request.button.player_4,
- TOOL_CTRL_ID_PLAYER_4, "player 4"
- }
-};
-
-void CreateToolButtons()
-{
- int i;
-
- for (i = 0; i < NUM_TOOL_BUTTONS; i++)
- {
- struct GraphicInfo *gfx = &graphic_info[toolbutton_info[i].graphic];
- struct TextPosInfo *pos = toolbutton_info[i].pos;
- struct GadgetInfo *gi;
- Bitmap *deco_bitmap = None;
- int deco_x = 0, deco_y = 0, deco_xpos = 0, deco_ypos = 0;
- unsigned int event_mask = GD_EVENT_RELEASED;
- int dx = DX;
- int dy = DY;
- int gd_x = gfx->src_x;
- int gd_y = gfx->src_y;
- int gd_xp = gfx->src_x + gfx->pressed_xoffset;
- int gd_yp = gfx->src_y + gfx->pressed_yoffset;
- int id = i;
-
- if (global.use_envelope_request)
- setRequestPosition(&dx, &dy, TRUE);
-
- if (id >= TOOL_CTRL_ID_PLAYER_1 && id <= TOOL_CTRL_ID_PLAYER_4)
- {
- int player_nr = id - TOOL_CTRL_ID_PLAYER_1;
-
- getSizedGraphicSource(PLAYER_NR_GFX(IMG_PLAYER_1, player_nr), 0,
- pos->size, &deco_bitmap, &deco_x, &deco_y);
- deco_xpos = (gfx->width - pos->size) / 2;
- deco_ypos = (gfx->height - pos->size) / 2;
- }
-
- gi = CreateGadget(GDI_CUSTOM_ID, id,
- GDI_INFO_TEXT, toolbutton_info[i].infotext,
- GDI_X, dx + GDI_ACTIVE_POS(pos->x),
- GDI_Y, dy + GDI_ACTIVE_POS(pos->y),
- GDI_WIDTH, gfx->width,
- GDI_HEIGHT, gfx->height,
- GDI_TYPE, GD_TYPE_NORMAL_BUTTON,
- GDI_STATE, GD_BUTTON_UNPRESSED,
- GDI_DESIGN_UNPRESSED, gfx->bitmap, gd_x, gd_y,
- GDI_DESIGN_PRESSED, gfx->bitmap, gd_xp, gd_yp,
- GDI_DECORATION_DESIGN, deco_bitmap, deco_x, deco_y,
- GDI_DECORATION_POSITION, deco_xpos, deco_ypos,
- GDI_DECORATION_SIZE, pos->size, pos->size,
- GDI_DECORATION_SHIFTING, 1, 1,
- GDI_DIRECT_DRAW, FALSE,
- GDI_EVENT_MASK, event_mask,
- GDI_CALLBACK_ACTION, HandleToolButtons,
- GDI_END);
-
- if (gi == NULL)
- Error(ERR_EXIT, "cannot create gadget");
-
- tool_gadget[id] = gi;
- }
-}
-
-#else
-
-/* graphic position values for tool buttons */
-#define TOOL_BUTTON_YES_XPOS 2
-#define TOOL_BUTTON_YES_YPOS 250
-#define TOOL_BUTTON_YES_GFX_YPOS 0
-#define TOOL_BUTTON_YES_XSIZE 46
-#define TOOL_BUTTON_YES_YSIZE 28
-#define TOOL_BUTTON_NO_XPOS 52
-#define TOOL_BUTTON_NO_YPOS TOOL_BUTTON_YES_YPOS
-#define TOOL_BUTTON_NO_GFX_YPOS TOOL_BUTTON_YES_GFX_YPOS
-#define TOOL_BUTTON_NO_XSIZE TOOL_BUTTON_YES_XSIZE
-#define TOOL_BUTTON_NO_YSIZE TOOL_BUTTON_YES_YSIZE
-#define TOOL_BUTTON_CONFIRM_XPOS TOOL_BUTTON_YES_XPOS
-#define TOOL_BUTTON_CONFIRM_YPOS TOOL_BUTTON_YES_YPOS
-#define TOOL_BUTTON_CONFIRM_GFX_YPOS 30
-#define TOOL_BUTTON_CONFIRM_XSIZE 96
-#define TOOL_BUTTON_CONFIRM_YSIZE TOOL_BUTTON_YES_YSIZE
-#define TOOL_BUTTON_PLAYER_XSIZE 30
-#define TOOL_BUTTON_PLAYER_YSIZE 30
-#define TOOL_BUTTON_PLAYER_GFX_XPOS 5
-#define TOOL_BUTTON_PLAYER_GFX_YPOS 185
-#define TOOL_BUTTON_PLAYER_XPOS (5 + TOOL_BUTTON_PLAYER_XSIZE / 2)
-#define TOOL_BUTTON_PLAYER_YPOS (215 - TOOL_BUTTON_PLAYER_YSIZE / 2)
-#define TOOL_BUTTON_PLAYER1_XPOS (TOOL_BUTTON_PLAYER_XPOS \
- + 0 * TOOL_BUTTON_PLAYER_XSIZE)
-#define TOOL_BUTTON_PLAYER2_XPOS (TOOL_BUTTON_PLAYER_XPOS \
- + 1 * TOOL_BUTTON_PLAYER_XSIZE)
-#define TOOL_BUTTON_PLAYER3_XPOS (TOOL_BUTTON_PLAYER_XPOS \
- + 0 * TOOL_BUTTON_PLAYER_XSIZE)
-#define TOOL_BUTTON_PLAYER4_XPOS (TOOL_BUTTON_PLAYER_XPOS \
- + 1 * TOOL_BUTTON_PLAYER_XSIZE)
-#define TOOL_BUTTON_PLAYER1_YPOS (TOOL_BUTTON_PLAYER_YPOS \
- + 0 * TOOL_BUTTON_PLAYER_YSIZE)
-#define TOOL_BUTTON_PLAYER2_YPOS (TOOL_BUTTON_PLAYER_YPOS \
- + 0 * TOOL_BUTTON_PLAYER_YSIZE)
-#define TOOL_BUTTON_PLAYER3_YPOS (TOOL_BUTTON_PLAYER_YPOS \
- + 1 * TOOL_BUTTON_PLAYER_YSIZE)
-#define TOOL_BUTTON_PLAYER4_YPOS (TOOL_BUTTON_PLAYER_YPOS \
- + 1 * TOOL_BUTTON_PLAYER_YSIZE)
-
-static struct
-{
- int xpos, ypos;
- int x, y;
- int width, height;
- int gadget_id;
- char *infotext;
-} toolbutton_info[NUM_TOOL_BUTTONS] =
-{
- {
- TOOL_BUTTON_YES_XPOS, TOOL_BUTTON_YES_GFX_YPOS,
- TOOL_BUTTON_YES_XPOS, TOOL_BUTTON_YES_YPOS,
- TOOL_BUTTON_YES_XSIZE, TOOL_BUTTON_YES_YSIZE,
- TOOL_CTRL_ID_YES,
- "yes"
- },
- {
- TOOL_BUTTON_NO_XPOS, TOOL_BUTTON_NO_GFX_YPOS,
- TOOL_BUTTON_NO_XPOS, TOOL_BUTTON_NO_YPOS,
- TOOL_BUTTON_NO_XSIZE, TOOL_BUTTON_NO_YSIZE,
- TOOL_CTRL_ID_NO,
- "no"
- },
- {
- TOOL_BUTTON_CONFIRM_XPOS, TOOL_BUTTON_CONFIRM_GFX_YPOS,
- TOOL_BUTTON_CONFIRM_XPOS, TOOL_BUTTON_CONFIRM_YPOS,
- TOOL_BUTTON_CONFIRM_XSIZE, TOOL_BUTTON_CONFIRM_YSIZE,
- TOOL_CTRL_ID_CONFIRM,
- "confirm"
- },
- {
- TOOL_BUTTON_PLAYER_GFX_XPOS,TOOL_BUTTON_PLAYER_GFX_YPOS,
- TOOL_BUTTON_PLAYER1_XPOS, TOOL_BUTTON_PLAYER1_YPOS,
- TOOL_BUTTON_PLAYER_XSIZE, TOOL_BUTTON_PLAYER_YSIZE,
- TOOL_CTRL_ID_PLAYER_1,
- "player 1"
- },
- {
- TOOL_BUTTON_PLAYER_GFX_XPOS,TOOL_BUTTON_PLAYER_GFX_YPOS,
- TOOL_BUTTON_PLAYER2_XPOS, TOOL_BUTTON_PLAYER2_YPOS,
- TOOL_BUTTON_PLAYER_XSIZE, TOOL_BUTTON_PLAYER_YSIZE,
- TOOL_CTRL_ID_PLAYER_2,
- "player 2"
- },
- {
- TOOL_BUTTON_PLAYER_GFX_XPOS,TOOL_BUTTON_PLAYER_GFX_YPOS,
- TOOL_BUTTON_PLAYER3_XPOS, TOOL_BUTTON_PLAYER3_YPOS,
- TOOL_BUTTON_PLAYER_XSIZE, TOOL_BUTTON_PLAYER_YSIZE,
- TOOL_CTRL_ID_PLAYER_3,
- "player 3"
- },
- {
- TOOL_BUTTON_PLAYER_GFX_XPOS,TOOL_BUTTON_PLAYER_GFX_YPOS,
- TOOL_BUTTON_PLAYER4_XPOS, TOOL_BUTTON_PLAYER4_YPOS,
- TOOL_BUTTON_PLAYER_XSIZE, TOOL_BUTTON_PLAYER_YSIZE,
- TOOL_CTRL_ID_PLAYER_4,
- "player 4"
- }
-};
-
-void CreateToolButtons()
-{
- int i;
-
- for (i = 0; i < NUM_TOOL_BUTTONS; i++)
- {
- Bitmap *gd_bitmap = graphic_info[IMG_GLOBAL_DOOR].bitmap;
- Bitmap *deco_bitmap = None;
- int deco_x = 0, deco_y = 0, deco_xpos = 0, deco_ypos = 0;
- struct GadgetInfo *gi;
- unsigned int event_mask;
- int gd_xoffset, gd_yoffset;
- int gd_x1, gd_x2, gd_y;
- int id = i;
-
- event_mask = GD_EVENT_RELEASED;
-
- gd_xoffset = toolbutton_info[i].xpos;
- gd_yoffset = toolbutton_info[i].ypos;
- gd_x1 = DOOR_GFX_PAGEX4 + gd_xoffset;
- gd_x2 = DOOR_GFX_PAGEX3 + gd_xoffset;
- gd_y = DOOR_GFX_PAGEY1 + gd_yoffset;
-
- if (id >= TOOL_CTRL_ID_PLAYER_1 && id <= TOOL_CTRL_ID_PLAYER_4)
- {
- int player_nr = id - TOOL_CTRL_ID_PLAYER_1;
-
- getMiniGraphicSource(PLAYER_NR_GFX(IMG_PLAYER_1, player_nr),
- &deco_bitmap, &deco_x, &deco_y);
- deco_xpos = (toolbutton_info[i].width - MINI_TILEX) / 2;
- deco_ypos = (toolbutton_info[i].height - MINI_TILEY) / 2;
- }
-
- gi = CreateGadget(GDI_CUSTOM_ID, id,
- GDI_INFO_TEXT, toolbutton_info[i].infotext,
- GDI_X, DX + GDI_ACTIVE_POS(toolbutton_info[i].x),
- GDI_Y, DY + GDI_ACTIVE_POS(toolbutton_info[i].y),
- GDI_WIDTH, toolbutton_info[i].width,
- GDI_HEIGHT, toolbutton_info[i].height,
- GDI_TYPE, GD_TYPE_NORMAL_BUTTON,
- GDI_STATE, GD_BUTTON_UNPRESSED,
- GDI_DESIGN_UNPRESSED, gd_bitmap, gd_x1, gd_y,
- GDI_DESIGN_PRESSED, gd_bitmap, gd_x2, gd_y,
- GDI_DECORATION_DESIGN, deco_bitmap, deco_x, deco_y,
- GDI_DECORATION_POSITION, deco_xpos, deco_ypos,
- GDI_DECORATION_SIZE, MINI_TILEX, MINI_TILEY,
- GDI_DECORATION_SHIFTING, 1, 1,
- GDI_DIRECT_DRAW, FALSE,
- GDI_EVENT_MASK, event_mask,
- GDI_CALLBACK_ACTION, HandleToolButtons,
- GDI_END);
-
- if (gi == NULL)
- Error(ERR_EXIT, "cannot create gadget");
-
- tool_gadget[id] = gi;
- }
-}
-
-#endif
-
-void FreeToolButtons()
-{
- int i;
-
- for (i = 0; i < NUM_TOOL_BUTTONS; i++)
- FreeGadget(tool_gadget[i]);
-}
-
-static void UnmapToolButtons()
-{
- int i;
-
- for (i = 0; i < NUM_TOOL_BUTTONS; i++)
- UnmapGadget(tool_gadget[i]);
-}
-
-static void HandleToolButtons(struct GadgetInfo *gi)
-{
- request_gadget_id = gi->custom_id;
-}