aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/gfx/res_pic.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/sci/gfx/res_pic.cpp')
-rw-r--r--engines/sci/gfx/res_pic.cpp163
1 files changed, 4 insertions, 159 deletions
diff --git a/engines/sci/gfx/res_pic.cpp b/engines/sci/gfx/res_pic.cpp
index 47d7f8871a..8c71bb2f49 100644
--- a/engines/sci/gfx/res_pic.cpp
+++ b/engines/sci/gfx/res_pic.cpp
@@ -113,7 +113,7 @@ int fillmagc = 30000000;
#endif
// Color mapping used while scaling embedded views.
-gfx_pixmap_color_t embedded_view_colors[16] = {
+static const gfx_pixmap_color_t embedded_view_colors[16] = {
{0x00, 0, 0, 0}, {0x11, 0, 0, 0}, {0x22, 0, 0, 0}, {0x33, 0, 0, 0},
{0x44, 0, 0, 0}, {0x55, 0, 0, 0}, {0x66, 0, 0, 0}, {0x77, 0, 0, 0},
{0x88, 0, 0, 0}, {0x99, 0, 0, 0}, {0xaa, 0, 0, 0}, {0xbb, 0, 0, 0},
@@ -342,161 +342,6 @@ static void _gfxr_auxbuf_propagate_changes(gfxr_pic_t *pic, int bitmask) {
#endif
-#if 0
-// Unreferenced - removed
-static void _gfxr_auxbuf_tag_line(gfxr_pic_t *pic, int pos, int width) {
- for (int i = 0; i < width; i++)
- pic->aux_map[i+pos] |= FRESH_PAINT;
-}
-
-// Unreferenced - removed
-static void _gfxr_auxbuf_spread(gfxr_pic_t *pic, int *min_x, int *min_y, int *max_x, int *max_y) {
- // Tries to spread by approximating the first derivation of the border function.
- // Draws to the current and the last line, thus taking up to twice as long as neccessary.
- // Other than that, it's O(n^2)
-
- int intervals_nr = 0, old_intervals_nr;
- int x, y, i, pos = 10 * 320;
- struct interval_struct {
- int xl, xr, tag;
- } intervals[2][160];
-
- *max_x = *max_y = -1;
- *min_x = *min_y = 320;
-
-#ifdef FILL_RECURSIVE_DEBUG
- if (!fillmagc) {
- fprintf(stderr, "------------------------------------------------\n");
- fprintf(stderr, "LineID: ");
- for (i = 0; i < 5; i++)
- fprintf(stderr, " %d ", i);
- fprintf(stderr, "\n");
- }
-#endif
-
- for (y = 10; y < 200; y++) {
- int ivi = y & 1; // InterVal Index: Current intervals; !ivi is the list of old ones
- int old_intervals_start_offset = 0;
- int width = 0;
-
- old_intervals_nr = intervals_nr;
- intervals_nr = 0;
-
- for (x = 0; x < 321; x++)
- if (x < 320 && pic->aux_map[pos+x] & 0x10)
- width++;
- else if (width) { // Found one interval
- int xl = x - width;
- int xr = x - 1;
- int done = 0;
- int found_interval = 0;
-
- intervals[ivi][intervals_nr].width = xl;
- intervals[ivi][intervals_nr].tag = 0;
- intervals[ivi][intervals_nr++].xr = xr;
-
- if (xl < *min_x)
- *min_x = xl;
- if (xr > *max_x)
- *max_x = xr;
-
- i = old_intervals_start_offset;
- while (!done && i < old_intervals_nr) {
- if (intervals[!ivi][i].width > xr + 1)
- done = 1;
-
- else if (intervals[!ivi][i].xr < xl - 1) {
- int o_xl = intervals[!ivi][i].width;
- int o_xr = intervals[!ivi][i].xr;
- if (o_xr == o_xl && !intervals[!ivi][i].tag) { // thin bar
- memcpy(intervals[ivi] + intervals_nr, intervals[ivi] + intervals_nr - 1, sizeof(struct interval_struct));
- memcpy(intervals[ivi] + intervals_nr - 1, intervals[!ivi] + i, sizeof(struct interval_struct));
- intervals[!ivi][i].tag = 1;
- pic->aux_map[pos - 320 + o_xl] |= FRESH_PAINT;
- ++intervals_nr;
- }
-
- old_intervals_start_offset = i;
- } else {
- int k = i;
- int old_xl = intervals[!ivi][i].width;
- int dwidth_l = abs(old_xl - xl);
- int old_xr, dwidth_r;
- int write_left_width, write_right_width;
-
- intervals[!ivi][i].tag = 1;
- while (k + 1 < old_intervals_nr && intervals[!ivi][k+1].width <= xr) {
- ++k;
- intervals[!ivi][i].tag = 1;
- }
-
- old_xr = intervals[!ivi][k].xr;
- dwidth_r = abs(old_xr - xr);
-
- // Current line
- write_left_width = (dwidth_l > xl) ? xl : dwidth_l;
- _gfxr_auxbuf_tag_line(pic, pos + xl - write_left_width, write_left_width);
-
- write_right_width = (dwidth_r + xr > 319) ? 320 - xr : dwidth_r;
- _gfxr_auxbuf_tag_line(pic, pos + xr, write_right_width);
-
- if (xl - write_left_width < *min_x)
- *min_x = xl - write_left_width;
- if (xr + write_right_width > *max_x)
- *max_x = xr + write_right_width;
-
- // Previous line
- write_left_width = (dwidth_l > old_xl) ? old_xl : dwidth_l;
- write_right_width = (dwidth_r + old_xr > 319) ? 320 - old_xr : dwidth_r;
-
- if (i == k) { // Only one predecessor interval
- _gfxr_auxbuf_tag_line(pic, pos - 320 + old_xl - write_left_width, write_left_width);
- _gfxr_auxbuf_tag_line(pic, pos - 320 + old_xr, write_right_width);
- } else // Fill entire line
- _gfxr_auxbuf_tag_line(pic, pos - 320 + old_xl - write_left_width, old_xr - old_xl
- + 1 + write_left_width + write_right_width);
-
- if (xl - write_left_width < *min_x)
- *min_x = xl - write_left_width;
- if (xr + write_right_width > *max_x)
- *max_x = xr + write_right_width;
-
- found_interval = done = 1;
- }
- i++;
- }
- width = 0;
- }
-
-#ifdef FILL_RECURSIVE_DEBUG
- if (!fillmagc && intervals_nr) {
- fprintf(stderr, "AI L#%03d:", y);
- for (int j = 0; j < intervals_nr; j++)
- fprintf(stderr, "%c[%03d,%03d]", intervals[ivi][j].tag ? ' ' : '-', intervals[ivi][j].width, intervals[ivi][j].xr);
- fprintf(stderr, "\n");
- }
-#endif
-
- if (intervals_nr) {
- if (y < *min_y)
- *min_y = y;
- *max_y = y;
- }
-
- pos += 320;
- }
-
- for (pos = 320 * 200 - 1; pos >= 320; pos--)
- if (pic->aux_map[pos - 320] & 0x40)
- pic->aux_map[pos] |= 0x40;
-
- if (*max_y < 199)
- (*max_y)++;
-}
-
-#endif
-
-
/*** Regular drawing operations ***/
#define PATTERN_FLAG_RECTANGLE 0x10
@@ -702,7 +547,7 @@ static void _gfxr_plot_aux_pattern(gfxr_pic_t *pic, int x, int y, int size, int
// random should be set to the random index, or -1 to disable
// These circle offsets uniquely identify the circles used by Sierra:
- int circle_data[][8] = {
+ const int circle_data[][8] = {
{0},
{1, 0},
{2, 2, 1},
@@ -714,14 +559,14 @@ static void _gfxr_plot_aux_pattern(gfxr_pic_t *pic, int x, int y, int size, int
};
// 'Random' fill patterns, provided by Carl Muckenhoupt:
- byte random_data[32] = {
+ const byte random_data[32] = {
0x20, 0x94, 0x02, 0x24, 0x90, 0x82, 0xa4, 0xa2, 0x82, 0x09, 0x0a, 0x22,
0x12, 0x10, 0x42, 0x14, 0x91, 0x4a, 0x91, 0x11, 0x08, 0x12, 0x25, 0x10,
0x22, 0xa8, 0x14, 0x24, 0x00, 0x50, 0x24, 0x04
};
// 'Random' fill offsets, provided by Carl Muckenhoupt:
- byte random_offset[128] = {
+ const byte random_offset[128] = {
0x00, 0x18, 0x30, 0xc4, 0xdc, 0x65, 0xeb, 0x48,
0x60, 0xbd, 0x89, 0x05, 0x0a, 0xf4, 0x7d, 0x7d,
0x85, 0xb0, 0x8e, 0x95, 0x1f, 0x22, 0x0d, 0xdf,