diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/CMakeLists.txt | 2 | ||||
-rw-r--r-- | src/angband.rc | 9 | ||||
-rw-r--r-- | src/cave.cc | 518 | ||||
-rw-r--r-- | src/cmd3.cc | 2 | ||||
-rw-r--r-- | src/cmd4.cc | 78 | ||||
-rw-r--r-- | src/config.h | 7 | ||||
-rw-r--r-- | src/defines.h | 15 | ||||
-rw-r--r-- | src/dungeon.cc | 7 | ||||
-rw-r--r-- | src/externs.h | 6 | ||||
-rw-r--r-- | src/maid-x11.c | 760 | ||||
-rw-r--r-- | src/main-gcu.c | 41 | ||||
-rw-r--r-- | src/main-gtk2.c | 2455 | ||||
-rw-r--r-- | src/main-sdl.c | 47 | ||||
-rw-r--r-- | src/main-win.c | 505 | ||||
-rw-r--r-- | src/main-x11.c | 313 | ||||
-rw-r--r-- | src/main-xaw.c | 326 | ||||
-rw-r--r-- | src/main-xxx.c | 37 | ||||
-rw-r--r-- | src/main.c | 26 | ||||
-rw-r--r-- | src/monster1.cc | 2 | ||||
-rw-r--r-- | src/object1.cc | 61 | ||||
-rw-r--r-- | src/readdib.c | 342 | ||||
-rw-r--r-- | src/readdib.h | 21 | ||||
-rw-r--r-- | src/store.cc | 6 | ||||
-rw-r--r-- | src/variable.cc | 6 | ||||
-rw-r--r-- | src/xtra2.cc | 1 | ||||
-rw-r--r-- | src/z-term.c | 671 | ||||
-rw-r--r-- | src/z-term.h | 25 |
27 files changed, 134 insertions, 6155 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 221dfa2b..1885b2a0 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -35,7 +35,7 @@ SET(SRCS # Need a few additional source files for Windows. if(WIN32) - SET(SRCS ${SRCS} main-win.c readdib.c) + SET(SRCS ${SRCS} main-win.c) # Resource files require a little workaround. if(MINGW) # Workaround for resource compilation for mingw on CMake. diff --git a/src/angband.rc b/src/angband.rc index b712b64a..4fcd6561 100644 --- a/src/angband.rc +++ b/src/angband.rc @@ -101,15 +101,6 @@ ANGBAND MENU POPUP "&Options" { - POPUP "&Graphics" - { - MENUITEM "&Old tiles", 400 - MENUITEM "&New tiles", 401 - MENUITEM "ASCII &Text", 403 - MENUITEM "&Bigtile mode", 409 - } - - MENUITEM SEPARATOR MENUITEM "Unused menu option", 410 MENUITEM "Activate Screensaver", 411 } diff --git a/src/cave.cc b/src/cave.cc index e6b857cd..d77c146b 100644 --- a/src/cave.cc +++ b/src/cave.cc @@ -382,9 +382,9 @@ bool_ cave_valid_bold(int y, int x) /* - * Hack -- Legal monster codes + * Hack -- Legal monster codes FIXME: Remove? */ -static cptr image_monster_hack = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; +// static cptr image_monster_hack = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; /* * Hack -- Legal monster codes for IBM pseudo-graphics @@ -401,25 +401,26 @@ static void image_monster(byte *ap, char *cp) { int n; - switch (graphics_mode) - { + // switch (graphics_mode) + // { /* Text mode */ - case GRAPHICS_NONE: - { - n = strlen(image_monster_hack); + // case GRAPHICS_NONE: + // { + // n = strlen(image_monster_hack); - /* Random symbol from set above */ - *cp = (image_monster_hack[rand_int(n)]); + // /* Random symbol from set above */ + // *cp = (image_monster_hack[rand_int(n)]); - /* Random color */ - *ap = randint(15); + // /* Random color */ + // *ap = randint(15); - break; - } + // break; + // } - /* Normal graphics */ - default: - { + // /* Normal graphics */ + // default: + // { + // FIXME: Why wouldn't this work for text mode too? And 2) this assumes that all indexes in r_info are valid... is that assumption OK? /* Avoid player ghost */ n = randint(max_r_idx); @@ -427,18 +428,18 @@ static void image_monster(byte *ap, char *cp) *ap = r_info[n].x_attr; - break; - } - } + // break; + // } + // } } /* - * Hack -- Legal object codes + * Hack -- Legal object codes FIXME: Remove? */ -static cptr image_object_hack = "?/|\\\"!$()_-=[]{},~"; +// static cptr image_object_hack = "?/|\\\"!$()_-=[]{},~"; /* * Hardcoded IBM pseudo-graphics code points have been removed @@ -452,34 +453,35 @@ static void image_object(byte *ap, char *cp) { int n; - switch (graphics_mode) - { - /* Text mode */ - case GRAPHICS_NONE: - { - n = strlen(image_object_hack); + // switch (graphics_mode) + // { + // /* Text mode */ + // case GRAPHICS_NONE: + // { + // n = strlen(image_object_hack); - /* Random symbol from set above */ - *cp = (image_object_hack[rand_int(n)]); + // /* Random symbol from set above */ + // *cp = (image_object_hack[rand_int(n)]); - /* Random color */ - *ap = randint(15); + // /* Random color */ + // *ap = randint(15); - /* Done */ - break; - } + // /* Done */ + // break; + // } - /* Normal graphics */ - default: - { + // /* Normal graphics */ + // default: + // { + // FIXME: Why wouldn't this work for text mode too? And 2) this assumes that all k_info indexes are valid... is that assumption correct?!? n = randint(max_k_idx - 1); *cp = k_info[n].x_char; *ap = k_info[n].x_attr; - break; - } - } + // break; + // } + // } } @@ -502,16 +504,8 @@ static void image_random(byte *ap, char *cp) } -/* - * The 16x16 tile of the terrain supports lighting - */ -static bool_ feat_supports_lighting(byte feat) -{ - return (f_info[feat].flags1 & FF1_SUPPORT_LIGHT) != 0; -} - -char get_shimmer_color() +static char get_shimmer_color() { switch (randint(7)) { @@ -860,8 +854,7 @@ static byte darker_attrs[16] = }; -void map_info(int y, int x, byte *ap, char *cp, byte *tap, char *tcp, - byte *eap, char *ecp) +static void map_info(int y, int x, byte *ap, char *cp) { cave_type *c_ptr; @@ -879,28 +872,6 @@ void map_info(int y, int x, byte *ap, char *cp, byte *tap, char *tcp, byte c; - /* - * This means that a port supports graphics overlay as well as lighting - * effects. See the step 3 below for the detailed information about - * lighting. Basically, it requires "darker" tiles for those terrain - * features with SUPPORT_LIGHT flag set, and they must be arranged - * this way: - * col col+1 col+2 - * row base darker brighter - */ - bool_ graf_new = ((graphics_mode == GRAPHICS_ISO) || - (graphics_mode == GRAPHICS_NEW)); - - /* - * I never understand why some coders like shimmering so much. - * It just serves to hurt my eyes, IMHO. If one feels like to show off, - * go for better graphics support... Anyway this means a port allows - * changing attr independently from its char -- pelpel - */ - bool_ attr_mutable = (!use_graphics || - (graphics_mode == GRAPHICS_IBM)); - - /**** Preparation ****/ /* Access the grid */ @@ -929,11 +900,6 @@ void map_info(int y, int x, byte *ap, char *cp, byte *tap, char *tcp, f_ptr = &f_info[feat]; - /* Reset attr/char */ - *eap = 0; - *ecp = 0; - - /**** Layer 1 -- Terrain feature ****/ /* Only memorised or visible grids are displayed */ @@ -959,8 +925,7 @@ void map_info(int y, int x, byte *ap, char *cp, byte *tap, char *tcp, } /* Mega-Hack 2 -- stair to dungeon branch are purple */ - if (c_ptr->special && attr_mutable && - ((feat == FEAT_MORE) || (feat == FEAT_LESS))) + if (c_ptr->special && ((feat == FEAT_MORE) || (feat == FEAT_LESS))) { a = TERM_VIOLET; } @@ -971,65 +936,37 @@ void map_info(int y, int x, byte *ap, char *cp, byte *tap, char *tcp, /* Trap index */ t_idx = c_ptr->t_idx; - if (use_graphics && - (t_info[t_idx].g_attr != 0) && - (t_info[t_idx].g_char != 0)) + /* + * If trap is set on a floor grid that is not + * one of "interesting" features, use a special + * symbol to display it. Check for doors is no longer + * necessary because they have REMEMBER flag now. + * + * Cave macros cannot be used safely here, because of + * c_ptr->mimic XXX XXX + */ + if ((f_ptr->flags1 & (FF1_FLOOR | FF1_REMEMBER)) == FF1_FLOOR) { - - if (graf_new) - { - *eap = t_info[t_idx].g_attr; - *ecp = t_info[t_idx].g_char; - } - else - { - a = t_info[t_idx].g_attr; - c = t_info[t_idx].g_char; - } - + c = f_info[FEAT_TRAP].x_char; } - else - { - /* - * If trap is set on a floor grid that is not - * one of "interesting" features, use a special - * symbol to display it. Check for doors is no longer - * necessary because they have REMEMBER flag now. - * - * Cave macros cannot be used safely here, because of - * c_ptr->mimic XXX XXX - */ - if (!attr_mutable) - { - a = f_info[FEAT_TRAP].x_attr; - c = f_info[FEAT_TRAP].x_char; - } - else - { - if ((f_ptr->flags1 & (FF1_FLOOR | FF1_REMEMBER)) == FF1_FLOOR) - { - c = f_info[FEAT_TRAP].x_char; - } - /* Add attr XXX XXX XXX */ - a = t_info[t_idx].color; + /* Add attr XXX XXX XXX */ + a = t_info[t_idx].color; - /* Get a new color with a strange formula :) XXX XXX XXX */ - if (t_info[t_idx].flags & FTRAP_CHANGE) - { - s32b tmp; + /* Get a new color with a strange formula :) XXX XXX XXX */ + if (t_info[t_idx].flags & FTRAP_CHANGE) + { + s32b tmp; - tmp = dun_level + dungeon_type + feat; + tmp = dun_level + dungeon_type + feat; - a = tmp % 16; - } - } + a = tmp % 16; } } /**** Step 2 -- Apply special random effects ****/ - if (!avoid_other && !avoid_shimmer && attr_mutable) + if (!avoid_other && !avoid_shimmer) { /* Special terrain effect */ if (c_ptr->effect) @@ -1063,8 +1000,7 @@ void map_info(int y, int x, byte *ap, char *cp, byte *tap, char *tcp, if (view_special_lite && ((f_ptr->flags1 & (FF1_FLOOR | FF1_REMEMBER)) == FF1_FLOOR)) { - if (!p_ptr->wild_mode && !(info & (CAVE_TRDT)) && - (attr_mutable || (graf_new && feat_supports_lighting(feat)))) + if (!p_ptr->wild_mode && !(info & (CAVE_TRDT))) { /* Handle "seen" grids */ if (info & (CAVE_SEEN)) @@ -1072,62 +1008,30 @@ void map_info(int y, int x, byte *ap, char *cp, byte *tap, char *tcp, /* Only lit by "torch" light */ if (view_yellow_lite && !(info & (CAVE_GLOW))) { - if (graf_new) - { - /* Use a brightly lit tile */ - c += 2; - } - else - { - /* Use "yellow" */ - a = TERM_YELLOW; - } + /* Use "yellow" */ + a = TERM_YELLOW; } } /* Handle "blind" */ else if (p_ptr->blind) { - if (graf_new) - { - /* Use a dark tile */ - c++; - } - else - { - /* Use darker colour */ - a = darker_attrs[a & 0xF]; - } + /* Use darker colour */ + a = darker_attrs[a & 0xF]; } /* Handle "dark" grids */ else if (!(info & (CAVE_GLOW))) { - if (graf_new) - { - /* Use a dark tile */ - c++; - } - else - { - /* Use darkest colour */ - a = TERM_L_DARK; - } + /* Use darkest colour */ + a = TERM_L_DARK; } /* "Out-of-sight" glowing grids -- handle "view_bright_lite" */ else if (view_bright_lite) { - if (graf_new) - { - /* Use a dark tile */ - c++; - } - else - { - /* Use darker colour */ - a = dark_attrs[a & 0xF]; - } + /* Use darker colour */ + a = dark_attrs[a & 0xF]; } } } @@ -1136,8 +1040,7 @@ void map_info(int y, int x, byte *ap, char *cp, byte *tap, char *tcp, else if (view_granite_lite && (f_ptr->flags1 & (FF1_NO_VISION | FF1_DOOR))) { - if (!p_ptr->wild_mode && !(info & (CAVE_TRDT)) && - (attr_mutable || (graf_new && feat_supports_lighting(feat)))) + if (!p_ptr->wild_mode && !(info & (CAVE_TRDT))) { /* Handle "seen" grids */ if (info & (CAVE_SEEN)) @@ -1148,44 +1051,20 @@ void map_info(int y, int x, byte *ap, char *cp, byte *tap, char *tcp, /* Handle "blind" */ else if (p_ptr->blind) { - if (graf_new) - { - /* Use a dark tile */ - c++; - } - else - { - /* Use darker colour */ - a = darker_attrs[a & 0xF]; - } + /* Use darker colour */ + a = darker_attrs[a & 0xF]; } /* Handle "view_bright_lite" */ else if (view_bright_lite) { - if (graf_new) - { - /* Use a dark tile */ - c++; - } - else - { - /* Use darker colour */ - a = dark_attrs[a & 0xF]; - } + /* Use darker colour */ + a = dark_attrs[a & 0xF]; } else { - if (graf_new) - { - /* Use a brightly lit tile */ - c += 2; - } - else - { - /* Use normal colour */ - } + /* Use normal colour */ } } } @@ -1215,10 +1094,6 @@ void map_info(int y, int x, byte *ap, char *cp, byte *tap, char *tcp, image_random(ap, cp); } - /* Save the terrain info for the transparency effects */ - *tap = a; - *tcp = c; - /* Save the info */ *ap = a; *cp = c; @@ -1248,8 +1123,7 @@ void map_info(int y, int x, byte *ap, char *cp, byte *tap, char *tcp, *ap = object_attr(o_ptr); /* Multi-hued attr */ - if (!avoid_other && attr_mutable && - (k_info[o_ptr->k_idx].flags5 & TR5_ATTR_MULTI)) + if (!avoid_other && (k_info[o_ptr->k_idx].flags5 & TR5_ATTR_MULTI)) { *ap = get_shimmer_color(); } @@ -1288,8 +1162,7 @@ void map_info(int y, int x, byte *ap, char *cp, byte *tap, char *tcp, *ap = object_attr(o_ptr); /* Multi-hued attr */ - if (!avoid_other && attr_mutable && - (k_info[o_ptr->k_idx].flags5 & TR5_ATTR_MULTI)) + if (!avoid_other && (k_info[o_ptr->k_idx].flags5 & TR5_ATTR_MULTI)) { *ap = get_shimmer_color(); } @@ -1305,28 +1178,6 @@ void map_info(int y, int x, byte *ap, char *cp, byte *tap, char *tcp, { monster_race *r_ptr = race_inf(m_ptr); - /* Reset attr/char */ - *eap = 0; - *ecp = 0; - - if (use_graphics) - { - - if (graf_new) - { - monster_ego *re_ptr = &re_info[m_ptr->ego]; - - /* Desired attr */ - *eap = re_ptr->g_attr; - - /* Desired char */ - *ecp = re_ptr->g_char; - } - - /* Use base monster */ - r_ptr = &r_info[m_ptr->r_idx]; - } - /* Desired attr/char */ c = r_ptr->x_char; a = r_ptr->x_attr; @@ -1341,16 +1192,6 @@ void map_info(int y, int x, byte *ap, char *cp, byte *tap, char *tcp, *ap = a; } - /* Special attr/char codes */ - else if (!attr_mutable) - { - /* Use char */ - *cp = c; - - /* Use attr */ - *ap = a; - } - /* Multi-hued monster */ else if (r_ptr->flags1 & (RF1_ATTR_MULTI)) { @@ -1430,12 +1271,8 @@ void map_info(int y, int x, byte *ap, char *cp, byte *tap, char *tcp, { monster_race *r_ptr = &r_info[p_ptr->body_monster]; - /* Reset attr/char */ - *eap = 0; - *ecp = 0; - /* Get the "player" attr */ - if (!avoid_other && attr_mutable && (r_ptr->flags1 & RF1_ATTR_MULTI)) + if (!avoid_other && (r_ptr->flags1 & RF1_ATTR_MULTI)) { a = get_shimmer_color(); } @@ -1447,67 +1284,16 @@ void map_info(int y, int x, byte *ap, char *cp, byte *tap, char *tcp, /* Get the "player" char */ c = r_ptr->x_char; - - /* Mega-Hack -- Apply modifications to player graphics XXX XXX XXX */ - switch (graphics_mode) + /* Show player health char instead? */ + if (player_char_health) { - case GRAPHICS_NONE: - case GRAPHICS_IBM: - { - if (player_char_health) - { - int percent = p_ptr->chp * 10 / p_ptr->mhp; - - if (percent < 7) - { - c = I2D(percent); - if (percent < 3) a = TERM_L_RED; - } - } - - break; - } + int percent = p_ptr->chp * 10 / p_ptr->mhp; - case GRAPHICS_OLD: + if (percent < 7) { - if (player_symbols) - { - a = BMP_FIRST_PC_CLASS + p_ptr->pclass; - c = BMP_FIRST_PC_RACE + p_ptr->prace; - } - - break; - } - - case GRAPHICS_ISO: - case GRAPHICS_NEW: - { - if (p_ptr->pracem) - { - player_race_mod *rmp_ptr = &race_mod_info[p_ptr->pracem]; - - /* Desired attr */ - *eap = rmp_ptr->g_attr; - - /* Desired char */ - *ecp = rmp_ptr->g_char; - } - - /* +AKH 20020421 - Health dispay for graphics, too */ - if (player_char_health && (graphics_mode == GRAPHICS_NEW)) - { - int percent = p_ptr->chp * 14 / p_ptr->mhp; - - if (percent < 10) - { - *eap = 10; - *ecp = 32 + 14 - percent; - } - } - - break; + c = I2D(percent); + if (percent < 3) a = TERM_L_RED; } - } /* Save the info */ @@ -1540,14 +1326,6 @@ void map_info_default(int y, int x, byte *ap, char *cp) byte c; - bool_ use_graphics_hack = use_graphics; - byte graphics_mode_hack = graphics_mode; - - - /* Temporarily disable graphics mode -- for some random effects XXX */ - use_graphics = FALSE; - graphics_mode = GRAPHICS_NONE; - /**** Preparation ****/ /* Access the grid */ @@ -1835,8 +1613,7 @@ void map_info_default(int y, int x, byte *ap, char *cp) *ap = object_attr_default(o_ptr); /* Multi-hued attr */ - if (!avoid_other && !use_graphics && - (k_info[o_ptr->k_idx].flags5 & TR5_ATTR_MULTI)) + if (!avoid_other && (k_info[o_ptr->k_idx].flags5 & TR5_ATTR_MULTI)) { *ap = get_shimmer_color(); } @@ -1962,10 +1739,6 @@ void map_info_default(int y, int x, byte *ap, char *cp) *cp = c; } - - /* XXX Restore the graphics mode */ - use_graphics = use_graphics_hack; - graphics_mode = graphics_mode_hack; } @@ -1975,7 +1748,6 @@ void map_info_default(int y, int x, byte *ap, char *cp) static int panel_col_of(int col) { col -= panel_col_min; - if (use_bigtile) col *= 2; return col + COL_MAP; } @@ -2005,24 +1777,6 @@ void print_rel(char c, byte a, int y, int x) /* Draw the char using the attr */ Term_draw(panel_col_of(x), y - panel_row_prt, a, c); - - if (use_bigtile) - { - char c2; - byte a2; - - if (a & 0x80) - { - a2 = 255; - c2 = 255; - } - else - { - a2 = TERM_WHITE; - c2 = ' '; - } - Term_draw(panel_col_of(x) + 1, y - panel_row_prt, a2, c2); - } } @@ -2140,39 +1894,17 @@ void note_spot(int y, int x) */ void lite_spot(int y, int x) { - byte a, a2; - byte c, c2; - - byte ta; - char tc; - - byte ea; - char ec; - + byte a; + char c; /* Redraw if on screen */ if (panel_contains(y, x)) { /* Examine the grid */ - map_info(y, x, &a, (char*)&c, &ta, &tc, &ea, &ec); + map_info(y, x, &a, &c); /* Hack -- Queue it */ - Term_queue_char(panel_col_of(x), y - panel_row_prt, a, c, ta, tc, ea, ec); - if (use_bigtile) - { - if (a & 0x80) - { - a2 = 255; - c2 = 255; - } - else - { - a2 = TERM_WHITE; - c2 = ' '; - } - Term_queue_char(panel_col_of(x) + 1, y - panel_row_prt, a2, c2, 0, 0, 0, 0); - } - + Term_queue_char(panel_col_of(x), y - panel_row_prt, a, c); } } @@ -2204,33 +1936,14 @@ void prt_map(void) /* Scan the columns of row "y" */ for (x = panel_col_min; x <= panel_col_max; x++) { - byte a, a2; - char c, c2; - - byte ta; - char tc; - byte ea; - char ec; + byte a; + char c; /* Determine what is there */ - map_info(y, x, &a, &c, &ta, &tc, &ea, &ec); + map_info(y, x, &a, &c); /* Efficiency -- Redraw that grid of the map */ - Term_queue_char(panel_col_of(x), y - panel_row_prt, a, c, ta, tc, ea, ec); - if (use_bigtile) - { - if (a & 0x80) - { - a2 = 255; - c2 = 255; - } - else - { - a2 = TERM_WHITE; - c2 = ' '; - } - Term_queue_char(panel_col_of(x) + 1, y - panel_row_prt, a2, c2, 0, 0, 0, 0); - } + Term_queue_char(panel_col_of(x), y - panel_row_prt, a, c); } } @@ -2395,9 +2108,6 @@ void display_map(int *cy, int *cx) /* Obtain current size of the Angband window */ Term_get_size(&wid, &hgt); - /* Use two characters as one tile in Bigtile mode */ - if (use_bigtile) wid /= 2; - /* * Calculate the size of the dungeon map area */ @@ -2458,7 +2168,7 @@ void display_map(int *cy, int *cx) x = i * xfactor / xrat + 1; /* Extract the current attr/char at that map location */ - map_info(j, i, &ta, &tc, &ta, &tc, &ta, &tc); + map_info(j, i, &ta, &tc); /* Extract the priority of that attr/char */ tp = priority(ta, tc); @@ -2510,40 +2220,12 @@ void display_map(int *cy, int *cx) /* Add the character */ Term_addch(ta, tc); - - /* Double width tile mode requires filler */ - if (use_bigtile) - { - byte a2; - char c2; - - if (ta & 0x80) - { - /* Mega-Hack */ - a2 = 255; - c2 = 255; - } - else - { - a2 = TERM_WHITE; - c2 = ' '; - } - - Term_addch(a2, c2); - } } } /* Player location in dungeon */ *cy = p_ptr->py * yfactor / yrat + ROW_MAP; - if (!use_bigtile) - { - *cx = p_ptr->px * xfactor / xrat + COL_MAP; - } - else - { - *cx = (p_ptr->px * xfactor / xrat + 1) * 2 - 1 + COL_MAP; - } + *cx = p_ptr->px * xfactor / xrat + COL_MAP; /* Restore lighting effects */ view_special_lite = old_view_special_lite; diff --git a/src/cmd3.cc b/src/cmd3.cc index 610b24fa..b4d9376e 100644 --- a/src/cmd3.cc +++ b/src/cmd3.cc @@ -1383,13 +1383,11 @@ static void roff_top(int r_idx) /* Append the "standard" attr/char info */ Term_addstr( -1, TERM_WHITE, " ('"); Term_addch(a1, c1); - if (use_bigtile && (a1 & 0x80)) Term_addch(255, 255); Term_addstr( -1, TERM_WHITE, "')"); /* Append the "optional" attr/char info */ Term_addstr( -1, TERM_WHITE, "/('"); Term_addch(a2, c2); - if (use_bigtile && (a2 & 0x80)) Term_addch(255, 255); Term_addstr( -1, TERM_WHITE, "'):"); } diff --git a/src/cmd4.cc b/src/cmd4.cc index c71c28f3..8a35dfe1 100644 --- a/src/cmd4.cc +++ b/src/cmd4.cc @@ -2336,26 +2336,12 @@ void do_cmd_visuals(void) format("Default attr/char = %3u / %3u", da, (dc & 0xFF))); Term_putstr(40, 19, -1, TERM_WHITE, "<< ? >>"); Term_putch(43, 19, da, dc); - if (use_bigtile) - { - if (da & 0x80) - Term_putch(44, 19, 255, 255); - else - Term_putch(44, 19, 0, ' '); - } /* Label the Current values */ Term_putstr(10, 20, -1, TERM_WHITE, format("Current attr/char = %3u / %3u", ca, (cc & 0xFF))); Term_putstr(40, 20, -1, TERM_WHITE, "<< ? >>"); Term_putch(43, 20, ca, cc); - if (use_bigtile) - { - if (ca & 0x80) - Term_putch(44, 20, 255, 255); - else - Term_putch(44, 20, 0, ' '); - } /* Prompt */ Term_putstr(0, 22, -1, TERM_WHITE, @@ -2405,26 +2391,12 @@ void do_cmd_visuals(void) format("Default attr/char = %3u / %3u", da, (dc & 0xFF))); Term_putstr(40, 19, -1, TERM_WHITE, "<< ? >>"); Term_putch(43, 19, da, dc); - if (use_bigtile) - { - if (da & 0x80) - Term_putch(44, 19, 255, 255); - else - Term_putch(44, 19, 0, ' '); - } /* Label the Current values */ Term_putstr(10, 20, -1, TERM_WHITE, format("Current attr/char = %3u / %3u", ca, (cc & 0xFF))); Term_putstr(40, 20, -1, TERM_WHITE, "<< ? >>"); Term_putch(43, 20, ca, cc); - if (use_bigtile) - { - if (ca & 0x80) - Term_putch(44, 20, 255, 255); - else - Term_putch(44, 20, 0, ' '); - } /* Prompt */ Term_putstr(0, 22, -1, TERM_WHITE, @@ -2474,26 +2446,12 @@ void do_cmd_visuals(void) format("Default attr/char = %3u / %3u", da, (dc & 0xFF))); Term_putstr(40, 19, -1, TERM_WHITE, "<< ? >>"); Term_putch(43, 19, da, dc); - if (use_bigtile) - { - if (da & 0x80) - Term_putch(44, 19, 255, 255); - else - Term_putch(44, 19, 0, ' '); - } /* Label the Current values */ Term_putstr(10, 20, -1, TERM_WHITE, format("Current attr/char = %3u / %3u", ca, (cc & 0xFF))); Term_putstr(40, 20, -1, TERM_WHITE, "<< ? >>"); Term_putch(43, 20, ca, cc); - if (use_bigtile) - { - if (ca & 0x80) - Term_putch(44, 20, 255, 255); - else - Term_putch(44, 20, 0, ' '); - } /* Prompt */ Term_putstr(0, 22, -1, TERM_WHITE, @@ -3491,37 +3449,17 @@ static void do_cmd_knowledge_uniques(void) /* Print a message */ if (dead) { - /* Don't print the unique's ASCII symbol - * if use_graphics is on. */ - if (use_graphics) - { - fprintf(fff, "[[[[[R%-70s is dead]\n", - (r_name + r_ptr->name)); - } - else - { - fprintf(fff, "[[[[[%c%c] [[[[[R%-68s is dead]\n", - conv_color[r_ptr->d_attr], - r_ptr->d_char, - (r_name + r_ptr->name)); - } + fprintf(fff, "[[[[[%c%c] [[[[[R%-68s is dead]\n", + conv_color[r_ptr->d_attr], + r_ptr->d_char, + (r_name + r_ptr->name)); } else { - /* Don't print the unique's ASCII symbol - * if use_graphics is on. */ - if (use_graphics) - { - fprintf(fff, "[[[[[w%-70s is alive]\n", - (r_name + r_ptr->name)); - } - else - { - fprintf(fff, "[[[[[%c%c] [[[[[w%-68s is alive]\n", - conv_color[r_ptr->d_attr], - r_ptr->d_char, - (r_name + r_ptr->name)); - } + fprintf(fff, "[[[[[%c%c] [[[[[w%-68s is alive]\n", + conv_color[r_ptr->d_attr], + r_ptr->d_char, + (r_name + r_ptr->name)); } } } diff --git a/src/config.h b/src/config.h index 900da66f..e117ba6d 100644 --- a/src/config.h +++ b/src/config.h @@ -117,13 +117,6 @@ /* - * OPTION: Allow the use of "graphics" in various places - */ -#define USE_GRAPHICS - - - -/* * OPTION: Set the "default" path to the angband "lib" directory. * * See "main.c" for usage, and note that this value is only used on diff --git a/src/defines.h b/src/defines.h index 3215a6cc..26375672 100644 --- a/src/defines.h +++ b/src/defines.h @@ -3768,21 +3768,6 @@ #define TERM_L_UMBER 15 /* 'U' */ /* 3,2,1 */ -/*** Graphics constants ***/ - -/* - * Possible values of graphics_mode - * Good only when use_graphics is set to TRUE - * Set by reset_visuals() and used by map_info() - */ -#define GRAPHICS_NONE 0 -#define GRAPHICS_UNKNOWN 1 -#define GRAPHICS_IBM 2 -#define GRAPHICS_OLD 3 -#define GRAPHICS_NEW 4 -#define GRAPHICS_ISO 5 - - /*** Sound constants ***/ diff --git a/src/dungeon.cc b/src/dungeon.cc index 1c9d4e82..2cc2042a 100644 --- a/src/dungeon.cc +++ b/src/dungeon.cc @@ -4756,7 +4756,7 @@ void process_player(void) /* Shimmer monsters if needed */ - if (!avoid_other && !use_graphics && shimmer_monsters) + if (!avoid_other && shimmer_monsters) { /* Clear the flag */ shimmer_monsters = FALSE; @@ -4788,8 +4788,7 @@ void process_player(void) } /* Shimmer objects if needed and requested */ - if (!avoid_other && !avoid_shimmer && !use_graphics && - shimmer_objects) + if (!avoid_other && !avoid_shimmer && shimmer_objects) { /* Clear the flag */ shimmer_objects = FALSE; @@ -4825,7 +4824,7 @@ void process_player(void) * fast, and that's why shimmering has been limited to small * number of monsters -- pelpel */ - if (!avoid_other && !avoid_shimmer && !use_graphics && + if (!avoid_other && !avoid_shimmer && !resting && !running) { for (j = panel_row_min; j <= panel_row_max; j++) diff --git a/src/externs.h b/src/externs.h index b2b5f7a4..60b69647 100644 --- a/src/externs.h +++ b/src/externs.h @@ -111,10 +111,8 @@ extern u16b sf_lives; extern u16b sf_saves; extern u32b vernum; /* Version flag */ extern bool_ arg_wizard; -extern bool_ arg_graphics; extern bool_ arg_force_original; extern bool_ arg_force_roguelike; -extern bool_ arg_bigtile; extern bool_ character_generated; extern bool_ character_dungeon; extern bool_ character_loaded; @@ -149,9 +147,6 @@ extern s16b monster_level; extern s32b turn; extern s32b old_turn; extern bool_ wizard; -extern bool_ use_graphics; -extern bool_ use_bigtile; -extern byte graphics_mode; extern u16b total_winner; extern u16b has_won; extern u16b noscore; @@ -575,7 +570,6 @@ extern int distance(int y1, int x1, int y2, int x2); extern bool_ los(int y1, int x1, int y2, int x2); extern bool_ cave_valid_bold(int y, int x); extern bool_ no_lite(void); -extern void map_info(int y, int x, byte *ap, char *cp, byte *tap, char *tcp, byte *eap, char *ecp); extern void map_info_default(int y, int x, byte *ap, char *cp); extern void move_cursor_relative(int row, int col); extern void print_rel(char c, byte a, int y, int x); diff --git a/src/maid-x11.c b/src/maid-x11.c index 0e1e3320..dff8da6e 100644 --- a/src/maid-x11.c +++ b/src/maid-x11.c @@ -92,765 +92,5 @@ static unsigned long create_pixel(Display *dpy, byte red, byte green, byte blue) -#ifdef USE_GRAPHICS - -/* - * The Win32 "BITMAPFILEHEADER" type. - */ -typedef struct BITMAPFILEHEADER -{ - u16b bfType; - u32b bfSize; - u16b bfReserved1; - u16b bfReserved2; - u32b bfOffBits; -} -BITMAPFILEHEADER; - - -/* - * The Win32 "BITMAPINFOHEADER" type. - */ -typedef struct BITMAPINFOHEADER -{ - u32b biSize; - u32b biWidth; - u32b biHeight; - u16b biPlanes; - u16b biBitCount; - u32b biCompresion; - u32b biSizeImage; - u32b biXPelsPerMeter; - u32b biYPelsPerMeter; - u32b biClrUsed; - u32b biClrImportand; -} -BITMAPINFOHEADER; - -/* - * The Win32 "RGBQUAD" type. - */ -typedef struct RGBQUAD -{ - unsigned char b, g, r; - unsigned char filler; -} -RGBQUAD; - - -/*** Helper functions for system independent file loading. ***/ - -static byte get_byte(FILE *fff) -{ - /* Get a character, and return it */ - return (getc(fff) & 0xFF); -} - -static void rd_byte(FILE *fff, byte *ip) -{ - *ip = get_byte(fff); -} - -static void rd_u16b(FILE *fff, u16b *ip) -{ - (*ip) = get_byte(fff); - (*ip) |= ((u16b)(get_byte(fff)) << 8); -} - -static void rd_u32b(FILE *fff, u32b *ip) -{ - (*ip) = get_byte(fff); - (*ip) |= ((u32b)(get_byte(fff)) << 8); - (*ip) |= ((u32b)(get_byte(fff)) << 16); - (*ip) |= ((u32b)(get_byte(fff)) << 24); -} - - -/* - * Read a Win32 BMP file. - * - * This function replaces the old ReadRaw and RemapColors functions. - * - * Assumes that the bitmap has a size such that no padding is needed in - * various places. Currently only handles bitmaps with 3 to 256 colors. - */ -static XImage *ReadBMP(Display *dpy, char *Name) -{ - Visual *visual = DefaultVisual(dpy, DefaultScreen(dpy)); - - int depth = DefaultDepth(dpy, DefaultScreen(dpy)); - - FILE *f; - - BITMAPFILEHEADER fileheader; - BITMAPINFOHEADER infoheader; - - XImage *Res = NULL; - - char *Data; - - int ncol; - - int total; - - int i, j; - - u32b x, y; - - unsigned long clr_pixels[256]; - - - /* Open the BMP file */ - f = fopen(Name, "r"); - - /* No such file */ - if (f == NULL) - { - return (NULL); - } - - /* Read the "BITMAPFILEHEADER" */ - rd_u16b(f, &(fileheader.bfType)); - rd_u32b(f, &(fileheader.bfSize)); - rd_u16b(f, &(fileheader.bfReserved1)); - rd_u16b(f, &(fileheader.bfReserved2)); - rd_u32b(f, &(fileheader.bfOffBits)); - - /* Read the "BITMAPINFOHEADER" */ - rd_u32b(f, &(infoheader.biSize)); - rd_u32b(f, &(infoheader.biWidth)); - rd_u32b(f, &(infoheader.biHeight)); - rd_u16b(f, &(infoheader.biPlanes)); - rd_u16b(f, &(infoheader.biBitCount)); - rd_u32b(f, &(infoheader.biCompresion)); - rd_u32b(f, &(infoheader.biSizeImage)); - rd_u32b(f, &(infoheader.biXPelsPerMeter)); - rd_u32b(f, &(infoheader.biYPelsPerMeter)); - rd_u32b(f, &(infoheader.biClrUsed)); - rd_u32b(f, &(infoheader.biClrImportand)); - - /* Verify the header */ - if (feof(f) || - (fileheader.bfType != 19778) || - (infoheader.biSize != 40)) - { - quit_fmt("Incorrect BMP file format %s", Name); - } - - /* The two headers above occupy 54 bytes total */ - /* The "bfOffBits" field says where the data starts */ - /* The "biClrUsed" field does not seem to be reliable */ - /* Compute number of colors recorded */ - ncol = (fileheader.bfOffBits - 54) / 4; - - for (i = 0; i < ncol; i++) - { - RGBQUAD clrg; - - /* Read an "RGBQUAD" */ - rd_byte(f, &(clrg.b)); - rd_byte(f, &(clrg.g)); - rd_byte(f, &(clrg.r)); - rd_byte(f, &(clrg.filler)); - - /* Analyze the color */ - clr_pixels[i] = create_pixel(dpy, clrg.r, clrg.g, clrg.b); - } - - /* Determine total bytes needed for image */ - i = 1; - j = (depth - 1) >> 2; - while (j >>= 1) i <<= 1; - total = infoheader.biWidth * infoheader.biHeight * i; - - /* Allocate image memory */ - Data = safe_calloc(total, sizeof(char)); - - Res = XCreateImage(dpy, visual, depth, ZPixmap, 0 /*offset*/, - Data, infoheader.biWidth, infoheader.biHeight, - 8 /*bitmap_pad*/, 0 /*bytes_per_line*/); - - /* Failure */ - if (Res == NULL) - { - free(Data); - Data = NULL; - fclose(f); - return (NULL); - } - - for (y = 0; y < infoheader.biHeight; y++) - { - int y2 = infoheader.biHeight - y - 1; - - for (x = 0; x < infoheader.biWidth; x++) - { - int ch = getc(f); - - /* Verify not at end of file XXX XXX */ - if (feof(f)) quit_fmt("Unexpected end of file in %s", Name); - - if (infoheader.biBitCount == 24) - { - int c2 = getc(f); - int c3 = getc(f); - - /* Verify not at end of file XXX XXX */ - if (feof(f)) quit_fmt("Unexpected end of file in %s", Name); - - XPutPixel(Res, x, y2, create_pixel(dpy, ch, c2, c3)); - } - else if (infoheader.biBitCount == 8) - { - XPutPixel(Res, x, y2, clr_pixels[ch]); - } - else if (infoheader.biBitCount == 4) - { - XPutPixel(Res, x, y2, clr_pixels[ch / 16]); - x++; - XPutPixel(Res, x, y2, clr_pixels[ch % 16]); - } - else - { - /* Technically 1 bit is legal too */ - quit_fmt("Illegal biBitCount %d in %s", - infoheader.biBitCount, Name); - } - } - } - - fclose(f); - - return Res; -} - - -/* ========================================================*/ -/* Code for smooth icon rescaling from Uwe Siems, Jan 2000 */ -/* ========================================================*/ - -/* - * to save ourselves some labour, define a maximum expected icon width here: - */ -#define MAX_ICON_WIDTH 32 - - -/* some static variables for composing and decomposing pixel values into - * red, green and blue values - */ -static unsigned long redMask, greenMask, blueMask; -static int redShift, greenShift, blueShift; - - -/* - * Use smooth rescaling? - */ -static bool_ smoothRescaling = TRUE; - - -/* - * GetScaledRow reads a scan from the given XImage, scales it smoothly - * and returns the red, green and blue values in arrays. - * The values in this arrays must be divided by a certain value that is - * calculated in ScaleIcon. - * x, y is the position, iw is the input width and ow the output width - * redScan, greenScan and blueScan must be sufficiently sized - */ -static void GetScaledRow(XImage *Im, int x, int y, int iw, int ow, - unsigned long *redScan, unsigned long *greenScan, - unsigned long *blueScan) -{ - int xi, si, sifrac, ci, cifrac, addWhole, addFrac; - unsigned long pix; - int prevRed, prevGreen, prevBlue, nextRed, nextGreen, nextBlue; - bool_ getNextPix; - - if (iw == ow) - { - /* unscaled */ - for (xi = 0; xi < ow; xi++) - { - pix = XGetPixel(Im, x + xi, y); - redScan [xi] = (pix >> redShift) & redMask; - greenScan [xi] = (pix >> greenShift) & greenMask; - blueScan [xi] = (pix >> blueShift) & blueMask; - } - } - else if (iw < ow) - { - /* scaling by subsampling (grow) */ - iw--; - ow--; - /* read first pixel: */ - pix = XGetPixel(Im, x, y); - nextRed = (pix >> redShift) & redMask; - nextGreen = (pix >> greenShift) & greenMask; - nextBlue = (pix >> blueShift) & blueMask; - prevRed = nextRed; - prevGreen = nextGreen; - prevBlue = nextBlue; - /* si and sifrac give the subsampling position: */ - si = x; - sifrac = 0; - /* getNextPix tells us, that we need the next pixel */ - getNextPix = TRUE; - - for (xi = 0; xi <= ow; xi++) - { - if (getNextPix) - { - prevRed = nextRed; - prevGreen = nextGreen; - prevBlue = nextBlue; - if (xi < ow) - { - /* only get next pixel if in same icon */ - pix = XGetPixel(Im, si + 1, y); - nextRed = (pix >> redShift) & redMask; - nextGreen = (pix >> greenShift) & greenMask; - nextBlue = (pix >> blueShift) & blueMask; - } - } - - /* calculate subsampled color values: */ - /* division by ow occurs in ScaleIcon */ - redScan [xi] = prevRed * (ow - sifrac) + nextRed * sifrac; - greenScan [xi] = prevGreen * (ow - sifrac) + nextGreen * sifrac; - blueScan [xi] = prevBlue * (ow - sifrac) + nextBlue * sifrac; - - /* advance sampling position: */ - sifrac += iw; - if (sifrac >= ow) - { - si++; - sifrac -= ow; - getNextPix = TRUE; - } - else - { - getNextPix = FALSE; - } - - } - } - else - { - /* scaling by averaging (shrink) */ - /* width of an output pixel in input pixels: */ - addWhole = iw / ow; - addFrac = iw % ow; - /* start position of the first output pixel: */ - si = x; - sifrac = 0; - /* get first input pixel: */ - pix = XGetPixel(Im, x, y); - nextRed = (pix >> redShift) & redMask; - nextGreen = (pix >> greenShift) & greenMask; - nextBlue = (pix >> blueShift) & blueMask; - for (xi = 0; xi < ow; xi++) - { - /* find endpoint of the current output pixel: */ - ci = si + addWhole; - cifrac = sifrac + addFrac; - if (cifrac >= ow) - { - ci++; - cifrac -= ow; - } - /* take fraction of current input pixel (starting segment): */ - redScan[xi] = nextRed * (ow - sifrac); - greenScan[xi] = nextGreen * (ow - sifrac); - blueScan[xi] = nextBlue * (ow - sifrac); - si++; - /* add values for whole pixels: */ - while (si < ci) - { - pix = XGetPixel(Im, si, y); - redScan[xi] += ((pix >> redShift) & redMask) * ow; - greenScan[xi] += ((pix >> greenShift) & greenMask) * ow; - blueScan[xi] += ((pix >> blueShift) & blueMask) * ow; - si++; - } - /* add fraction of current input pixel (ending segment): */ - if (xi < ow - 1) - { - /* only get next pixel if still in icon: */ - pix = XGetPixel(Im, si, y); - nextRed = (pix >> redShift) & redMask; - nextGreen = (pix >> greenShift) & greenMask; - nextBlue = (pix >> blueShift) & blueMask; - } - sifrac = cifrac; - if (sifrac > 0) - { - redScan[xi] += nextRed * sifrac; - greenScan[xi] += nextGreen * sifrac; - blueScan[xi] += nextBlue * sifrac; - } - } - } -} - - -/* - * PutRGBScan takes arrays for red, green and blue and writes pixel values - * according to this values in the XImage-structure. w is the number of - * pixels to write and div is the value by which all red/green/blue values - * are divided first. - */ -static void PutRGBScan(XImage *Im, int x, int y, int w, int div, - unsigned long *redScan, unsigned long *greenScan, - unsigned long *blueScan) -{ - int xi; - unsigned long pix; - unsigned long adj = div / 2; - for (xi = 0; xi < w; xi++) - { - pix = (((((redScan[xi] + adj) / div) & redMask) << redShift) + - ((((greenScan[xi] + adj) / div) & greenMask) << greenShift) + - ((((blueScan[xi] + adj) / div) & blueMask) << blueShift)); - XPutPixel(Im, x + xi, y, pix); - } -} - - -/* - * ScaleIcon transfers an area from XImage ImIn, locate (x1,y1) to ImOut, - * locate (x2, y2). - * Source size is (ix, iy) and destination size is (ox, oy). - * It does this by getting icon scan line from GetScaledScan and handling - * them the same way as pixels are handled in GetScaledScan. - * This even allows icons to be scaled differently in horizontal and - * vertical directions (eg. shrink horizontal, grow vertical). - */ -static void ScaleIcon(XImage *ImIn, XImage *ImOut, - int x1, int y1, int x2, int y2, - int ix, int iy, int ox, int oy) -{ - int div; - int xi, yi, si, sifrac, ci, cifrac, addWhole, addFrac; - - /* buffers for pixel rows: */ - unsigned long prevRed [MAX_ICON_WIDTH]; - unsigned long prevGreen [MAX_ICON_WIDTH]; - unsigned long prevBlue [MAX_ICON_WIDTH]; - unsigned long nextRed [MAX_ICON_WIDTH]; - unsigned long nextGreen [MAX_ICON_WIDTH]; - unsigned long nextBlue [MAX_ICON_WIDTH]; - unsigned long tempRed [MAX_ICON_WIDTH]; - unsigned long tempGreen [MAX_ICON_WIDTH]; - unsigned long tempBlue [MAX_ICON_WIDTH]; - - bool_ getNextRow; - - /* get divider value for the horizontal scaling: */ - if (ix == ox) - div = 1; - else if (ix < ox) - div = ox - 1; - else - div = ix; - - if (iy == oy) - { - /* no scaling needed vertically: */ - for (yi = 0; yi < oy; yi++) - { - GetScaledRow(ImIn, x1, y1 + yi, ix, ox, - tempRed, tempGreen, tempBlue); - PutRGBScan(ImOut, x2, y2 + yi, ox, div, - tempRed, tempGreen, tempBlue); - } - } - else if (iy < oy) - { - /* scaling by subsampling (grow): */ - iy--; - oy--; - div *= oy; - /* get first row: */ - GetScaledRow(ImIn, x1, y1, ix, ox, nextRed, nextGreen, nextBlue); - /* si and sifrac give the subsampling position: */ - si = y1; - sifrac = 0; - /* getNextRow tells us, that we need the next row */ - getNextRow = TRUE; - for (yi = 0; yi <= oy; yi++) - { - if (getNextRow) - { - for (xi = 0; xi < ox; xi++) - { - prevRed[xi] = nextRed[xi]; - prevGreen[xi] = nextGreen[xi]; - prevBlue[xi] = nextBlue[xi]; - } - if (yi < oy) - { - /* only get next row if in same icon */ - GetScaledRow(ImIn, x1, si + 1, ix, ox, - nextRed, nextGreen, nextBlue); - } - } - - /* calculate subsampled color values: */ - /* division by oy occurs in PutRGBScan */ - for (xi = 0; xi < ox; xi++) - { - tempRed[xi] = (prevRed[xi] * (oy - sifrac) + - nextRed[xi] * sifrac); - tempGreen[xi] = (prevGreen[xi] * (oy - sifrac) + - nextGreen[xi] * sifrac); - tempBlue[xi] = (prevBlue[xi] * (oy - sifrac) + - nextBlue[xi] * sifrac); - } - - /* write row to output image: */ - PutRGBScan(ImOut, x2, y2 + yi, ox, div, - tempRed, tempGreen, tempBlue); - - /* advance sampling position: */ - sifrac += iy; - if (sifrac >= oy) - { - si++; - sifrac -= oy; - getNextRow = TRUE; - } - else - { - getNextRow = FALSE; - } - - } - } - else - { - /* scaling by averaging (shrink) */ - div *= iy; - /* height of a output row in input rows: */ - addWhole = iy / oy; - addFrac = iy % oy; - /* start position of the first output row: */ - si = y1; - sifrac = 0; - /* get first input row: */ - GetScaledRow(ImIn, x1, y1, ix, ox, nextRed, nextGreen, nextBlue); - for (yi = 0; yi < oy; yi++) - { - /* find endpoint of the current output row: */ - ci = si + addWhole; - cifrac = sifrac + addFrac; - if (cifrac >= oy) - { - ci++; - cifrac -= oy; - } - /* take fraction of current input row (starting segment): */ - for (xi = 0; xi < ox; xi++) - { - tempRed[xi] = nextRed[xi] * (oy - sifrac); - tempGreen[xi] = nextGreen[xi] * (oy - sifrac); - tempBlue[xi] = nextBlue[xi] * (oy - sifrac); - } - si++; - /* add values for whole pixels: */ - while (si < ci) - { - GetScaledRow(ImIn, x1, si, ix, ox, - nextRed, nextGreen, nextBlue); - for (xi = 0; xi < ox; xi++) - { - tempRed[xi] += nextRed[xi] * oy; - tempGreen[xi] += nextGreen[xi] * oy; - tempBlue[xi] += nextBlue[xi] * oy; - } - si++; - } - /* add fraction of current input row (ending segment): */ - if (yi < oy - 1) - { - /* only get next row if still in icon: */ - GetScaledRow(ImIn, x1, si, ix, ox, - nextRed, nextGreen, nextBlue); - } - sifrac = cifrac; - for (xi = 0; xi < ox; xi++) - { - tempRed[xi] += nextRed[xi] * sifrac; - tempGreen[xi] += nextGreen[xi] * sifrac; - tempBlue[xi] += nextBlue[xi] * sifrac; - } - /* write row to output image: */ - PutRGBScan(ImOut, x2, y2 + yi, ox, div, - tempRed, tempGreen, tempBlue); - } - } -} - - - -static XImage *ResizeImageSmooth(Display *dpy, XImage *Im, - int ix, int iy, int ox, int oy) -{ - Visual *visual = DefaultVisual(dpy, DefaultScreen(dpy)); - - int width1, height1, width2, height2; - int x1, x2, y1, y2; - - XImage *Tmp; - - char *Data; - - width1 = Im->width; - height1 = Im->height; - - width2 = ox * width1 / ix; - height2 = oy * height1 / iy; - - Data = (char *)malloc(width2 * height2 * Im->bits_per_pixel / 8); - - Tmp = XCreateImage(dpy, visual, - Im->depth, ZPixmap, 0, Data, width2, height2, - 32, 0); - - /* compute values for decomposing pixel into color values: */ - redMask = Im->red_mask; - redShift = 0; - while ((redMask & 1) == 0) - { - redShift++; - redMask >>= 1; - } - greenMask = Im->green_mask; - greenShift = 0; - while ((greenMask & 1) == 0) - { - greenShift++; - greenMask >>= 1; - } - blueMask = Im->blue_mask; - blueShift = 0; - while ((blueMask & 1) == 0) - { - blueShift++; - blueMask >>= 1; - } - - /* scale each icon: */ - for (y1 = 0, y2 = 0; (y1 < height1) && (y2 < height2); y1 += iy, y2 += oy) - { - for (x1 = 0, x2 = 0; (x1 < width1) && (x2 < width2); x1 += ix, x2 += ox) - { - ScaleIcon(Im, Tmp, x1, y1, x2, y2, - ix, iy, ox, oy); - } - } - - return Tmp; -} - -/* - * Resize an image. XXX XXX XXX - * - * Also appears in "main-xaw.c". - */ -static XImage *ResizeImage(Display *dpy, XImage *Im, - int ix, int iy, int ox, int oy) -{ - Visual *visual = DefaultVisual(dpy, DefaultScreen(dpy)); - - int width1, height1, width2, height2; - int x1, x2, y1, y2, Tx, Ty; - int *px1, *px2, *dx1, *dx2; - int *py1, *py2, *dy1, *dy2; - - XImage *Tmp; - - char *Data; - - if (smoothRescaling && (ix != ox || iy != oy) && - visual->class == TrueColor) - { - return ResizeImageSmooth(dpy, Im, ix, iy, ox, oy); - } - - width1 = Im->width; - height1 = Im->height; - - width2 = ox * width1 / ix; - height2 = oy * height1 / iy; - - Data = (char *)malloc(width2 * height2 * Im->bits_per_pixel / 8); - - Tmp = XCreateImage(dpy, visual, - Im->depth, ZPixmap, 0, Data, width2, height2, - 32, 0); - - if (ix > ox) - { - px1 = &x1; - px2 = &x2; - dx1 = &ix; - dx2 = &ox; - } - else - { - px1 = &x2; - px2 = &x1; - dx1 = &ox; - dx2 = &ix; - } - - if (iy > oy) - { - py1 = &y1; - py2 = &y2; - dy1 = &iy; - dy2 = &oy; - } - else - { - py1 = &y2; - py2 = &y1; - dy1 = &oy; - dy2 = &iy; - } - - Ty = *dy1 / 2; - - for (y1 = 0, y2 = 0; (y1 < height1) && (y2 < height2); ) - { - Tx = *dx1 / 2; - - for (x1 = 0, x2 = 0; (x1 < width1) && (x2 < width2); ) - { - XPutPixel(Tmp, x2, y2, XGetPixel(Im, x1, y1)); - - (*px1)++; - - Tx -= *dx2; - if (Tx < 0) - { - Tx += *dx1; - (*px2)++; - } - } - - (*py1)++; - - Ty -= *dy2; - if (Ty < 0) - { - Ty += *dy1; - (*py2)++; - } - } - - return Tmp; -} - -#endif /* USE_GRAPHICS */ #endif /* USE_X11 || USE_XAW */ diff --git a/src/main-gcu.c b/src/main-gcu.c index 1562f15c..bfe68613 100644 --- a/src/main-gcu.c +++ b/src/main-gcu.c @@ -834,41 +834,6 @@ static errr Term_text_gcu(int x, int y, int n, byte a, cptr s) /* Draw each character */ for (i = 0; i < n; i++) { -#ifdef USE_GRAPHICS - /* Special character */ - if (use_graphics && (s[i] & 0x80)) - { - /* Determine picture to use */ - switch (s[i] & 0x7F) - { - -#ifdef ACS_CKBOARD - /* Wall */ - case '#': - pic = ACS_CKBOARD; - break; -#endif /* ACS_CKBOARD */ - -#ifdef ACS_BOARD - /* Mineral vein */ - case '%': - pic = ACS_BOARD; - break; -#endif /* ACS_BOARD */ - - /* XXX */ - default: - pic = '?'; - break; - } - - /* Draw the picture */ - waddch(td->win, pic); - - /* Next character */ - continue; - } -#endif /* Draw a normal character */ waddch(td->win, (byte)s[i]); @@ -992,12 +957,6 @@ errr init_gcu(int argc, char **argv) } -#ifdef USE_GRAPHICS - - /* Set graphics flag */ - use_graphics = arg_graphics; - -#endif #ifdef A_COLOR diff --git a/src/main-gtk2.c b/src/main-gtk2.c index fbcfe79b..7afe7b34 100644 --- a/src/main-gtk2.c +++ b/src/main-gtk2.c @@ -37,9 +37,6 @@ * Activate variant-specific features */ -#define USE_DOUBLE_TILES /* Mogami's bigtile patch */ - - #ifdef USE_GTK2 /* Force ANSI standard */ @@ -81,22 +78,6 @@ * back to the term_data structure. */ -#ifdef USE_GRAPHICS - -/* - * Since GdkRGB doesn't provide us some useful functions... - */ -typedef struct GdkRGBImage GdkRGBImage; - -struct GdkRGBImage -{ - gint width; - gint height; - gint ref_count; - guchar *image; -}; - -#endif /* USE_GRAPHICS */ /* @@ -123,16 +104,6 @@ struct term_data int rows; int cols; -#ifdef USE_GRAPHICS - - int tile_wid; - int tile_hgt; - - GdkRGBImage *tiles; - guint32 bg_pixel; - GdkRGBImage *trans_buf; - -#endif /* USE_GRAPHICS */ char *name; }; @@ -230,16 +201,6 @@ static cptr get_default_font(int term) #define can_save TRUE -/* - * The standard game uses this to implement lighting effects - * for 16x16 tiles in cave.c... - * - * Because of the way it is implemented in X11 ports, - * we can set this to TRUE even if we are using the 8x8 tileset. - */ -static bool_ use_transparency = TRUE; - - /**** Low level routines - colours and graphics ****/ @@ -292,1799 +253,6 @@ static void term_data_set_fg(term_data *td, byte attr) } -#ifdef USE_GRAPHICS - -/* - * Graphics mode selector - current setting and requested value - */ -#define GRAF_MODE_NONE 0 -#define GRAF_MODE_OLD 1 -#define GRAF_MODE_NEW 2 - -static int graf_mode = GRAF_MODE_NONE; -static int graf_mode_request = GRAF_MODE_NONE; - -/* - * Use smooth rescaling? - */ -static bool_ smooth_rescaling = TRUE; -static bool_ smooth_rescaling_request = TRUE; - -/* - * Dithering - */ -static GdkRgbDither dith_mode = GDK_RGB_DITHER_NORMAL; - -/* - * Need to reload and resize tiles when fonts are changed. - */ -static bool_ resize_request = FALSE; - -/* - * Numbers of columns and rows in current tileset - * calculated and set by the tile loading code in graf_init() - * and used by Term_pict_gtk() - */ -static int tile_rows; -static int tile_cols; - - -/* - * Directory name(s) - */ -static char *ANGBAND_DIR_XTRA_GRAF; - - -/* - * Be nice to old graphics hardwares -- using GdkRGB. - * - * We don't have colour allocation failure any longer this way, - * even with 8bpp X servers. Gimp *does* work with 8bpp, why not Angband? - * - * Initialisation (before any widgets are created) - * gdk_rgb_init(); - * gtk_widget_set_default_colormap (gdk_rgb_get_cmap()); - * gtk_widget_set_default_visual (gdk_rgb_get_visual()); - * - * Setting fg/bg colours - * void gdk_rgb_gc_set_foreground(GdkGC *gc, guint32 rgb); - * void gdk_rgb_gc_set_background(GdkGC *gc, guint32 rgb); - * where rgb is 0xRRGGBB. - * - * Drawing rgb images - * void gdk_draw_rgb_image( - * GdkDrawable *drawable, - * GdkGC *gc, - * gint x, gint y, - * gint width, gint height, - * GdkRgbDither dith, - * guchar *rgb_buf, - * gint rowstride); - * - * dith: - * GDK_RGB_DITHER_NORMAL : dither if 8bpp or below - * GDK_RGB_DITHER_MAX : dither if 16bpp or below. - * - * for 0 <= i < width and 0 <= j < height, - * the pixel (x + i, y + j) is colored with - * red value rgb_buf[j * rowstride + i * 3], - * green value rgb_buf[j * rowstride + i * 3 + 1], and - * blue value rgb_buf[j * rowstride + i * 3 + 2]. - */ - -/* - * gdk_image compatibility functions - should be part of gdk, IMHO. - */ - -/* - * Create GdkRGBImage of width * height and return pointer - * to it. Returns NULL on failure - */ -static GdkRGBImage *gdk_rgb_image_new( - gint width, - gint height) -{ - GdkRGBImage *result; - - /* Allocate a struct */ - result = g_new(GdkRGBImage, 1); - - /* Oops */ - if (result == NULL) return (NULL); - - /* Allocate buffer */ - result->image = g_new0(guchar, width * height * 3); - - /* Oops */ - if (result->image == NULL) - { - g_free(result); - return (NULL); - } - - /* Initialise size fields */ - result->width = width; - result->height = height; - - /* Initialise reference count */ - result->ref_count = 1; - - /* Success */ - return (result); -} - -/* - * Free a GdkRGBImage - */ -static void gdk_rgb_image_destroy( - GdkRGBImage *im) -{ - /* Paranoia */ - if (im == NULL) return; - - /* Free the RGB buffer */ - g_free(im->image); - - /* Free the structure */ - g_free(im); -} - - -/* - * Write RGB pixel of the format 0xRRGGBB to (x, y) in GdkRGBImage - */ -static void gdk_rgb_image_put_pixel( - GdkRGBImage *im, - gint x, - gint y, - guint32 pixel) -{ - guchar *rgbp; - - /* Paranoia */ - g_return_if_fail(im != NULL); - - /* Paranoia */ - if ((x < 0) || (x >= im->width)) return; - - /* Paranoia */ - if ((y < 0) || (y >= im->height)) return; - - /* Access RGB data */ - rgbp = &im->image[(y * im->width * 3) + (x * 3)]; - - /* Red */ - *rgbp++ = (pixel >> 16) & 0xFF; - /* Green */ - *rgbp++ = (pixel >> 8) & 0xFF; - /* Blue */ - *rgbp = pixel & 0xFF; -} - - -/* - * Returns RGB pixel (0xRRGGBB) at (x, y) in GdkRGBImage - */ -static guint32 gdk_rgb_image_get_pixel( - GdkRGBImage *im, - gint x, - gint y) -{ - guchar *rgbp; - - /* Paranoia */ - if (im == NULL) return (0); - - /* Paranoia - returns black */ - if ((x < 0) || (x >= im->width)) return (0); - - /* Paranoia */ - if ((y < 0) || (y >= im->height)) return (0); - - /* Access RGB data */ - rgbp = &im->image[(y * im->width * 3) + (x * 3)]; - - /* Return result */ - return ((rgbp[0] << 16) | (rgbp[1] << 8) | (rgbp[2])); -} - - -/* - * Since gdk_draw_rgb_image is a bit harder to use than it's - * GdkImage counterpart, I wrote a grue function that takes - * exactly the same parameters as gdk_draw_image, with - * the GdkImage parameter replaced with GdkRGBImage. - */ -static void gdk_draw_rgb_image_2( - GdkDrawable *drawable, - GdkGC *gc, - GdkRGBImage *image, - gint xsrc, - gint ysrc, - gint xdest, - gint ydest, - gint width, - gint height) -{ - /* Paranoia */ - g_return_if_fail(drawable != NULL); - g_return_if_fail(image != NULL); - - /* Paranoia */ - if (xsrc < 0 || (xsrc + width - 1) >= image->width) return; - if (ysrc < 0 || (ysrc + height - 1) >= image->height) return; - - /* Draw the image at (xdest, ydest), with dithering if bpp <= 8/16 */ - gdk_draw_rgb_image( - drawable, - gc, - xdest, - ydest, - width, - height, - dith_mode, - &image->image[(ysrc * image->width * 3) + (xsrc * 3)], - image->width * 3); -} - - -/* - * Code for smooth icon rescaling from Uwe Siems, Jan 2000 - * - * XXX XXX Duplication of maid-x11.c, again. It doesn't do any colour - * allocation, either. - */ - -/* - * to save ourselves some labour, define a maximum expected icon width here: - */ -#define MAX_ICON_WIDTH 32 - - -/* - * Each pixel is kept in this structure during smooth rescaling - * calculations, to make things a bit easier - */ -typedef struct rgb_type rgb_type; - -struct rgb_type -{ - guint32 red; - guint32 green; - guint32 blue; -}; - -/* - * Because there are many occurences of this, and because - * it's logical to do so... - */ -#define pixel_to_rgb(pix, rgb_buf) \ -(rgb_buf)->red = ((pix) >> 16) & 0xFF; \ -(rgb_buf)->green = ((pix) >> 8) & 0xFF; \ -(rgb_buf)->blue = (pix) & 0xFF - - -/* - * get_scaled_row reads a scan from the given GdkRGBImage, scales it smoothly - * and returns the red, green and blue values in arrays. - * The values in this arrays must be divided by a certain value that is - * calculated in scale_icon. - * x, y is the position, iw is the input width and ow the output width - * scan must be sufficiently sized - */ -static void get_scaled_row( - GdkRGBImage *im, - int x, - int y, - int iw, - int ow, - rgb_type *scan) -{ - int xi, si, sifrac, ci, cifrac, add_whole, add_frac; - guint32 pix; - rgb_type prev; - rgb_type next; - bool_ get_next_pix; - - /* Unscaled */ - if (iw == ow) - { - for (xi = 0; xi < ow; xi++) - { - pix = gdk_rgb_image_get_pixel(im, x + xi, y); - pixel_to_rgb(pix, &scan[xi]); - } - } - - /* Scaling by subsampling (grow) */ - else if (iw < ow) - { - iw--; - ow--; - - /* read first pixel: */ - pix = gdk_rgb_image_get_pixel(im, x, y); - pixel_to_rgb(pix, &next); - prev = next; - - /* si and sifrac give the subsampling position: */ - si = x; - sifrac = 0; - - /* get_next_pix tells us, that we need the next pixel */ - get_next_pix = TRUE; - - for (xi = 0; xi <= ow; xi++) - { - if (get_next_pix) - { - prev = next; - if (xi < ow) - { - /* only get next pixel if in same icon */ - pix = gdk_rgb_image_get_pixel(im, si + 1, y); - pixel_to_rgb(pix, &next); - } - } - - /* calculate subsampled color values: */ - /* division by ow occurs in scale_icon */ - scan[xi].red = prev.red * (ow - sifrac) + next.red * sifrac; - scan[xi].green = prev.green * (ow - sifrac) + next.green * sifrac; - scan[xi].blue = prev.blue * (ow - sifrac) + next.blue * sifrac; - - /* advance sampling position: */ - sifrac += iw; - if (sifrac >= ow) - { - si++; - sifrac -= ow; - get_next_pix = TRUE; - } - else - { - get_next_pix = FALSE; - } - - } - } - - /* Scaling by averaging (shrink) */ - else - { - /* width of an output pixel in input pixels: */ - add_whole = iw / ow; - add_frac = iw % ow; - - /* start position of the first output pixel: */ - si = x; - sifrac = 0; - - /* get first input pixel: */ - pix = gdk_rgb_image_get_pixel(im, x, y); - pixel_to_rgb(pix, &next); - - for (xi = 0; xi < ow; xi++) - { - /* find endpoint of the current output pixel: */ - ci = si + add_whole; - cifrac = sifrac + add_frac; - if (cifrac >= ow) - { - ci++; - cifrac -= ow; - } - - /* take fraction of current input pixel (starting segment): */ - scan[xi].red = next.red * (ow - sifrac); - scan[xi].green = next.green * (ow - sifrac); - scan[xi].blue = next.blue * (ow - sifrac); - si++; - - /* add values for whole pixels: */ - while (si < ci) - { - rgb_type tmp_rgb; - - pix = gdk_rgb_image_get_pixel(im, si, y); - pixel_to_rgb(pix, &tmp_rgb); - scan[xi].red += tmp_rgb.red * ow; - scan[xi].green += tmp_rgb.green * ow; - scan[xi].blue += tmp_rgb.blue * ow; - si++; - } - - /* add fraction of current input pixel (ending segment): */ - if (xi < ow - 1) - { - /* only get next pixel if still in icon: */ - pix = gdk_rgb_image_get_pixel(im, si, y); - pixel_to_rgb(pix, &next); - } - - sifrac = cifrac; - if (sifrac > 0) - { - scan[xi].red += next.red * sifrac; - scan[xi].green += next.green * sifrac; - scan[xi].blue += next.blue * sifrac; - } - } - } -} - - -/* - * put_rgb_scan takes arrays for red, green and blue and writes pixel values - * according to this values in the GdkRGBImage-structure. w is the number of - * pixels to write and div is the value by which all red/green/blue values - * are divided first. - */ -static void put_rgb_scan( - GdkRGBImage *im, - int x, - int y, - int w, - int div, - rgb_type *scan) -{ - int xi; - guint32 pix; - guint32 adj = div / 2; - - for (xi = 0; xi < w; xi++) - { - byte r, g, b; - - /* un-factor the RGB values */ - r = (scan[xi].red + adj) / div; - g = (scan[xi].green + adj) / div; - b = (scan[xi].blue + adj) / div; - - /* Make a (virtual) 24-bit pixel */ - pix = (r << 16) | (g << 8) | (b); - - /* Draw it into image */ - gdk_rgb_image_put_pixel(im, x + xi, y, pix); - } -} - - -/* - * scale_icon transfers an area from GdkRGBImage im_in, locate (x1,y1) to - * im_out, locate (x2, y2). Source size is (ix, iy) and destination size - * is (ox, oy). - * - * It does this by getting icon scan line from get_scaled_scan and handling - * them the same way as pixels are handled in get_scaled_scan. - * This even allows icons to be scaled differently in horizontal and - * vertical directions (eg. shrink horizontal, grow vertical). - */ -static void scale_icon( - GdkRGBImage *im_in, - GdkRGBImage *im_out, - int x1, - int y1, - int x2, - int y2, - int ix, - int iy, - int ox, - int oy) -{ - int div; - int xi, yi, si, sifrac, ci, cifrac, add_whole, add_frac; - - /* buffers for pixel rows: */ - rgb_type prev[MAX_ICON_WIDTH]; - rgb_type next[MAX_ICON_WIDTH]; - rgb_type temp[MAX_ICON_WIDTH]; - - bool_ get_next_row; - - /* get divider value for the horizontal scaling: */ - if (ix == ox) - div = 1; - else if (ix < ox) - div = ox - 1; - else - div = ix; - - /* no scaling needed vertically: */ - if (iy == oy) - { - for (yi = 0; yi < oy; yi++) - { - get_scaled_row(im_in, x1, y1 + yi, ix, ox, temp); - put_rgb_scan(im_out, x2, y2 + yi, ox, div, temp); - } - } - - /* scaling by subsampling (grow): */ - else if (iy < oy) - { - iy--; - oy--; - div *= oy; - - /* get first row: */ - get_scaled_row(im_in, x1, y1, ix, ox, next); - - /* si and sifrac give the subsampling position: */ - si = y1; - sifrac = 0; - - /* get_next_row tells us, that we need the next row */ - get_next_row = TRUE; - for (yi = 0; yi <= oy; yi++) - { - if (get_next_row) - { - for (xi = 0; xi < ox; xi++) - { - prev[xi] = next[xi]; - } - if (yi < oy) - { - /* only get next row if in same icon */ - get_scaled_row(im_in, x1, si + 1, ix, ox, next); - } - } - - /* calculate subsampled color values: */ - /* division by oy occurs in put_rgb_scan */ - for (xi = 0; xi < ox; xi++) - { - temp[xi].red = (prev[xi].red * (oy - sifrac) + - next[xi].red * sifrac); - temp[xi].green = (prev[xi].green * (oy - sifrac) + - next[xi].green * sifrac); - temp[xi].blue = (prev[xi].blue * (oy - sifrac) + - next[xi].blue * sifrac); - } - - /* write row to output image: */ - put_rgb_scan(im_out, x2, y2 + yi, ox, div, temp); - - /* advance sampling position: */ - sifrac += iy; - if (sifrac >= oy) - { - si++; - sifrac -= oy; - get_next_row = TRUE; - } - else - { - get_next_row = FALSE; - } - - } - } - - /* scaling by averaging (shrink) */ - else - { - div *= iy; - - /* height of a output row in input rows: */ - add_whole = iy / oy; - add_frac = iy % oy; - - /* start position of the first output row: */ - si = y1; - sifrac = 0; - - /* get first input row: */ - get_scaled_row(im_in, x1, y1, ix, ox, next); - for (yi = 0; yi < oy; yi++) - { - /* find endpoint of the current output row: */ - ci = si + add_whole; - cifrac = sifrac + add_frac; - if (cifrac >= oy) - { - ci++; - cifrac -= oy; - } - - /* take fraction of current input row (starting segment): */ - for (xi = 0; xi < ox; xi++) - { - temp[xi].red = next[xi].red * (oy - sifrac); - temp[xi].green = next[xi].green * (oy - sifrac); - temp[xi].blue = next[xi].blue * (oy - sifrac); - } - si++; - - /* add values for whole pixels: */ - while (si < ci) - { - get_scaled_row(im_in, x1, si, ix, ox, next); - for (xi = 0; xi < ox; xi++) - { - temp[xi].red += next[xi].red * oy; - temp[xi].green += next[xi].green * oy; - temp[xi].blue += next[xi].blue * oy; - } - si++; - } - - /* add fraction of current input row (ending segment): */ - if (yi < oy - 1) - { - /* only get next row if still in icon: */ - get_scaled_row(im_in, x1, si, ix, ox, next); - } - sifrac = cifrac; - for (xi = 0; xi < ox; xi++) - { - temp[xi].red += next[xi].red * sifrac; - temp[xi].green += next[xi].green * sifrac; - temp[xi].blue += next[xi].blue * sifrac; - } - - /* write row to output image: */ - put_rgb_scan(im_out, x2, y2 + yi, ox, div, temp); - } - } -} - - -/* - * Rescale icons using sort of anti-aliasing technique. - */ -static GdkRGBImage *resize_tiles_smooth( - GdkRGBImage *im, - int ix, - int iy, - int ox, - int oy) -{ - int width1, height1, width2, height2; - int x1, x2, y1, y2; - - GdkRGBImage *tmp; - - /* Original size */ - width1 = im->width; - height1 = im->height; - - /* Rescaled size */ - width2 = ox * width1 / ix; - height2 = oy * height1 / iy; - - /* Allocate GdkRGBImage for resized tiles */ - tmp = gdk_rgb_image_new(width2, height2); - - /* Oops */ - if (tmp == NULL) return (NULL); - - /* Scale each icon */ - for (y1 = 0, y2 = 0; (y1 < height1) && (y2 < height2); y1 += iy, y2 += oy) - { - for (x1 = 0, x2 = 0; (x1 < width1) && (x2 < width2); x1 += ix, x2 += ox) - { - scale_icon(im, tmp, x1, y1, x2, y2, - ix, iy, ox, oy); - } - } - - return tmp; -} - - -/* - * Steven Fuerst's tile resizing code - * Taken from Z because I think the algorithm is cool. - */ - -/* 24-bit version - GdkRGB uses 24 bit RGB data internally */ -static void copy_pixels( - int wid, - int y, - int offset, - int *xoffsets, - GdkRGBImage *old_image, - GdkRGBImage *new_image) -{ - int i; - - /* Get source and destination */ - byte *src = &old_image->image[offset * old_image->width * 3]; - byte *dst = &new_image->image[y * new_image->width * 3]; - - /* Copy to the image */ - for (i = 0; i < wid; i++) - { - *dst++ = src[3 * xoffsets[i]]; - *dst++ = src[3 * xoffsets[i] + 1]; - *dst++ = src[3 * xoffsets[i] + 2]; - } -} - - -/* - * Resize ix * iy pixel tiles in old to ox * oy pixels - * and return a new GdkRGBImage containing the resized tiles - */ -static GdkRGBImage *resize_tiles_fast( - GdkRGBImage *old_image, - int ix, - int iy, - int ox, - int oy) -{ - GdkRGBImage *new_image; - - int old_wid, old_hgt; - - int new_wid, new_hgt; - - int add, remainder, rem_tot, offset; - - int *xoffsets; - - int i; - - - /* Get the size of the old image */ - old_wid = old_image->width; - old_hgt = old_image->height; - - /* Calculate the size of the new image */ - new_wid = (old_wid / ix) * ox; - new_hgt = (old_hgt / iy) * oy; - - /* Allocate a GdkRGBImage to store resized tiles */ - new_image = gdk_rgb_image_new(new_wid, new_hgt); - - /* Paranoia */ - if (new_image == NULL) return (NULL); - - /* now begins the cool part of SF's code */ - - /* - * Calculate an offsets table, so the transformation - * is faster. This is much like the Bresenham algorithm - */ - - /* Set up x offset table */ - xoffsets = safe_calloc(new_wid, sizeof(int)); - - /* Initialize line parameters */ - add = old_wid / new_wid; - remainder = old_wid % new_wid; - - /* Start at left */ - offset = 0; - - /* Half-tile offset so 'line' is centered correctly */ - rem_tot = new_wid / 2; - - for (i = 0; i < new_wid; i++) - { - /* Store into the table */ - xoffsets[i] = offset; - - /* Move to next entry */ - offset += add; - - /* Take care of fractional part */ - rem_tot += remainder; - if (rem_tot >= new_wid) - { - rem_tot -= new_wid; - offset++; - } - } - - /* Scan each row */ - - /* Initialize line parameters */ - add = old_hgt / new_hgt; - remainder = old_hgt % new_hgt; - - /* Start at left */ - offset = 0; - - /* Half-tile offset so 'line' is centered correctly */ - rem_tot = new_hgt / 2; - - for (i = 0; i < new_hgt; i++) - { - /* Copy pixels to new image */ - copy_pixels(new_wid, i, offset, xoffsets, old_image, new_image); - - /* Move to next entry */ - offset += add; - - /* Take care of fractional part */ - rem_tot += remainder; - if (rem_tot >= new_hgt) - { - rem_tot -= new_hgt; - offset++; - } - } - - /* Free offset table */ - free(xoffsets); - - return (new_image); -} - - -/* - * Resize an image of ix * iy pixels and return a newly allocated - * image of ox * oy pixels. - */ -static GdkRGBImage *resize_tiles( - GdkRGBImage *im, - int ix, - int iy, - int ox, - int oy) -{ - GdkRGBImage *result; - - /* - * I hope we can always use this with GdkRGB, which uses a 5x5x5 - * colour cube (125 colours) by default, and resort to dithering - * when it can't find good match there or expand the cube, so it - * works with 8bpp X servers. - */ - if (smooth_rescaling_request && (ix != ox || iy != oy)) - { - result = resize_tiles_smooth(im, ix, iy, ox, oy); - } - - /* - * Unless smoothing is requested by user, we use the fast - * resizing code. - */ - else - { - result = resize_tiles_fast(im, ix, iy, ox, oy); - } - - /* Return rescaled tiles, or NULL */ - return (result); -} - - -/* - * Tile loaders - XPM and BMP - */ - -/* - * A helper function for the XPM loader - * - * Read next string delimited by double quotes from - * the input stream. Return TRUE on success, FALSE - * if it finds EOF or buffer overflow. - * - * I never mean this to be generic, so its EOF and buffer - * overflow behaviour is terribly stupid -- there are no - * provisions for recovery. - * - * CAVEAT: treatment of backslash is not compatible with the standard - * C usage XXX XXX XXX XXX - */ -static bool_ read_str(char *buf, u32b len, FILE *f) -{ - int c; - - /* Paranoia - Buffer too small */ - if (len <= 0) return (FALSE); - - /* Find " */ - while ((c = getc(f)) != '"') - { - /* Premature EOF */ - if (c == EOF) return (FALSE); - } - - while (1) - { - /* Read next char */ - c = getc(f); - - /* Premature EOF */ - if (c == EOF) return (FALSE); - - /* Terminating " */ - if (c == '"') break; - - /* Escape */ - if (c == '\\') - { - /* Use next char */ - c = getc(f); - - /* Premature EOF */ - if (c == EOF) return (FALSE); - } - - /* Store character in the buffer */ - *buf++ = c; - - /* Decrement count */ - len--; - - /* Buffer full - we have to place a NULL at the end */ - if (len <= 0) return (FALSE); - } - - /* Make a C string if there's room left */ - if (len > 0) *buf = '\0'; - - /* Success */ - return (TRUE); -} - - -/* - * Remember pixel symbol to RGB colour mappings - */ - -/* - * I've forgot the formula, but I remember prime number yields - * good results - */ -#define HASH_SIZE 19 - -typedef struct pal_type pal_type; - -struct pal_type -{ - u32b str; - u32b rgb; - pal_type *next; -}; - - -/* - * A simple, slow and stupid XPM loader - */ -static GdkRGBImage *load_xpm(cptr filename) -{ - FILE *f; - GdkRGBImage *img = NULL; - int width, height, colours, chars; - int i, j, k; - bool_ ret; - pal_type *pal = NULL; - pal_type *head[HASH_SIZE]; - u32b buflen = 0; - char *lin = NULL; - char buf[1024]; - - /* Build path to the XPM file */ - path_build(buf, 1024, ANGBAND_DIR_XTRA_GRAF, filename); - - /* Open it */ - f = my_fopen(buf, "r"); - - /* Oops */ - if (f == NULL) return (NULL); - - /* Read header */ - ret = read_str(buf, 1024, f); - - /* Oops */ - if (!ret) - { - /* Notify error */ - plog("Cannot find XPM header"); - - /* Failure */ - goto oops; - } - - /* Parse header */ - if (4 != sscanf(buf, "%d %d %d %d", &width, &height, &colours, &chars)) - { - /* Notify error */ - plog("Bad XPM header"); - - /* Failure */ - goto oops; - } - - /* - * Paranoia - the code can handle upto four letters per pixel, - * but such large number of colours certainly requires a smarter - * symbol-to-colour mapping algorithm... - */ - if ((width <= 0) || (height <= 0) || (colours <= 0) || (chars <= 0) || - (chars > 2)) - { - /* Notify error */ - plog("Invalid width/height/depth"); - - /* Failure */ - goto oops; - } - - /* Allocate palette */ - pal = safe_calloc(colours, sizeof(pal_type)); - - /* Initialise hash table */ - for (i = 0; i < HASH_SIZE; i++) head[i] = NULL; - - /* Parse palette */ - for (i = 0; i < colours; i++) - { - u32b tmp; - int h_idx; - - /* Read next string */ - ret = read_str(buf, 1024, f); - - /* Check I/O result */ - if (!ret) - { - /* Notify error */ - plog("EOF in palette"); - - /* Failure */ - goto oops; - } - - /* Clear symbol code */ - tmp = 0; - - /* Encode pixel symbol */ - for (j = 0; j < chars; j++) - { - tmp = (tmp << 8) | (buf[j] & 0xFF); - } - - /* Remember it */ - pal[i].str = tmp; - - /* Skip spaces */ - while ((buf[j] == ' ') || (buf[j] == '\t')) j++; - - /* Verify 'c' */ - if (buf[j] != 'c') - { - /* Notify error */ - plog("No 'c' in palette definition"); - - /* Failure */ - goto oops; - } - - /* Advance cursor */ - j++; - - /* Skip spaces */ - while ((buf[j] == ' ') || (buf[j] == '\t')) j++; - - /* Hack - Assume 'None' */ - if (buf[j] == 'N') - { - /* Angband always uses black background */ - pal[i].rgb = 0x000000; - } - - /* Read colour */ - else if ((1 != sscanf(&buf[j], "#%06lX", &tmp)) && - (1 != sscanf(&buf[j], "#%06lx", &tmp))) - { - /* Notify error */ - plog("Badly formatted colour"); - - /* Failure */ - goto oops; - } - - /* Remember it */ - pal[i].rgb = tmp; - - /* Store it in hash table as well */ - h_idx = pal[i].str % HASH_SIZE; - - /* Link the entry */ - pal[i].next = head[h_idx]; - head[h_idx] = &pal[i]; - } - - /* Allocate image */ - img = gdk_rgb_image_new(width, height); - - /* Oops */ - if (img == NULL) - { - /* Notify error */ - plog("Cannot allocate image"); - - /* Failure */ - goto oops; - } - - /* Calculate buffer length */ - buflen = width * chars + 1; - - /* Allocate line buffer */ - lin = safe_calloc(buflen, sizeof(char)); - - /* For each row */ - for (i = 0; i < height; i++) - { - /* Read a row of image data */ - ret = read_str(lin, buflen, f); - - /* Oops */ - if (!ret) - { - /* Notify error */ - plog("EOF in middle of image data"); - - /* Failure */ - goto oops; - } - - /* For each column */ - for (j = 0; j < width; j++) - { - u32b tmp; - pal_type *h_ptr; - - /* Clear encoded pixel */ - tmp = 0; - - /* Encode pixel symbol */ - for (k = 0; k < chars; k++) - { - tmp = (tmp << 8) | (lin[j * chars + k] & 0xFF); - } - - /* Find colour */ - for (h_ptr = head[tmp % HASH_SIZE]; - h_ptr != NULL; - h_ptr = h_ptr->next) - { - /* Found a match */ - if (h_ptr->str == tmp) break; - } - - /* No match found */ - if (h_ptr == NULL) - { - /* Notify error */ - plog("Invalid pixel symbol"); - - /* Failure */ - goto oops; - } - - /* Draw it */ - gdk_rgb_image_put_pixel( - img, - j, - i, - h_ptr->rgb); - } - } - - /* Close file */ - my_fclose(f); - - /* Free line buffer */ - free(lin); - - /* Free palette */ - free(pal); - - /* Return result */ - return (img); - -oops: - - /* Close file */ - my_fclose(f); - - /* Free image */ - if (img) gdk_rgb_image_destroy(img); - - /* Free line buffer */ - if (lin) free(lin); - - /* Free palette */ - if (pal) free(pal); - - /* Failure */ - return (NULL); -} - - -/* - * A BMP loader, yet another duplication of maid-x11.c functions. - * - * Another duplication, again because of different image format and - * avoidance of colour allocation. - * - * XXX XXX XXX XXX Should avoid using a propriatary and closed format. - * Since it's much bigger than gif that was used before, why don't - * we switch to XPM? NetHack does. Well, NH has always been much - * closer to the GNU/Un*x camp and it's GPL'ed quite early... - * - * The names and naming convention are worse than the worst I've ever - * seen, so I deliberately changed them to fit well with the rest of - * the code. Or are they what xx calls them? If it's the case, there's - * no reason to follow *their* words. - */ - -/* - * BMP file header - */ -typedef struct bmp_file_type bmp_file_type; - -struct bmp_file_type -{ - u16b type; - u32b size; - u16b reserved1; - u16b reserved2; - u32b offset; -}; - - -/* - * BMP file information fields - */ -typedef struct bmp_info_type bmp_info_type; - -struct bmp_info_type -{ - u32b size; - u32b width; - u32b height; - u16b planes; - u16b bit_count; - u32b compression; - u32b size_image; - u32b x_pels_per_meter; - u32b y_pels_per_meter; - u32b colors_used; - u32b color_importand; -}; - -/* - * "RGBQUAD" type. - */ -typedef struct rgb_quad_type rgb_quad_type; - -struct rgb_quad_type -{ - unsigned char b, g, r; - unsigned char filler; -}; - - -/*** Helper functions for system independent file loading. ***/ - -static byte get_byte(FILE *fff) -{ - /* Get a character, and return it */ - return (getc(fff) & 0xFF); -} - -static void rd_byte(FILE *fff, byte *ip) -{ - *ip = get_byte(fff); -} - -static void rd_u16b(FILE *fff, u16b *ip) -{ - (*ip) = get_byte(fff); - (*ip) |= ((u16b)(get_byte(fff)) << 8); -} - -static void rd_u32b(FILE *fff, u32b *ip) -{ - (*ip) = get_byte(fff); - (*ip) |= ((u32b)(get_byte(fff)) << 8); - (*ip) |= ((u32b)(get_byte(fff)) << 16); - (*ip) |= ((u32b)(get_byte(fff)) << 24); -} - - -/* - * Read a BMP file (a certain trademark nuked) - * - * This function replaces the old ReadRaw and RemapColors functions. - * - * Assumes that the bitmap has a size such that no padding is needed in - * various places. Currently only handles bitmaps with 3 to 256 colors. - */ -GdkRGBImage *load_bmp(cptr filename) -{ - FILE *f; - - char path[1024]; - - bmp_file_type file_hdr; - bmp_info_type info_hdr; - - GdkRGBImage *result = NULL; - - int ncol; - - int i; - - u32b x, y; - - guint32 colour_pixels[256]; - - - /* Build the path to the bmp file */ - path_build(path, 1024, ANGBAND_DIR_XTRA_GRAF, filename); - - /* Open the BMP file */ - f = fopen(path, "r"); - - /* No such file */ - if (f == NULL) - { - return (NULL); - } - - /* Read the "bmp_file_type" */ - rd_u16b(f, &file_hdr.type); - rd_u32b(f, &file_hdr.size); - rd_u16b(f, &file_hdr.reserved1); - rd_u16b(f, &file_hdr.reserved2); - rd_u32b(f, &file_hdr.offset); - - /* Read the "bmp_info_type" */ - rd_u32b(f, &info_hdr.size); - rd_u32b(f, &info_hdr.width); - rd_u32b(f, &info_hdr.height); - rd_u16b(f, &info_hdr.planes); - rd_u16b(f, &info_hdr.bit_count); - rd_u32b(f, &info_hdr.compression); - rd_u32b(f, &info_hdr.size_image); - rd_u32b(f, &info_hdr.x_pels_per_meter); - rd_u32b(f, &info_hdr.y_pels_per_meter); - rd_u32b(f, &info_hdr.colors_used); - rd_u32b(f, &info_hdr.color_importand); - - /* Verify the header */ - if (feof(f) || - (file_hdr.type != 19778) || - (info_hdr.size != 40)) - { - plog(format("Incorrect BMP file format %s", filename)); - fclose(f); - return (NULL); - } - - /* - * The two headers above occupy 54 bytes total - * The "offset" field says where the data starts - * The "colors_used" field does not seem to be reliable - */ - - /* Compute number of colors recorded */ - ncol = (file_hdr.offset - 54) / 4; - - for (i = 0; i < ncol; i++) - { - rgb_quad_type clr; - - /* Read an "rgb_quad_type" */ - rd_byte(f, &clr.b); - rd_byte(f, &clr.g); - rd_byte(f, &clr.r); - rd_byte(f, &clr.filler); - - /* Remember the pixel */ - colour_pixels[i] = (clr.r << 16) | (clr.g << 8) | (clr.b); - } - - /* Allocate GdkRGBImage large enough to store the image */ - result = gdk_rgb_image_new(info_hdr.width, info_hdr.height); - - /* Failure */ - if (result == NULL) - { - fclose(f); - return (NULL); - } - - for (y = 0; y < info_hdr.height; y++) - { - u32b y2 = info_hdr.height - y - 1; - - for (x = 0; x < info_hdr.width; x++) - { - int ch = getc(f); - - /* Verify not at end of file XXX XXX */ - if (feof(f)) - { - plog(format("Unexpected end of file in %s", filename)); - gdk_rgb_image_destroy(result); - fclose(f); - return (NULL); - } - - if (info_hdr.bit_count == 24) - { - int c3, c2 = getc(f); - - /* Verify not at end of file XXX XXX */ - if (feof(f)) - { - plog(format("Unexpected end of file in %s", filename)); - gdk_rgb_image_destroy(result); - fclose(f); - return (NULL); - } - - c3 = getc(f); - - /* Verify not at end of file XXX XXX */ - if (feof(f)) - { - plog(format("Unexpected end of file in %s", filename)); - gdk_rgb_image_destroy(result); - fclose(f); - return (NULL); - } - - /* Draw the pixel */ - gdk_rgb_image_put_pixel( - result, - x, - y2, - (ch << 16) | (c2 << 8) | (c3)); - } - else if (info_hdr.bit_count == 8) - { - gdk_rgb_image_put_pixel(result, x, y2, colour_pixels[ch]); - } - else if (info_hdr.bit_count == 4) - { - gdk_rgb_image_put_pixel(result, x, y2, colour_pixels[ch / 16]); - x++; - gdk_rgb_image_put_pixel(result, x, y2, colour_pixels[ch % 16]); - } - else - { - /* Technically 1 bit is legal too */ - plog(format("Illegal bit count %d in %s", - info_hdr.bit_count, filename)); - gdk_rgb_image_destroy(result); - fclose(f); - return (NULL); - } - } - } - - fclose(f); - - return result; -} - - -/* - * Try to load an XPM file, or a BMP file if it fails - * - * Choice of file format may better be made yet another option XXX - */ -static GdkRGBImage *load_tiles(cptr basename) -{ - char buf[32]; - GdkRGBImage *img; - - /* build xpm file name */ - strnfmt(buf, 32, "%s.xpm", basename); - - /* Try to load it */ - img = load_xpm(buf); - - /* OK */ - if (img) return (img); - - /* Try again for a bmp file */ - strnfmt(buf, 32, "%s.bmp", basename); - - /* Try loading it */ - img = load_bmp(buf); - - /* Return result, success or failure */ - return (img); -} - - -/* - * Free all tiles and graphics buffers associated with windows - * - * This is conspirator of graf_init() below, sharing its inefficiency - */ -static void graf_nuke() -{ - int i; - - term_data *td; - - - /* Nuke all terms */ - for (i = 0; i < MAX_TERM_DATA; i++) - { - /* Access term_data structure */ - td = &data[i]; - - /* Disable graphics */ - td->t.higher_pict = FALSE; - - /* Free previously allocated tiles */ - if (td->tiles) gdk_rgb_image_destroy(td->tiles); - - /* Forget pointer */ - td->tiles = NULL; - - /* Free previously allocated transparency buffer */ - if (td->trans_buf) gdk_rgb_image_destroy(td->trans_buf); - - /* Forget stale pointer */ - td->trans_buf = NULL; - } -} - - -/* - * Load tiles, scale them to current font size, and store a pointer - * to them in a term_data structure for each term. - * - * XXX XXX XXX This is a terribly stupid quick hack. - * - * XXX XXX XXX Windows using the same font should share resized tiles - */ -static bool_ graf_init( - cptr filename, - int tile_wid, - int tile_hgt) -{ - term_data *td; - - bool_ result; - - GdkRGBImage *raw_tiles, *scaled_tiles; - - GdkRGBImage *buffer; - - int i; - - - /* Paranoia */ - if (filename == NULL) return (FALSE); - - /* Load tiles */ - raw_tiles = load_tiles(filename); - - /* Oops */ - if (raw_tiles == NULL) - { - /* Clean up */ - graf_nuke(); - - /* Failure */ - return (FALSE); - } - - /* Calculate and remember numbers of rows and columns */ - tile_rows = raw_tiles->height / tile_hgt; - tile_cols = raw_tiles->width / tile_wid; - - /* Be optimistic */ - result = TRUE; - - - /* - * (Re-)init each term - * XXX It might help speeding this up to avoid doing so if a window - * doesn't need graphics (e.g. inventory/equipment and message recall). - */ - for (i = 0; i < MAX_TERM_DATA; i++) - { - /* Access term_data */ - td = &data[i]; - - /* Shouldn't waste anything for unused terms */ - if (!td->shown) continue; - - /* Enable graphics */ - td->t.higher_pict = TRUE; - - /* See if we need rescaled tiles XXX */ - if ((td->tiles == NULL) || - (td->tiles->width != td->tile_wid * tile_cols) || - (td->tiles->height != td->tile_hgt * tile_rows)) - { - /* Free old tiles if present */ - if (td->tiles) gdk_rgb_image_destroy(td->tiles); - - /* Forget pointer */ - td->tiles = NULL; - - /* Scale the tiles to current font bounding rect */ - scaled_tiles = resize_tiles( - raw_tiles, - tile_wid, tile_hgt, - td->tile_wid, td->tile_hgt); - - /* Oops */ - if (scaled_tiles == NULL) - { - /* Failure */ - result = FALSE; - - break; - } - - /* Store it */ - td->tiles = scaled_tiles; - } - - /* See if we have to (re)allocate a new buffer XXX */ - if ((td->trans_buf == NULL) || - (td->trans_buf->width != td->tile_wid) || - (td->trans_buf->height != td->tile_hgt)) - { - /* Free old buffer if present */ - if (td->trans_buf) gdk_rgb_image_destroy(td->trans_buf); - - /* Forget pointer */ - td->trans_buf = NULL; - - /* Allocate a new buffer */ - buffer = gdk_rgb_image_new(td->tile_wid, td->tile_hgt); - - /* Oops */ - if (buffer == NULL) - { - /* Failure */ - result = FALSE; - - break; - } - - /* Store it */ - td->trans_buf = buffer; - } - - /* - * Giga-Hack - assume top left corner of 0x86/0x80 should be - * in the background colour XXX XXX XXX XXX - */ - td->bg_pixel = gdk_rgb_image_get_pixel( - raw_tiles, - 0, - tile_hgt * 6); - - } - - - /* Alas, we need to free wasted images */ - if (result == FALSE) graf_nuke(); - - /* We don't need the raw image any longer */ - gdk_rgb_image_destroy(raw_tiles); - - /* Report success or failure */ - return (result); -} - - -/* - * React to various changes in graphics mode settings - * - * It is *not* a requirement for tiles to have same pixel width and height. - * The program can work with any conbinations of graf_wid and graf_hgt - * (oops, they must be representable by u16b), as long as they are lesser - * or equal to 32 if you use smooth rescaling. - */ -static void init_graphics(void) -{ - cptr tile_name; - - u16b graf_wid = 0, graf_hgt = 0; - - - /* No graphics requests are made - Can't this be simpler? XXX XXX */ - if ((graf_mode_request == graf_mode) && - (smooth_rescaling_request == smooth_rescaling) && - !resize_request) return; - - /* Prevent further unsolicited reaction */ - resize_request = FALSE; - - - /* Dispose unusable old tiles - awkward... XXX XXX */ - if ((graf_mode_request == GRAF_MODE_NONE) || - (graf_mode_request != graf_mode) || - (smooth_rescaling_request != smooth_rescaling)) graf_nuke(); - - - /* Setup parameters according to request */ - switch (graf_mode_request) - { - /* ASCII - no graphics whatsoever */ - default: - case GRAF_MODE_NONE: - { - tile_name = NULL; - use_graphics = arg_graphics = FALSE; - - break; - } - - /* - * 8x8 tiles originally collected for the Amiga port - * from several contributers by Lars Haugseth, converted - * to 256 colours and expanded by the Z devteam - * - * Use the "old" tile assignments - * - * Dawnmist is working on it for ToME - */ - case GRAF_MODE_OLD: - { - tile_name = "8x8"; - graf_wid = graf_hgt = 8; - ANGBAND_GRAF = "old"; - use_graphics = arg_graphics = TRUE; - - break; - } - - /* - * Adam Bolt's 16x16 tiles - * "new" tile assignments - * It is updated for ToME by Andreas Koch - */ - case GRAF_MODE_NEW: - { - tile_name = "16x16"; - graf_wid = graf_hgt = 16; - ANGBAND_GRAF = "new"; - use_graphics = arg_graphics = TRUE; - - break; - } - } - - - /* load tiles and set them up if tiles are requested */ - if ((graf_mode_request != GRAF_MODE_NONE) && - !graf_init(tile_name, graf_wid, graf_hgt)) - { - /* Oops */ - plog("Cannot initialize graphics"); - - /* reject requests */ - graf_mode_request = GRAF_MODE_NONE; - smooth_rescaling_request = smooth_rescaling; - - /* reset graphics flags */ - use_graphics = arg_graphics = FALSE; - } - - /* Update current graphics mode */ - graf_mode = graf_mode_request; - smooth_rescaling = smooth_rescaling_request; - - /* Reset visuals */ - reset_visuals(); -} - -#endif /* USE_GRAPHICS */ @@ -2118,21 +286,6 @@ static void Term_nuke_gtk(term *t) /* Forget it too */ td->backing_store = NULL; -#ifdef USE_GRAPHICS - - /* Free tiles */ - if (td->tiles) gdk_rgb_image_destroy(td->tiles); - - /* Forget pointer */ - td->tiles = NULL; - - /* Free transparency buffer */ - if (td->trans_buf) gdk_rgb_image_destroy(td->trans_buf); - - /* Amnesia */ - td->trans_buf = NULL; - -#endif /* USE_GRAPHICS */ } @@ -2256,20 +409,6 @@ static errr Term_curs_gtk(int x, int y) /* Set foreground colour */ term_data_set_fg(td, TERM_YELLOW); -#ifdef USE_DOUBLE_TILES - - /* Mogami's bigtile patch */ - - /* Adjust it if wide tiles are requested */ - if (use_bigtile && - (x + 1 < Term->wid) && - (Term->old->a[y][x + 1] == 255)) - { - cells = 2; - } - -#endif /* USE_DOUBLE_TILES */ - /* Draw the software cursor */ gdk_draw_rectangle( TERM_DATA_DRAWABLE(td), @@ -2288,299 +427,6 @@ static errr Term_curs_gtk(int x, int y) } -#ifdef USE_GRAPHICS - -/* - * XXX XXX Low level graphics helper - * Draw a tile at (s_x, s_y) over one at (t_x, t_y) and store the - * result in td->trans_buf - * - * XXX XXX Even if CPU's are faster than necessary these days, - * this should be made inline. Or better, there should be an API - * to take advantage of graphics hardware. They almost always have - * assortment of builtin bitblt's... - */ -static void overlay_tiles_2( - term_data *td, - int s_x, int s_y, - int t_x, int t_y) -{ - guint32 pix; - int x, y; - - - /* Process each row */ - for (y = 0; y < td->tile_hgt; y++) - { - /* Process each column */ - for (x = 0; x < td->tile_wid; x++) - { - /* Get an overlay pixel */ - pix = gdk_rgb_image_get_pixel(td->tiles, s_x + x, s_y + y); - - /* If it's in background color, use terrain instead */ - if (pix == td->bg_pixel) - pix = gdk_rgb_image_get_pixel(td->tiles, t_x + x, t_y + y); - - /* Store the result in trans_buf */ - gdk_rgb_image_put_pixel(td->trans_buf, x, y, pix); - } - } -} - - -/* - * XXX XXX Low level graphics helper - * Draw a tile at (e_x, e_y) over one at (s_x, s_y) over another one - * at (t_x, t_y) and store the result in td->trans_buf - * - * XXX XXX The same comment applies as that for the above... - */ -static void overlay_tiles_3( - term_data *td, - int e_x, int e_y, - int s_x, int s_y, - int t_x, int t_y) -{ - guint32 pix; - int x, y; - - - /* Process each row */ - for (y = 0; y < td->tile_hgt; y++) - { - /* Process each column */ - for (x = 0; x < td->tile_wid; x++) - { - /* Get an overlay pixel */ - pix = gdk_rgb_image_get_pixel(td->tiles, e_x + x, e_y + y); - - /* - * If it's background colour, try to use one from - * the second layer - */ - if (pix == td->bg_pixel) - pix = gdk_rgb_image_get_pixel(td->tiles, s_x + x, s_y + y); - - /* - * If it's background colour again, fall back to - * the terrain layer - */ - if (pix == td->bg_pixel) - pix = gdk_rgb_image_get_pixel(td->tiles, t_x + x, t_y + y); - - /* Store the pixel in trans_buf */ - gdk_rgb_image_put_pixel(td->trans_buf, x, y, pix); - } - } -} - - - -/* - * Low level graphics (Assumes valid input) - * - * Draw "n" tiles/characters starting at (x,y) - */ -static errr Term_pict_gtk( - int x, int y, int n, - const byte *ap, const char *cp, - const byte *tap, const char *tcp, - const byte *eap, const char *ecp) -{ - term_data *td = (term_data*)(Term->data); - - int i; - - int d_x, d_y; - -# ifdef USE_DOUBLE_TILES - - /* Hack - remember real number of columns affected XXX XXX XXX */ - int cols; - -# endif /* USE_DOUBLE_TILES */ - - - /* Don't draw to hidden windows */ - if (!td->shown) return (0); - - /* Paranoia */ - g_assert(td->drawing_area->window != 0); - - /* Top left corner of the destination rect */ - d_x = x * td->font_wid; - d_y = y * td->font_hgt; - - -# ifdef USE_DOUBLE_TILES - - /* Reset column counter */ - cols = 0; - -# endif /* USE_DOUBLE_TILES */ - - /* Scan the input */ - for (i = 0; i < n; i++) - { - byte a; - char c; - int s_x, s_y; - - byte ta; - char tc; - int t_x, t_y; - - byte ea; - char ec; - int e_x = 0, e_y = 0; - bool_ has_overlay; - - - /* Grid attr/char */ - a = *ap++; - c = *cp++; - - /* Terrain attr/char */ - ta = *tap++; - tc = *tcp++; - - /* Overlay attr/char */ - ea = *eap++; - ec = *ecp++; - has_overlay = (ea && ec); - - /* Row and Col */ - s_y = (((byte)a & 0x7F) % tile_rows) * td->tile_hgt; - s_x = (((byte)c & 0x7F) % tile_cols) * td->tile_wid; - - /* Terrain Row and Col */ - t_y = (((byte)ta & 0x7F) % tile_rows) * td->tile_hgt; - t_x = (((byte)tc & 0x7F) % tile_cols) * td->tile_wid; - - /* Overlay Row and Col */ - if (has_overlay) - { - e_y = (((byte)ea & 0x7F) % tile_rows) * td->tile_hgt; - e_x = (((byte)ec & 0x7F) % tile_cols) * td->tile_wid; - } - - -# ifdef USE_DOUBLE_TILES - - /* Mogami's bigtile patch */ - - /* Hack -- a filler for wide tile */ - if (use_bigtile && (a == 255)) - { - /* Advance */ - d_x += td->font_wid; - - /* Ignore */ - continue; - } - -# endif /* USE_DOUBLE_TILES */ - - /* Optimise the common case: terrain == obj/mons */ - if (!use_transparency || - ((s_x == t_x) && (s_y == t_y))) - { - - /* The simplest possible case - no overlay */ - if (!has_overlay) - { - /* Draw the tile */ - gdk_draw_rgb_image_2( - TERM_DATA_DRAWABLE(td), td->gc, td->tiles, - s_x, s_y, - d_x, d_y, - td->tile_wid, td->tile_hgt); - } - - /* We have to draw overlay... */ - else - { - /* Overlay */ - overlay_tiles_2(td, e_x, e_y, s_x, s_y); - - /* And draw the result */ - gdk_draw_rgb_image_2( - TERM_DATA_DRAWABLE(td), td->gc, td->trans_buf, - 0, 0, - d_x, d_y, - td->tile_wid, td->tile_hgt); - - /* Hack -- Prevent potential display problem */ - gdk_flush(); - } - - } - - /* - * Since there's no masking bitblt in X, - * we have to do that manually... - */ - else - { - - /* No overlay */ - if (!has_overlay) - { - /* Build terrain + masked overlay image */ - overlay_tiles_2(td, s_x, s_y, t_x, t_y); - } - - /* With overlay */ - else - { - /* Ego over mon/PC over terrain */ - overlay_tiles_3(td, e_x, e_y, s_x, s_y, - t_x, t_y); - } - - /* Draw it */ - gdk_draw_rgb_image_2( - TERM_DATA_DRAWABLE(td), td->gc, td->trans_buf, - 0, 0, - d_x, d_y, - td->tile_wid, td->tile_hgt); - - /* Hack -- Prevent potential display problem */ - gdk_flush(); - } - - /* - * Advance x-coordinate - wide font fillers are taken care of - * before entering the tile drawing code. - */ - d_x += td->font_wid; - -# ifdef USE_DOUBLE_TILES - - /* Add up *real* number of columns updated XXX XXX XXX */ - cols += use_bigtile ? 2 : 1; - -# endif /* USE_DOUBLE_TILES */ - } - -# ifndef USE_DOUBLE_TILES - - /* Copy image from backing store if present */ - TERM_DATA_REFRESH(td, x, y, n, 1); - -# else - - /* Copy image from backing store if present */ - TERM_DATA_REFRESH(td, x, y, cols, 1); - -# endif /* USE_DOUBLE_TILES */ - - /* Success */ - return (0); -} - -#endif /* USE_GRAPHICS */ /* @@ -2701,12 +547,6 @@ static errr Term_xtra_gtk(int n, int v) /* (re-)init colours */ init_colours(); -#ifdef USE_GRAPHICS - - /* Initialise graphics */ - init_graphics(); - -#endif /* USE_GRAPHICS */ /* Success */ return (0); @@ -2996,20 +836,6 @@ static void load_font(term_data *td, cptr fontname) td->font_wid = gdk_char_width(td->font, '@'); td->font_hgt = td->font->ascent + td->font->descent; -#ifndef USE_DOUBLE_TILES - - /* Use the current font size for tiles as well */ - td->tile_wid = td->font_wid; - td->tile_hgt = td->font_hgt; - -#else /* !USE_DOUBLE_TILES */ - - /* Calculate the size of tiles */ - if (use_bigtile && (td == &data[0])) td->tile_wid = td->font_wid * 2; - else td->tile_wid = td->font_wid; - td->tile_hgt = td->font_hgt; - -#endif /* !USE_DOUBLE_TILES */ } @@ -3076,128 +902,6 @@ static void change_backing_store_event_handler( } -#ifdef USE_GRAPHICS - -/* - * Set graf_mode_request according to user selection, - * and let Term_xtra react to the change. - */ -static void change_graf_mode_event_handler( - gpointer user_data, - guint user_action, - GtkWidget *was_clicked) -{ - /* Set request according to user selection */ - graf_mode_request = (int)user_action; - - /* - * Hack - force redraw - * This induces a call to Term_xtra(TERM_XTRA_REACT, 0) as well - */ - Term_key_push(KTRL('R')); -} - - -/* - * Set dither_mode according to user selection - */ -static void change_dith_mode_event_handler( - gpointer user_data, - guint user_action, - GtkWidget *was_clicked) -{ - /* Set request according to user selection */ - dith_mode = (int)user_action; - - /* - * Hack - force redraw - */ - Term_key_push(KTRL('R')); -} - - -/* - * Toggles the graphics tile scaling mode (Fast/Smooth) - */ -static void change_smooth_mode_event_handler( - gpointer user_data, - guint user_action, - GtkWidget *was_clicked) -{ - /* (Try to) toggle the smooth rescaling mode */ - smooth_rescaling_request = !smooth_rescaling; - - /* - * Hack - force redraw - * This induces a call to Term_xtra(TERM_XTRA_REACT, 0) as well - */ - Term_key_push(KTRL('R')); -} - - -# ifdef USE_DOUBLE_TILES - -static void change_wide_tile_mode_event_handler( - gpointer user_data, - guint user_action, - GtkWidget *was_clicked) -{ - term *old = Term; - term_data *td = &data[0]; - - /* Toggle "use_bigtile" */ - use_bigtile = !use_bigtile; - - /* T.o.M.E. requires this as well */ - arg_bigtile = use_bigtile; - - /* Double the width of tiles (only for the main window) */ - if (use_bigtile) - { - td->tile_wid = td->font_wid * 2; - } - - /* Use the width of current font */ - else - { - td->tile_wid = td->font_wid; - } - - /* Need to resize the tiles */ - resize_request = TRUE; - - /* Activate the main window */ - Term_activate(&td->t); - - /* Resize the term */ - Term_resize(td->cols, td->rows); - - /* Activate the old term */ - Term_activate(old); - - /* Hack - force redraw XXX ??? XXX */ - Term_key_push(KTRL('R')); -} - -# endif /* USE_DOUBLE_TILES */ - - -/* - * Toggles the boolean value of use_transparency - */ -static void change_trans_mode_event_handler( - gpointer user_data, - guint user_aciton, - GtkWidget *was_clicked) -{ - /* Toggle the transparency mode */ - use_transparency = !use_transparency; - - /* Hack - force redraw */ - Term_key_push(KTRL('R')); -} - -#endif /* USE_GRAPHICS */ /* @@ -3599,9 +1303,6 @@ static errr term_data_init(term_data *td, int i) t->text_hook = Term_text_gtk; t->wipe_hook = Term_wipe_gtk; t->curs_hook = Term_curs_gtk; -#ifdef USE_GRAPHICS - t->pict_hook = Term_pict_gtk; -#endif /* USE_GRAPHICS */ t->nuke_hook = Term_nuke_gtk; /* Save the data */ @@ -3685,37 +1386,6 @@ static GtkItemFactoryEntry main_menu_items[] = { NULL, NULL, change_font_event_handler, 7, NULL, NULL }, -#ifdef USE_GRAPHICS - - /* "Graphics" submenu */ - { "/Options/Graphics", NULL, - NULL, 0, "<Branch>", NULL }, - { "/Options/Graphics/None", NULL, - change_graf_mode_event_handler, GRAF_MODE_NONE, "<CheckItem>", NULL }, - { "/Options/Graphics/Old", NULL, - change_graf_mode_event_handler, GRAF_MODE_OLD, "<CheckItem>", NULL }, - { "/Options/Graphics/New", NULL, - change_graf_mode_event_handler, GRAF_MODE_NEW, "<CheckItem>", NULL }, -# ifdef USE_DOUBLE_TILES - { "/Options/Graphics/sep3", NULL, - NULL, 0, "<Separator>", NULL }, - { "/Options/Graphics/Wide tiles", NULL, - change_wide_tile_mode_event_handler, 0, "<CheckItem>", NULL }, -# endif /* USE_DOUBLE_TILES */ - { "/Options/Graphics/sep1", NULL, - NULL, 0, "<Separator>", NULL }, - { "/Options/Graphics/Dither if <= 8bpp", NULL, - change_dith_mode_event_handler, GDK_RGB_DITHER_NORMAL, "<CheckItem>", NULL }, - { "/Options/Graphics/Dither if <= 16bpp", NULL, - change_dith_mode_event_handler, GDK_RGB_DITHER_MAX, "<CheckItem>", NULL }, - { "/Options/Graphics/sep2", NULL, - NULL, 0, "<Separator>", NULL }, - { "/Options/Graphics/Smoothing", NULL, - change_smooth_mode_event_handler, 0, "<CheckItem>", NULL }, - { "/Options/Graphics/Transparency", NULL, - change_trans_mode_event_handler, 0, "<CheckItem>", NULL }, - -#endif /* USE_GRAPHICS */ /* "Misc" submenu */ { "/Options/Misc", NULL, @@ -3991,51 +1661,6 @@ static void misc_menu_update_handler( } -#ifdef USE_GRAPHICS - -/* - * Update the "Graphics" submenu - */ -static void graf_menu_update_handler( - GtkWidget *widget, - gpointer user_data) -{ - /* Update menu items */ - check_menu_item( - "<Angband>/Options/Graphics/None", - (graf_mode == GRAF_MODE_NONE)); - check_menu_item( - "<Angband>/Options/Graphics/Old", - (graf_mode == GRAF_MODE_OLD)); - check_menu_item( - "<Angband>/Options/Graphics/New", - (graf_mode == GRAF_MODE_NEW)); - -#ifdef USE_DOUBLE_TILES - - check_menu_item( - "<Angband>/Options/Graphics/Wide tiles", - use_bigtile); - -#endif /* USE_DOUBLE_TILES */ - - check_menu_item( - "<Angband>/Options/Graphics/Dither if <= 8bpp", - (dith_mode == GDK_RGB_DITHER_NORMAL)); - check_menu_item( - "<Angband>/Options/Graphics/Dither if <= 16bpp", - (dith_mode == GDK_RGB_DITHER_MAX)); - - check_menu_item( - "<Angband>/Options/Graphics/Smoothing", - smooth_rescaling); - - check_menu_item( - "<Angband>/Options/Graphics/Transparency", - use_transparency); -} - -#endif /* USE_GRAPHICS */ /* @@ -4144,23 +1769,6 @@ static void add_menu_update_callbacks() GTK_SIGNAL_FUNC(misc_menu_update_handler), NULL); -#ifdef USE_GRAPHICS - - /* Access Graphics menu */ - widget = get_widget_from_path("<Angband>/Options/Graphics"); - - /* Paranoia */ - g_assert(widget != NULL); - g_assert(GTK_IS_MENU(widget)); - - /* Assign callback */ - gtk_signal_connect( - GTK_OBJECT(widget), - "show", - GTK_SIGNAL_FUNC(graf_menu_update_handler), - NULL); - -#endif /* USE_GRAPHICS */ } @@ -4308,12 +1916,6 @@ static void hook_quit(cptr str) /* Free menu paths dynamically allocated */ free_menu_paths(); -# ifdef USE_GRAPHICS - - /* Free pathname string */ - if (ANGBAND_DIR_XTRA_GRAF) free(ANGBAND_DIR_XTRA_GRAF); - -# endif /* USE_GRAPHICS */ /* Terminate the program */ gtk_exit(0); @@ -4354,68 +1956,11 @@ errr init_gtk2(int argc, char **argv) continue; } -#ifdef USE_GRAPHICS - - /* Requests "old" graphics */ - if (streq(argv[i], "-o")) - { - graf_mode_request = GRAF_MODE_OLD; - continue; - } - - /* Requests "new" graphics */ - if (streq(argv[i], "-g")) - { - graf_mode_request = GRAF_MODE_NEW; - continue; - } - -# ifdef USE_DOUBLE_TILES - - /* Requests wide tile mode */ - if (streq(argv[i], "-w")) - { - use_bigtile = TRUE; - arg_bigtile = TRUE; - continue; - } - -# endif /* USE_DOUBLE_TILES */ - - - /* Enable transparency effect */ - if (streq(argv[i], "-t")) - { - use_transparency = TRUE; - continue; - } - - /* Disable smooth rescaling of tiles */ - if (streq(argv[i], "-s")) - { - smooth_rescaling_request = FALSE; - continue; - } - -#endif /* USE_GRAPHICS */ /* None of the above */ plog_fmt("Ignoring option: %s", argv[i]); } -#ifdef USE_GRAPHICS - - { - char path[1024]; - - /* Build the "graf" path */ - path_build(path, 1024, ANGBAND_DIR_XTRA, "graf"); - - /* Allocate the path */ - ANGBAND_DIR_XTRA_GRAF = strdup(path); - } - -#endif /* USE_GRAPHICS */ /* Initialise colours */ gdk_rgb_init(); diff --git a/src/main-sdl.c b/src/main-sdl.c index 6ffe77df..4e4dfd64 100644 --- a/src/main-sdl.c +++ b/src/main-sdl.c @@ -58,21 +58,6 @@ static char arg_font_name[64] = DEF_FONT_FILE; /**************/ -/* Graphics setting - signifies what graphics to use. Valid ints -are available with given defines */ - -/* No graphics - use only colored text */ -#define NO_GRAPHICS 0 -/* "Old" graphics - use 8x8.bmp to extract graphics tiles */ -#define GRAPHICS_8x8 8 -/* "New" graphics - use 16x16.bmp as tiles and apply mask.bmp for transparency*/ -#define GRAPHICS_16x16 16 - -static int arg_graphics_type = NO_GRAPHICS; - - -/**************/ - /* The number of term_data structures to set aside mem for */ #define MAX_CONSOLE_COUNT 8 @@ -89,10 +74,6 @@ border */ /**************/ -/* some miscellaneous settings which have not been dealt -with yet */ -static bool_ arg_double_width = FALSE; - /* flag signifying whether the game is in full screen */ static bool_ arg_full_screen = FALSE; @@ -1830,8 +1811,6 @@ static errr term_data_init(term_data *td, int i) t->soft_cursor = TRUE; /* Picture routine flags */ - t->always_pict = FALSE; - t->higher_pict = FALSE; t->always_text = FALSE; /* Erase with "white space" */ @@ -2034,25 +2013,6 @@ errr init_sdl(int argc, char **argv) return -1; } } - /* see if new graphics are requested...*/ - else if (0 == strcmp(argv[i], "-g")) - { - printf("New graphics (16x16) enabled!\n"); - arg_graphics_type = GRAPHICS_16x16; - } - /* see if old graphics are requested...*/ - else if (0 == strcmp(argv[i], "-o")) - { - printf("Old graphics (8x8) enabled!\n"); - arg_graphics_type = GRAPHICS_8x8; - } - - /* see if double width tiles are requested */ - else if (0 == strcmp(argv[i], "-b")) - { - /* do nothing for now */ - /* arg_double_width = TRUE; */ - } /* switch into full-screen at startup */ else if (0 == strcmp(argv[i], "-fs")) { @@ -2156,13 +2116,6 @@ errr init_sdl(int argc, char **argv) DB("SDL Window Created!"); - /* Graphics! ---- - If graphics are selected, then load graphical tiles! */ - if (arg_graphics_type != NO_GRAPHICS) - { - /* load graphics tiles */ - } - /* Initialize the working surface and crayon surface used for rendering text in different colors. */ diff --git a/src/main-win.c b/src/main-win.c index fe70edd9..9225f18d 100644 --- a/src/main-win.c +++ b/src/main-win.c @@ -36,11 +36,8 @@ * * Compiling this file, and using the resulting executable, requires * several extra files not distributed with the standard Angband code. - * If "USE_GRAPHICS" is defined, then "readdib.h" and "readdib.c" must - * be placed into "src/", and the "8X8.BMP" bitmap file must be placed - * into "lib/xtra/graf". In any case, some "*.fon" files (including - * "8X13.FON" if nothing else) must be placed into "lib/xtra/font/". - * All of these extra files can be found in the "ext-win" archive. + * In any case, some "*.fon" files (including "8X13.FON" if nothing + * else) must be placed into "lib/xtra/font/". * * * The "Term_xtra_win_clear()" function should probably do a low-level @@ -163,10 +160,6 @@ #define IDM_WINDOW_D_HGT_6 276 #define IDM_WINDOW_D_HGT_7 277 -#define IDM_OPTIONS_OLD_GRAPHICS 400 -#define IDM_OPTIONS_NEW_GRAPHICS 401 -#define IDM_OPTIONS_ASCII_GRAPHICS 403 -#define IDM_OPTIONS_BIGTILE 409 #define IDM_OPTIONS_UNUSED 410 #define IDM_OPTIONS_SAVER 411 @@ -245,9 +238,6 @@ /* * Include the support for loading bitmaps */ -#ifdef USE_GRAPHICS -# include "readdib.h" -#endif /* * Hack -- Fake declarations from "dos.h" XXX XXX XXX @@ -438,24 +428,6 @@ static HWND hwndSaver; #endif /* USE_SAVER */ -#ifdef USE_GRAPHICS - -/* - * Flag set once "graphics" has been initialized - */ -static bool_ can_use_graphics = FALSE; - -/* - * The global bitmap - */ -static DIBINIT infGraph; - -/* - * The global bitmap mask - */ -static DIBINIT infMask; - -#endif /* USE_GRAPHICS */ @@ -874,14 +846,6 @@ static void save_prefs(void) char buf[128]; - /* Save the "arg_graphics" flag */ - sprintf(buf, "%d", arg_graphics); - WritePrivateProfileString("Angband", "Graphics", buf, ini_file); - - /* Save the "arg_bigtile" flag */ - strcpy(buf, arg_bigtile ? "1" : "0"); - WritePrivateProfileString("Angband", "Bigtile", buf, ini_file); - /* Save window prefs */ for (i = 0; i < MAX_TERM_DATA; ++i) { @@ -938,13 +902,6 @@ static void load_prefs(void) char buf[1024]; - /* Extract the "arg_graphics" flag */ - arg_graphics = GetPrivateProfileInt("Angband", "Graphics", 0, ini_file); - - /* Extract the "arg_bigtile" flag */ - arg_bigtile = GetPrivateProfileInt("Angband", "Bigtile", FALSE, ini_file); - use_bigtile = arg_bigtile; - /* Load window prefs */ for (i = 0; i < MAX_TERM_DATA; ++i) { @@ -995,33 +952,6 @@ static int new_palette(void) lppe = NULL; nEntries = 0; -#ifdef USE_GRAPHICS - - /* Check the bitmap palette */ - hBmPal = infGraph.hPalette; - - /* Use the bitmap */ - if (hBmPal) - { - lppeSize = 256 * sizeof(PALETTEENTRY); - lppe = (LPPALETTEENTRY) safe_calloc(1, lppeSize); - - nEntries = GetPaletteEntries(hBmPal, 0, 255, lppe); - if ((nEntries == 0) || (nEntries > 220)) - { - /* Warn the user */ - plog_fmt("Unusable bitmap palette (%d entries)", nEntries); - - /* Cleanup */ - free(lppe); - lppe = NULL; - - /* Fail */ - return (FALSE); - } - } - -#endif /* Size of palette */ pLogPalSize = sizeof(LOGPALETTE) + (nEntries + 16) * sizeof(PALETTEENTRY); @@ -1104,85 +1034,6 @@ static int new_palette(void) } -/* - * Initialize graphics - */ -static bool_ init_graphics() -{ - /* Initialize once */ - /*if (can_use_graphics != arg_graphics) */ - { - char buf[1024]; - int wid, hgt; - cptr name; - - /* Unused */ - PALETTEENTRY entry = - { - 0, 0, 0, 0 - }; - (void)entry; - - if (arg_graphics == 2) - { - wid = 16; - hgt = 16; - - name = "16X16.BMP"; - - ANGBAND_GRAF = "new"; - } - else - { - wid = 8; - hgt = 8; - - name = "8X8.BMP"; - ANGBAND_GRAF = "old"; - } - - /* Access the bitmap file */ - path_build(buf, 1024, ANGBAND_DIR_XTRA_GRAF, name); - - /* Load the bitmap or quit */ - if (!ReadDIB(data[0].w, buf, &infGraph)) - { - plog_fmt("Cannot read bitmap file '%s'", name); - return (FALSE); - } - - /* Save the new sizes */ - infGraph.CellWidth = wid; - infGraph.CellHeight = hgt; - - - path_build(buf, 1024, ANGBAND_DIR_XTRA_GRAF, "mask.bmp"); - /* Load the bitmap or quit */ - if (!ReadDIB(data[0].w, buf, &infMask)) - { - plog_fmt("Cannot read bitmap file '%s'", name); - return (FALSE); - } - - /* Activate a palette */ - if (!new_palette()) - { - /* Free bitmap XXX XXX XXX */ - - /* Oops */ - plog("Cannot activate palette!"); - return (FALSE); - } - - /* Graphics available */ - can_use_graphics = arg_graphics; - } - - /* Result */ - return (can_use_graphics); -} - - /* * Resize a window @@ -1445,29 +1296,6 @@ static errr Term_xtra_win_react(void) -#ifdef USE_GRAPHICS - - /* Handle "arg_graphics" */ - if (use_graphics != arg_graphics) - { - /* Initialize (if needed) */ - if (arg_graphics && !init_graphics()) - { - /* Warning */ - plog("Cannot initialize graphics!"); - - /* Cannot enable */ - arg_graphics = FALSE; - } - - /* Change setting */ - use_graphics = arg_graphics; - - /* Reset visuals */ - reset_visuals(); - } - -#endif /* USE_GRAPHICS */ /* Clean up windows */ @@ -1726,9 +1554,6 @@ static errr Term_curs_win(int x, int y) rc.top = y * td->tile_hgt + td->size_oh1; rc.bottom = rc.top + td->tile_hgt; - if (use_bigtile && x + 1 < Term->wid && Term->old->a[y][x + 1] == 255) - rc.right += td->tile_wid; - /* Cursor is done as a yellow "box" */ hdc = GetDC(data[0].w); FrameRect(hdc, &rc, hbrYellow); @@ -1859,197 +1684,6 @@ static errr Term_text_win(int x, int y, int n, byte a, const char *s) } -/* - * Low level graphics. Assumes valid input. - * - * Draw an array of "special" attr/char pairs at the given location. - * - * We use the "Term_pict_win()" function for "graphic" data, which are - * encoded by setting the "high-bits" of both the "attr" and the "char" - * data. We use the "attr" to represent the "row" of the main bitmap, - * and the "char" to represent the "col" of the main bitmap. The use - * of this function is induced by the "higher_pict" flag. - * - * If "graphics" is not available, we simply "wipe" the given grids. - */ -static errr Term_pict_win(int x, int y, int n, const byte *ap, const char *cp, const byte *tap, const char *tcp, const byte *eap, const char *ecp) -{ - term_data *td = (term_data*)(Term->data); - -#ifdef USE_GRAPHICS - - int i; - int x1, y1, w1, h1; - int x2, y2, w2, h2, tw2; - - int x3, y3; - - HDC hdcMask = NULL; - - int x4, y4; - - HDC hdc; - HDC hdcSrc; - HBITMAP hbmSrcOld; - - /* Paranoia */ - if (!use_graphics) - { - /* Erase the grids */ - return (Term_wipe_win(x, y, n)); - } - - /* Size of bitmap cell */ - w1 = infGraph.CellWidth; - h1 = infGraph.CellHeight; - - /* Size of window cell */ - w2 = td->tile_wid; - h2 = td->tile_hgt; - tw2 = w2; - - /* big tile mode */ - if (use_bigtile) tw2 *= 2; - - /* Location of window cell */ - x2 = x * w2 + td->size_ow1; - y2 = y * h2 + td->size_oh1; - - /* Info */ - hdc = GetDC(td->w); - - /* More info */ - hdcSrc = CreateCompatibleDC(hdc); - hbmSrcOld = SelectObject(hdcSrc, infGraph.hBitmap); - - if (arg_graphics == 2) - { - hdcMask = CreateCompatibleDC(hdc); - SelectObject(hdcMask, infMask.hBitmap); - } - - /* Draw attr/char pairs */ - for (i = 0; i < n; i++, x2 += w2) - { - byte a = ap[i]; - char c = cp[i]; - - /* Extract picture */ - int row = (a & 0x7F); - int col = (c & 0x7F); - - /* Location of bitmap cell */ - x1 = col * w1; - y1 = row * h1; - - if (arg_graphics == 2) - { - x3 = (tcp[i] & 0x7F) * w1; - y3 = (tap[i] & 0x7F) * h1; - - /* Perfect size */ - if ((w1 == tw2) && (h1 == h2)) - { - /* Copy the terrain picture from the bitmap to the window */ - BitBlt(hdc, x2, y2, tw2, h2, hdcSrc, x3, y3, SRCCOPY); - - /* Mask out the tile */ - BitBlt(hdc, x2, y2, tw2, h2, hdcMask, x1, y1, SRCAND); - - /* Draw the tile */ - BitBlt(hdc, x2, y2, tw2, h2, hdcSrc, x1, y1, SRCPAINT); - - if (ecp[i] != 0 && eap[i] != 0) - { - x4 = (ecp[i] & 0x7F) * w1; - y4 = (eap[i] & 0x7F) * h1; - - /* Mask out the tile */ - BitBlt(hdc, x2, y2, tw2, h2, hdcMask, x4, y4, SRCAND); - - /* Draw the tile */ - BitBlt(hdc, x2, y2, tw2, h2, hdcSrc, x4, y4, SRCPAINT); - } - } - - /* Need to stretch */ - else - { - /* Set the correct mode for stretching the tiles */ - SetStretchBltMode(hdc, COLORONCOLOR); - - /* Copy the terrain picture from the bitmap to the window */ - StretchBlt(hdc, x2, y2, tw2, h2, hdcSrc, x3, y3, w1, h1, SRCCOPY); - - /* Only draw if terrain and overlay are different */ - if ((x1 != x3) || (y1 != y3)) - { - /* Mask out the tile */ - StretchBlt(hdc, x2, y2, tw2, h2, hdcMask, x1, y1, w1, h1, SRCAND); - - /* Draw the tile */ - StretchBlt(hdc, x2, y2, tw2, h2, hdcSrc, x1, y1, w1, h1, SRCPAINT); - } - - if (ecp[i] != 0 && eap[i] != 0) - { - x4 = (ecp[i] & 0x7F) * w1; - y4 = (eap[i] & 0x7F) * h1; - - /* Mask out the tile */ - StretchBlt(hdc, x2, y2, tw2, h2, hdcMask, x4, y4, w1, h1, SRCAND); - - /* Draw the tile */ - StretchBlt(hdc, x2, y2, tw2, h2, hdcSrc, x4, y4, w1, h1, SRCPAINT); - } - } - } - else - { - /* Perfect size */ - if ((w1 == tw2) && (h1 == h2)) - { - /* Copy the picture from the bitmap to the window */ - BitBlt(hdc, x2, y2, tw2, h2, hdcSrc, x1, y1, SRCCOPY); - } - - /* Need to stretch */ - else - { - /* Set the correct mode for stretching the tiles */ - SetStretchBltMode(hdc, COLORONCOLOR); - - /* Copy the picture from the bitmap to the window */ - StretchBlt(hdc, x2, y2, tw2, h2, hdcSrc, x1, y1, w1, h1, SRCCOPY); - } - } - } - - /* Release */ - SelectObject(hdcSrc, hbmSrcOld); - DeleteDC(hdcSrc); - - if (arg_graphics == 2) - { - /* Release */ - SelectObject(hdcMask, hbmSrcOld); - DeleteDC(hdcMask); - } - - /* Release */ - ReleaseDC(td->w, hdc); - -#else /* USE_GRAPHICS */ - - /* Just erase this grid */ - return (Term_wipe_win(x, y, n)); - -#endif /* USE_GRAPHICS */ - - /* Success */ - return 0; -} - /*** Other routines ***/ @@ -2067,9 +1701,6 @@ static void term_data_link(term_data *td) /* Use a "software" cursor */ t->soft_cursor = TRUE; - /* Use "Term_pict" for "graphic" data */ - t->higher_pict = TRUE; - /* Erase with "white space" */ t->attr_blank = TERM_WHITE; t->char_blank = ' '; @@ -2079,7 +1710,6 @@ static void term_data_link(term_data *td) t->curs_hook = Term_curs_win; t->wipe_hook = Term_wipe_win; t->text_hook = Term_text_win; - t->pict_hook = Term_pict_win; /* Remember where we came from */ t->data = (vptr)(td); @@ -2418,43 +2048,17 @@ static void setup_menus(void) } /* Menu "Options", disable all */ - EnableMenuItem(hm, IDM_OPTIONS_OLD_GRAPHICS, - MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); - EnableMenuItem(hm, IDM_OPTIONS_NEW_GRAPHICS, - MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); - EnableMenuItem(hm, IDM_OPTIONS_ASCII_GRAPHICS, - MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); - EnableMenuItem(hm, IDM_OPTIONS_BIGTILE, - MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); EnableMenuItem(hm, IDM_OPTIONS_UNUSED, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); EnableMenuItem(hm, IDM_OPTIONS_SAVER, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); /* Menu "Options", update all */ - CheckMenuItem(hm, IDM_OPTIONS_OLD_GRAPHICS, - (arg_graphics == 1 ? MF_CHECKED : MF_UNCHECKED)); - CheckMenuItem(hm, IDM_OPTIONS_NEW_GRAPHICS, - (arg_graphics == 2 ? MF_CHECKED : MF_UNCHECKED)); - CheckMenuItem(hm, IDM_OPTIONS_ASCII_GRAPHICS, - (arg_graphics == 0 ? MF_CHECKED : MF_UNCHECKED)); - CheckMenuItem(hm, IDM_OPTIONS_BIGTILE, - (arg_bigtile ? MF_CHECKED : MF_UNCHECKED)); CheckMenuItem(hm, IDM_OPTIONS_UNUSED, (0 ? MF_CHECKED : MF_UNCHECKED)); CheckMenuItem(hm, IDM_OPTIONS_SAVER, (hwndSaver ? MF_CHECKED : MF_UNCHECKED)); -#ifdef USE_GRAPHICS - /* Menu "Options", Item "Graphics" */ - EnableMenuItem(hm, IDM_OPTIONS_OLD_GRAPHICS, MF_ENABLED); - /* Menu "Options", Item "Graphics" */ - EnableMenuItem(hm, IDM_OPTIONS_NEW_GRAPHICS, MF_ENABLED); - /* Menu "Options", Item "Graphics" */ - EnableMenuItem(hm, IDM_OPTIONS_ASCII_GRAPHICS, MF_ENABLED); - /* Menu "Options", Item "Graphics" */ - EnableMenuItem(hm, IDM_OPTIONS_BIGTILE, MF_ENABLED); -#endif #ifdef USE_SAVER @@ -2817,93 +2421,6 @@ ofn.lStructSize = sizeof(OPENFILENAME); break; } - case IDM_OPTIONS_OLD_GRAPHICS: - { - /* Paranoia */ - if (!inkey_flag) - { - plog("You may not do that right now."); - break; - } - - /* Set "arg_graphics" */ - arg_graphics = 1; - - /* React to changes */ - Term_xtra_win_react(); - - /* Hack -- Force redraw */ - Term_key_push(KTRL('R')); - - break; - } - - case IDM_OPTIONS_NEW_GRAPHICS: - { - /* Paranoia */ - if (!inkey_flag) - { - plog("You may not do that right now."); - break; - } - - /* Set "arg_graphics" */ - arg_graphics = 2; - - /* React to changes */ - Term_xtra_win_react(); - - /* Hack -- Force redraw */ - Term_key_push(KTRL('R')); - - break; - } - case IDM_OPTIONS_ASCII_GRAPHICS: - { - /* Paranoia */ - if (!inkey_flag) - { - plog("You may not do that right now."); - break; - } - - /* Set "ASCII Graphics" */ - arg_graphics = 0; - /* React to Changes */ - Term_xtra_win_react(); - - /* Hack -- Force redraw */ - Term_key_push(KTRL('R')); - - break; - } - - case IDM_OPTIONS_BIGTILE: - { - term_data *td = &data[0]; - - /* Paranoia */ - if (!inkey_flag) - { - plog("You may not do that right now."); - break; - } - - /* Toggle "arg_sound" */ - arg_bigtile = !arg_bigtile; - - /* Activate */ - Term_activate(&td->t); - - /* Resize the term */ - Term_resize(td->cols, td->rows); - - /* Redraw later */ - InvalidateRect(td->w, NULL, TRUE); - - break; - } - case IDM_OPTIONS_UNUSED: { /* Unused for now XXX XXX XXX */ @@ -3753,24 +3270,6 @@ static void init_stuff(void) validate_file(path); -#ifdef USE_GRAPHICS - - /* Build the "graf" path */ - path_build(path, 1024, ANGBAND_DIR_XTRA, "graf"); - - /* Allocate the path */ - ANGBAND_DIR_XTRA_GRAF = strdup(path); - - /* Validate the "graf" directory */ - validate_dir(ANGBAND_DIR_XTRA_GRAF); - - /* Build the filename */ - path_build(path, 1024, ANGBAND_DIR_XTRA_GRAF, "8X8.BMP"); - - /* Hack -- Validate the basic graf */ - validate_file(path); - -#endif diff --git a/src/main-x11.c b/src/main-x11.c index e20451a7..81082434 100644 --- a/src/main-x11.c +++ b/src/main-x11.c @@ -1009,11 +1009,7 @@ static errr Infofnt_prepare(XFontStruct *info) ifnt->asc = info->ascent; ifnt->hgt = info->ascent + info->descent; ifnt->wid = cs->width; - if (use_bigtile) - ifnt->twid = 2 * ifnt->wid; - else - ifnt->twid = ifnt->wid; - + ifnt->twid = ifnt->wid; /* Success */ return (0); @@ -1214,14 +1210,6 @@ struct term_data infowin *win; -#ifdef USE_GRAPHICS - - XImage *tiles; - - /* Tempory storage for overlaying tiles. */ - XImage *TmpImage; - -#endif }; @@ -2143,11 +2131,8 @@ static errr Term_curs_x11(int x, int y) /* Draw the cursor */ Infoclr_set(xor); - if (use_bigtile && x + 1 < Term->wid && Term->old->a[y][x + 1] == 255) - Infofnt_text_non(x, y, " ", 2); - else - /* Hilite the cursor character */ - Infofnt_text_non(x, y, " ", 1); + /* Hilite the cursor character */ + Infofnt_text_non(x, y, " ", 1); /* Redraw the selection if any, as it may have been obscured. (later) */ s_ptr->drawn = FALSE; @@ -2192,170 +2177,6 @@ static errr Term_text_x11(int x, int y, int n, byte a, cptr s) } -#ifdef USE_GRAPHICS - -/* - * Draw some graphical characters. - */ -static errr Term_pict_x11(int x, int y, int n, const byte *ap, const char *cp, - const byte *tap, const char *tcp, const byte *eap, const char *ecp) -{ - int i, x1, y1; - - byte a; - char c; - - byte ta; - char tc; - int x2, y2; - - byte ea; - char ec; - int x3, y3; - bool_ has_overlay; - - int k, l; - - unsigned long pixel, blank; - - term_data *td = (term_data*)(Term->data); - - y *= Infofnt->hgt; - x *= Infofnt->wid; - - /* Add in affect of window boundaries */ - y += Infowin->oy; - x += Infowin->ox; - - for (i = 0; i < n; ++i, x += td->fnt->wid) - { - a = *ap++; - c = *cp++; - - /* For extra speed - cache these values */ - x1 = (c & 0x7F) * td->fnt->twid; - y1 = (a & 0x7F) * td->fnt->hgt; - - ta = *tap++; - tc = *tcp++; - - /* For extra speed - cache these values */ - x2 = (tc & 0x7F) * td->fnt->twid; - y2 = (ta & 0x7F) * td->fnt->hgt; - - ea = *eap++; - ec = *ecp++; - has_overlay = (ea && ec); - - /* For extra speed - cache these values too */ - x3 = (ec & 0x7F) * td->fnt->twid; - y3 = (ea & 0x7F) * td->fnt->hgt; - - /* Optimise the common case */ - if ((x1 == x2) && (y1 == y2)) - { - /* Draw object / terrain */ - if (!has_overlay) - { - XPutImage(Metadpy->dpy, td->win->win, - clr[0]->gc, - td->tiles, - x1, y1, - x, y, - td->fnt->twid, td->fnt->hgt); - } - - /* There's a terrain overlay */ - else - { - /* Mega Hack^2 - assume the top left corner is "black" */ - blank = XGetPixel(td->tiles, 0, td->fnt->hgt * 6); - for (k = 0; k < td->fnt->twid; k++) - { - for (l = 0; l < td->fnt->hgt; l++) - { - /* If mask set in overlay... */ - if ((pixel = XGetPixel(td->tiles, x3 + k, y3 + l)) == blank) - { - /* Output from the terrain */ - pixel = XGetPixel(td->tiles, x1 + k, y1 + l); - } - - /* Store into the temp storage. */ - XPutPixel(td->TmpImage, k, l, pixel); - } - } - - /* Draw to screen */ - XPutImage(Metadpy->dpy, td->win->win, - clr[0]->gc, - td->TmpImage, - 0, 0, x, y, - td->fnt->twid, td->fnt->hgt); - } - - } - else - { - - /* Mega Hack^2 - assume the top left corner is "black" */ - blank = XGetPixel(td->tiles, 0, td->fnt->hgt * 6); - - for (k = 0; k < td->fnt->twid; k++) - { - for (l = 0; l < td->fnt->hgt; l++) - { - /* Overlay */ - if (has_overlay) - { - pixel = XGetPixel(td->tiles, x3 + k, y3 + l); - } - - /* Hack -- No overlay */ - else - { - pixel = blank; - } - - /* If it's blank... */ - if (pixel == blank) - { - /* Look at mon/obj */ - pixel = XGetPixel(td->tiles, x1 + k, y1 + l); - } - - /* If it's blank too, use terrain */ - if (pixel == blank) - { - pixel = XGetPixel(td->tiles, x2 + k, y2 + l); - } - - /* Store into the temp storage. */ - XPutPixel(td->TmpImage, k, l, pixel); - } - } - - - - /* Draw to screen */ - XPutImage(Metadpy->dpy, td->win->win, - clr[0]->gc, - td->TmpImage, - 0, 0, x, y, - td->fnt->twid, td->fnt->hgt); - } - - x += td->fnt->wid; - } - - /* Redraw the selection if any, as it may have been obscured. (later) */ - s_ptr->drawn = FALSE; - - /* Success */ - return (0); -} - -#endif /* USE_GRAPHICS */ @@ -2623,17 +2444,6 @@ errr init_x11(int argc, char *argv[]) int num_term = 1; -#ifdef USE_GRAPHICS - - char filename[1024]; - - int pict_wid = 0; - int pict_hgt = 0; - bool_ force_old_graphics = FALSE; - - char *TmpData; - -#endif /* USE_GRAPHICS */ /* Parse args */ @@ -2645,27 +2455,6 @@ errr init_x11(int argc, char *argv[]) continue; } -#ifdef USE_GRAPHICS - - if (prefix(argv[i], "-s")) - { - smoothRescaling = FALSE; - continue; - } - - if (prefix(argv[i], "-o")) - { - force_old_graphics = TRUE; - continue; - } - - if (prefix(argv[i], "-b")) - { - arg_bigtile = use_bigtile = TRUE; - continue; - } - -#endif /* USE_GRAPHICS */ if (prefix(argv[i], "-n")) { @@ -2741,102 +2530,6 @@ errr init_x11(int argc, char *argv[]) Term_activate(&data[0].t); -#ifdef USE_GRAPHICS - - /* Try graphics */ - if (arg_graphics) - { - /* Try the "16x16.bmp" file */ - path_build(filename, 1024, ANGBAND_DIR_XTRA, "graf/16x16.bmp"); - - /* Use the "16x16.bmp" file if it exists */ - if (!force_old_graphics && - (0 == fd_close(fd_open(filename, O_RDONLY)))) - { - /* Use graphics */ - use_graphics = TRUE; - - pict_wid = pict_hgt = 16; - - ANGBAND_GRAF = "new"; - } - else - { - /* Try the "8x8.bmp" file */ - path_build(filename, 1024, ANGBAND_DIR_XTRA, "graf/8x8.bmp"); - - /* Use the "8x8.bmp" file if it exists */ - if (0 == fd_close(fd_open(filename, O_RDONLY))) - { - /* Use graphics */ - use_graphics = TRUE; - - pict_wid = pict_hgt = 8; - - ANGBAND_GRAF = "old"; - } - } - } - - /* Load graphics */ - if (use_graphics) - { - Display *dpy = Metadpy->dpy; - - XImage *tiles_raw; - - /* Load the graphical tiles */ - tiles_raw = ReadBMP(dpy, filename); - - /* Initialize the windows */ - for (i = 0; i < num_term; i++) - { - term_data *td = &data[i]; - - term *t = &td->t; - - /* Graphics hook */ - t->pict_hook = Term_pict_x11; - - /* Use graphics sometimes */ - t->higher_pict = TRUE; - - /* Resize tiles */ - td->tiles = - ResizeImage(dpy, tiles_raw, - pict_wid, pict_hgt, - td->fnt->twid, td->fnt->hgt); - } - - /* Initialize the transparency masks */ - for (i = 0; i < num_term; i++) - { - term_data *td = &data[i]; - int ii, jj; - int depth = DefaultDepth(dpy, DefaultScreen(dpy)); - Visual *visual = DefaultVisual(dpy, DefaultScreen(dpy)); - int total; - - - /* Determine total bytes needed for image */ - ii = 1; - jj = (depth - 1) >> 2; - while (jj >>= 1) ii <<= 1; - total = td->fnt->twid * td->fnt->hgt * ii; - - - TmpData = (char *)malloc(total); - - td->TmpImage = XCreateImage(dpy, visual, depth, - ZPixmap, 0, TmpData, - td->fnt->twid, td->fnt->hgt, 8, 0); - - } - - /* Free tiles_raw? XXX XXX */ - } - -#endif /* USE_GRAPHICS */ /* Success */ diff --git a/src/main-xaw.c b/src/main-xaw.c index d7d3f345..cad409b4 100644 --- a/src/main-xaw.c +++ b/src/main-xaw.c @@ -190,15 +190,6 @@ struct AngbandPart XtCallbackList redraw_callbacks; -#ifdef USE_GRAPHICS - - /* Tiles */ - XImage *tiles; - - /* Tempory storage for overlaying tiles. */ - XImage *TmpImage; - -#endif /* USE_GRAPHICS */ /* Private state */ XFontStruct *fnt; @@ -437,177 +428,6 @@ static void AngbandOutputText(AngbandWidget widget, int x, int y, } -#ifdef USE_GRAPHICS - -/* - * Draw some graphical characters. - */ -static void AngbandOutputPict(AngbandWidget widget, int x, int y, int n, - const byte *ap, const char *cp, const byte *tap, const char *tcp, - const byte *eap, const char *ecp) -{ - int i, x1, y1; - - byte a; - char c; - - byte ta; - char tc; - - int x2, y2; - - byte ea; - char ec; - - int x3, y3; - bool_ has_overlay; - - int k, l; - unsigned long pixel, blank; - - /* Figure out where to place the text */ - y = (y * widget->angband.fontheight + widget->angband.internal_border); - x = (x * widget->angband.fontwidth + widget->angband.internal_border); - - for (i = 0; i < n; ++i) - { - a = *ap++; - c = *cp++; - - /* For extra speed - cache these values */ - x1 = (c & 0x7F) * widget->angband.fontwidth; - y1 = (a & 0x7F) * widget->angband.fontheight; - - ta = *tap++; - tc = *tcp++; - - /* For extra speed - cache these values */ - x2 = (tc & 0x7F) * widget->angband.fontwidth; - y2 = (ta & 0x7F) * widget->angband.fontheight; - - ea = *eap++; - ec = *ecp++; - has_overlay = (ea && ec); - - /* For extra speed -- cache these values */ - x3 = (ec & 0x7F) * widget->angband.fontwidth; - y3 = (ea & 0x7F) * widget->angband.fontheight; - - /* Optimise the common case */ - if ((x1 == x2) && (y1 == y2)) - { - - /* No overlay */ - if (!has_overlay) - { - /* Draw object / terrain */ - XPutImage(XtDisplay(widget), XtWindow(widget), - widget->angband.gc[0], - widget->angband.tiles, - x1, y1, - x, y, - widget->angband.fontwidth, - widget->angband.fontheight); - } - - /* Terrain overlay */ - else - { - /* Mega Hack^2 - assume the top left corner is "black" */ - blank = XGetPixel(widget->angband.tiles, - 0, widget->angband.fontheight * 6); - - for (k = 0; k < widget->angband.fontwidth; k++) - { - for (l = 0; l < widget->angband.fontheight; l++) - { - /* If mask set... */ - if ((pixel = XGetPixel(widget->angband.tiles, - x3 + k, y3 + l)) == blank) - { - /* Output from the terrain */ - pixel = XGetPixel(widget->angband.tiles, - x1 + k, y1 + l); - } - - /* Store into the temp storage */ - XPutPixel(widget->angband.TmpImage, - k, l, pixel); - } - } - - /* Draw terrain + overlay */ - XPutImage(XtDisplay(widget), XtWindow(widget), - widget->angband.gc[0], - widget->angband.TmpImage, - 0, 0, - x, y, - widget->angband.fontwidth, - widget->angband.fontheight); - } - - } - else - { - /* Mega Hack^2 - assume the top left corner is "black" */ - blank = XGetPixel(widget->angband.tiles, - 0, widget->angband.fontheight * 6); - - for (k = 0; k < widget->angband.fontwidth; k++) - { - for (l = 0; l < widget->angband.fontheight; l++) - { - /* Get overlay pixel */ - if (has_overlay) - { - pixel = XGetPixel(widget->angband.tiles, - x3 + k, y3 + l); - } - - /* Hack -- no overlay */ - else - { - pixel = blank; - } - - /* If it's blank */ - if (pixel == blank) - { - /* Use obj/mon */ - pixel = XGetPixel(widget->angband.tiles, - x1 + k, y1 + l); - } - - /* Use terrain if it's blank too */ - if (pixel == blank) - { - pixel = XGetPixel(widget->angband.tiles, - x2 + k, y2 + l); - } - - /* Store into the temp storage. */ - XPutPixel(widget->angband.TmpImage, - k, l, pixel); - } - } - - /* Draw to screen */ - - /* Draw object / terrain */ - XPutImage(XtDisplay(widget), XtWindow(widget), - widget->angband.gc[0], - widget->angband.TmpImage, - 0, 0, - x, y, - widget->angband.fontwidth, - widget->angband.fontheight); - } - - x += widget->angband.fontwidth; - } -} - -#endif /* USE_GRAPHICS */ /* * Private procedures @@ -1510,24 +1330,6 @@ static errr Term_text_xaw(int x, int y, int n, byte a, cptr s) } -#ifdef USE_GRAPHICS - -/* - * Draw some graphical characters. - */ -static errr Term_pict_xaw(int x, int y, int n, const byte *ap, const char *cp, - const byte *tap, const char *tcp, const byte *eap, const char *ecp) -{ - term_data *td = (term_data*)(Term->data); - - /* Draw the pictures */ - AngbandOutputPict(td->widget, x, y, n, ap, cp, tap, tcp, eap, ecp); - - /* Success */ - return (0); -} - -#endif /* USE_GRAPHICS */ /* @@ -1647,17 +1449,6 @@ errr init_xaw(int argc, char *argv[]) cptr dpy_name = ""; -#ifdef USE_GRAPHICS - - char filename[1024]; - - int pict_wid = 0; - int pict_hgt = 0; - bool_ force_old_graphics = FALSE; - - char *TmpData; - -#endif /* USE_GRAPHICS */ /* Parse args */ for (i = 1; i < argc; i++) @@ -1668,21 +1459,6 @@ errr init_xaw(int argc, char *argv[]) continue; } -#ifdef USE_GRAPHICS - - if (prefix(argv[i], "-s")) - { - smoothRescaling = FALSE; - continue; - } - - if (prefix(argv[i], "-o")) - { - force_old_graphics = TRUE; - continue; - } - -#endif /* USE_GRAPHICS */ if (prefix(argv[i], "-n")) { @@ -1739,108 +1515,6 @@ errr init_xaw(int argc, char *argv[]) term_raise(&data[0]); -#ifdef USE_GRAPHICS - - /* Try graphics */ - if (arg_graphics) - { - /* Try the "16x16.bmp" file */ - path_build(filename, 1024, ANGBAND_DIR_XTRA, "graf/16x16.bmp"); - - /* Use the "16x16.bmp" file if it exists */ - if (!force_old_graphics && - (0 == fd_close(fd_open(filename, O_RDONLY)))) - { - /* Use graphics */ - use_graphics = TRUE; - - pict_wid = pict_hgt = 16; - - ANGBAND_GRAF = "new"; - } - else - { - /* Try the "8x8.bmp" file */ - path_build(filename, 1024, ANGBAND_DIR_XTRA, "graf/8x8.bmp"); - - /* Use the "8x8.bmp" file if it exists */ - if (0 == fd_close(fd_open(filename, O_RDONLY))) - { - /* Use graphics */ - use_graphics = TRUE; - - pict_wid = pict_hgt = 8; - - ANGBAND_GRAF = "old"; - } - } - } - - /* Load graphics */ - if (use_graphics) - { - /* Hack -- Get the Display */ - term_data *td = &data[0]; - Widget widget = (Widget)(td->widget); - Display *dpy = XtDisplay(widget); - - XImage *tiles_raw; - - /* Load the graphical tiles */ - tiles_raw = ReadBMP(dpy, filename); - - /* Initialize the windows */ - for (i = 0; i < num_term; i++) - { - term_data *td = &data[i]; - - term *t = &td->t; - - t->pict_hook = Term_pict_xaw; - - t->higher_pict = TRUE; - - /* Resize tiles */ - td->widget->angband.tiles = - ResizeImage(dpy, tiles_raw, - pict_wid, pict_hgt, - td->widget->angband.fontwidth, - td->widget->angband.fontheight); - } - - /* Initialize the transparency temp storage*/ - for (i = 0; i < num_term; i++) - { - term_data *td = &data[i]; - int ii, jj; - int depth = DefaultDepth(dpy, DefaultScreen(dpy)); - Visual *visual = DefaultVisual(dpy, DefaultScreen(dpy)); - int total; - - - /* Determine total bytes needed for image */ - ii = 1; - jj = (depth - 1) >> 2; - while (jj >>= 1) ii <<= 1; - total = td->widget->angband.fontwidth * - td->widget->angband.fontheight * ii; - - - TmpData = (char *)malloc(total); - - td->widget->angband.TmpImage = XCreateImage(dpy, - visual, depth, - ZPixmap, 0, TmpData, - td->widget->angband.fontwidth, - td->widget->angband.fontheight, 8, 0); - - } - - - /* Free tiles_raw? XXX XXX */ - } - -#endif /* USE_GRAPHICS */ /* Success */ return (0); diff --git a/src/main-xxx.c b/src/main-xxx.c index bc430dd5..0c07b161 100644 --- a/src/main-xxx.c +++ b/src/main-xxx.c @@ -514,42 +514,6 @@ static errr Term_text_xxx(int x, int y, int n, byte a, const char *cp) } -/* - * Draw some attr/char pairs on the screen - * - * This routine should display the given "n" attr/char pairs at - * the given location (x,y). This function is only used if one - * of the flags "always_pict" or "higher_pict" is defined. - * - * You must be sure that the attr/char pairs, when displayed, will - * erase anything (including any visual cursor) that used to be at - * the given location. On many machines this is automatic, but on - * others, you must first call "Term_wipe_xxx(x, y, 1)". - * - * With the "higher_pict" flag, this function can be used to allow - * the display of "pseudo-graphic" pictures, for example, by using - * the attr/char pair as an encoded index into a pixmap of special - * "pictures". - * - * With the "always_pict" flag, this function can be used to force - * every attr/char pair to be drawn by this function, which can be - * very useful if this file can optimize its own display calls. - * - * This function is often associated with the "arg_graphics" flag. - * - * This function is only used if one of the "higher_pict" and/or - * "always_pict" flags are set. - */ -static errr Term_pict_xxx(int x, int y, int n, const byte *ap, const char *cp) -{ - term_data *td = (term_data*)(Term->data); - - /* XXX XXX XXX */ - - /* Success */ - return (0); -} - /*** Internal Functions ***/ @@ -621,7 +585,6 @@ static void term_data_link(int i) td->t->curs_hook = Term_curs_xxx; td->t->wipe_hook = Term_wipe_xxx; td->t->text_hook = Term_text_xxx; - td->t->pict_hook = Term_pict_xxx; /* Remember where we came from */ td->t->data = (vptr)(td); @@ -268,13 +268,6 @@ int main(int argc, char *argv[]) break; } - case 'G': - case 'g': - { - arg_graphics = TRUE; - break; - } - case 'R': case 'r': { @@ -380,7 +373,6 @@ usage: puts(" -h This help"); puts(" -n Start a new character"); puts(" -w Request wizard mode"); - puts(" -g Request graphics mode"); puts(" -o Request original keyset"); puts(" -r Request rogue-like keyset"); puts(" -H <list of files> Convert helpfile to html"); @@ -395,12 +387,6 @@ usage: puts(" -- Sub options"); puts(" -- -n# Number of terms to use"); puts(" -- -b Turn off software backing store"); -# ifdef USE_GRAPHICS - puts(" -- -s Turn off smoothscaling graphics"); - puts(" -- -o Requests \"old\" graphics"); - puts(" -- -g Requests \"new\" graphics"); - puts(" -- -t Enable transparency effect"); -# endif /* USE_GRAPHICS */ #endif /* USE_GTK2 */ #ifdef USE_XAW @@ -408,10 +394,6 @@ usage: puts(" -- Sub options"); puts(" -- -n# Number of terms to use"); puts(" -- -d<name> Display to use"); -# ifdef USE_GRAPHICS - puts(" -- -s Turn off smoothscaling graphics"); - puts(" -- -o Requests \"old\" graphics"); -# endif /* USE_GRAPHICS */ #endif /* USE_XAW */ #ifdef USE_X11 @@ -419,11 +401,6 @@ usage: puts(" -- Sub options"); puts(" -- -n# Number of terms to use"); puts(" -- -d<name> Display to use"); -# ifdef USE_GRAPHICS - puts(" -- -s Turn off smoothscaling graphics"); - puts(" -- -o Requests \"old\" graphics"); - puts(" -- -b Requests double-width tiles"); -# endif /* USE_GRAPHICS */ #endif /* USE_X11 */ #ifdef USE_GCU @@ -436,9 +413,6 @@ usage: puts(" -msdl To use SDL"); puts(" -- Sub options"); puts(" -- -n # Number of virtual consoles to use"); - puts(" -- -g Request new graphics (16x16)"); - puts(" -- -o Request old graphics (8x8)"); - puts(" -- -b Requests double-width tiles"); puts(" -- -w # Request screen width in pixels"); puts(" -- -h # Request screen height in pixels"); puts(" -- -bpp # Request screen color depth in bits"); diff --git a/src/monster1.cc b/src/monster1.cc index 8fb8b4a1..9bcf9e08 100644 --- a/src/monster1.cc +++ b/src/monster1.cc @@ -1559,13 +1559,11 @@ static void roff_name(int r_idx, int ego) /* Append the "standard" attr/char info */ Term_addstr( -1, TERM_WHITE, " ('"); Term_addch(a1, c1); - if (use_bigtile && (a1 & 0x80)) Term_addch(255, 255); Term_addstr( -1, TERM_WHITE, "')"); /* Append the "optional" attr/char info */ Term_addstr( -1, TERM_WHITE, "/('"); Term_addch(a2, c2); - if (use_bigtile && (a2 & 0x80)) Term_addch(255, 255); Term_addstr( -1, TERM_WHITE, "'):"); } diff --git a/src/object1.cc b/src/object1.cc index 5d819f5f..54fa596b 100644 --- a/src/object1.cc +++ b/src/object1.cc @@ -681,7 +681,7 @@ void flavor_init(void) * flag. This is useful for switching "graphics" on/off. * * The features, objects, and monsters, should all be encoded in the - * relevant "font.pref" and/or "graf.prf" files. XXX XXX XXX + * relevant "font.pref". XXX XXX XXX * * The "prefs" parameter is no longer meaningful. XXX XXX XXX */ @@ -760,65 +760,8 @@ void reset_visuals(void) } - if (use_graphics) - { - /* Process "graf.prf" */ - process_pref_file("graf.prf"); - - /* - * Hack -- remember graphics mode as an integer value, - * for faster processing of map_info() - */ - - /* IBM-PC pseudo-graphics -- not maintained, but the code is there */ - if (streq(ANGBAND_SYS, "ibm")) - { - graphics_mode = GRAPHICS_IBM; - } - - /* - * Isometric view. Also assumes all the attributes of the "new" - * graphics. - */ - else if (streq(ANGBAND_GRAF, "iso")) - { - graphics_mode = GRAPHICS_ISO; - } - - /* - * "New" graphics -- supports graphics overlay for traps, ego monsters - * and player subraces, and has tiles for lighting effects (row + 1 - * and row + 2 for "darker" versions of terrain features) - */ - else if (streq(ANGBAND_GRAF, "new")) - { - graphics_mode = GRAPHICS_NEW; - } - - /* - * "Old" graphics -- doesn't support graphics overlay and lighting - * effects - */ - else if (streq(ANGBAND_GRAF, "old")) - { - graphics_mode = GRAPHICS_OLD; - } - - /* ??? */ - else - { - graphics_mode = GRAPHICS_UNKNOWN; - } - } - /* Normal symbols */ - else - { - /* Process "font.prf" */ - process_pref_file("font.prf"); - - graphics_mode = GRAPHICS_NONE; - } + process_pref_file("font.prf"); } diff --git a/src/readdib.c b/src/readdib.c deleted file mode 100644 index 294c2702..00000000 --- a/src/readdib.c +++ /dev/null @@ -1,342 +0,0 @@ -/* File: readbits.c */ - -/* - * This package provides a routine to read a DIB file and set up the - * device dependent version of the image. - * - * This file has been modified for use with "Angband 2.8.2" - * - * COPYRIGHT: - * - * (C) Copyright Microsoft Corp. 1993. All rights reserved. - * - * You have a royalty-free right to use, modify, reproduce and - * distribute the Sample Files (and/or any modified version) in - * any way you find useful, provided that you agree that - * Microsoft has no warranty obligations or liability for any - * Sample Application Files which are modified. - */ - -#ifdef WINDOWS - -#include <windows.h> - -#include "readdib.h" - - -/* - * Extract the "WIN32" flag from the compiler - */ -#if defined(__WIN32__) || defined(__WINNT__) || defined(__NT__) -# ifndef WIN32 -# define WIN32 -# endif -#endif - -/* - * Make sure "huge" is legal XXX XXX XXX - */ -#undef huge -#ifdef WIN32 -# define huge /* oops */ -#endif - - -/* - * Number of bytes to be read during each read operation - */ -#define MAXREAD 32768 - -/* - * Private routine to read more than 64K at a time - * - * Reads data in steps of 32k till all the data has been read. - * - * Returns number of bytes requested, or zero if something went wrong. - */ -static DWORD PASCAL lread(int fh, VOID far *pv, DWORD ul) -{ - DWORD ulT = ul; - BYTE huge *hp = pv; - - while (ul > (DWORD)MAXREAD) - { - if (_lread(fh, (LPSTR)hp, (WORD)MAXREAD) != MAXREAD) - return 0; - ul -= MAXREAD; - hp += MAXREAD; - } - if (_lread(fh, (LPSTR)hp, (WORD)ul) != (WORD)ul) - return 0; - return ulT; -} - - -/* - * Given a BITMAPINFOHEADER, create a palette based on the color table. - * - * Returns the handle of a palette, or zero if something went wrong. - */ -static HPALETTE PASCAL NEAR MakeDIBPalette(LPBITMAPINFOHEADER lpInfo) -{ - NPLOGPALETTE npPal; - RGBQUAD far *lpRGB; - HPALETTE hLogPal; - WORD i; - - /* - * since biClrUsed field was filled during the loading of the DIB, - * we know it contains the number of colors in the color table. - */ - if (lpInfo->biClrUsed) - { - npPal = (NPLOGPALETTE)LocalAlloc(LMEM_FIXED, sizeof(LOGPALETTE) + - (WORD)lpInfo->biClrUsed * sizeof(PALETTEENTRY)); - if (!npPal) - return (FALSE); - - npPal->palVersion = 0x300; - npPal->palNumEntries = (WORD)lpInfo->biClrUsed; - - /* get pointer to the color table */ - lpRGB = (RGBQUAD FAR *)((LPSTR)lpInfo + lpInfo->biSize); - - /* copy colors from the color table to the LogPalette structure */ - for (i = 0; i < lpInfo->biClrUsed; i++, lpRGB++) - { - npPal->palPalEntry[i].peRed = lpRGB->rgbRed; - npPal->palPalEntry[i].peGreen = lpRGB->rgbGreen; - npPal->palPalEntry[i].peBlue = lpRGB->rgbBlue; - npPal->palPalEntry[i].peFlags = PC_NOCOLLAPSE; - } - - hLogPal = CreatePalette((LPLOGPALETTE)npPal); - LocalFree((HANDLE)npPal); - return (hLogPal); - } - - /* - * 24-bit DIB with no color table. return default palette. Another - * option would be to create a 256 color "rainbow" palette to provide - * some good color choices. - */ - else - { - return (GetStockObject(DEFAULT_PALETTE)); - } -} - - -/* - * Given a DIB, create a bitmap and corresponding palette to be used for a - * device-dependent representation of the image. - * - * Returns TRUE on success (phPal and phBitmap are filled with appropriate - * handles. Caller is responsible for freeing objects) and FALSE on failure - * (unable to create objects, both pointer are invalid). - */ -static BOOL NEAR PASCAL MakeBitmapAndPalette(HDC hDC, HANDLE hDIB, - HPALETTE * phPal, HBITMAP * phBitmap) -{ - LPBITMAPINFOHEADER lpInfo; - BOOL result = FALSE; - HBITMAP hBitmap; - HPALETTE hPalette, hOldPal; - LPSTR lpBits; - - lpInfo = (LPBITMAPINFOHEADER) GlobalLock(hDIB); - if ((hPalette = MakeDIBPalette(lpInfo)) != 0) - { - /* Need to realize palette for converting DIB to bitmap. */ - hOldPal = SelectPalette(hDC, hPalette, TRUE); - RealizePalette(hDC); - - lpBits = ((LPSTR)lpInfo + (WORD)lpInfo->biSize + - (WORD)lpInfo->biClrUsed * sizeof(RGBQUAD)); - hBitmap = CreateDIBitmap(hDC, lpInfo, CBM_INIT, lpBits, - (LPBITMAPINFO)lpInfo, DIB_RGB_COLORS); - - SelectPalette(hDC, hOldPal, TRUE); - RealizePalette(hDC); - - if (!hBitmap) - { - DeleteObject(hPalette); - } - else - { - *phBitmap = hBitmap; - *phPal = hPalette; - result = TRUE; - } - } - return (result); -} - - - -/* - * Reads a DIB from a file, obtains a handle to its BITMAPINFO struct, and - * loads the DIB. Once the DIB is loaded, the function also creates a bitmap - * and palette out of the DIB for a device-dependent form. - * - * Returns TRUE if the DIB is loaded and the bitmap/palette created, in which - * case, the DIBINIT structure pointed to by pInfo is filled with the appropriate - * handles, and FALSE if something went wrong. - */ -BOOL ReadDIB(HWND hWnd, LPSTR lpFileName, DIBINIT *pInfo) -{ - unsigned fh; - LPBITMAPINFOHEADER lpbi; - OFSTRUCT of; - BITMAPFILEHEADER bf; - WORD nNumColors; - BOOL result = FALSE; - char str[128]; - WORD offBits; - HDC hDC; - BOOL bCoreHead = FALSE; - - /* Open the file and get a handle to it's BITMAPINFO */ - fh = OpenFile(lpFileName, &of, OF_READ); - if (fh == -1) - { - wsprintf(str, "Can't open file '%ls'", (LPSTR)lpFileName); - MessageBox(NULL, str, "Error", MB_ICONSTOP | MB_OK); - return (FALSE); - } - - pInfo->hDIB = GlobalAlloc(GHND, (DWORD)(sizeof(BITMAPINFOHEADER) + - 256 * sizeof(RGBQUAD))); - - if (!pInfo->hDIB) - return (FALSE); - - lpbi = (LPBITMAPINFOHEADER)GlobalLock(pInfo->hDIB); - - /* read the BITMAPFILEHEADER */ - if (sizeof (bf) != _lread(fh, (LPSTR)&bf, sizeof(bf))) - goto ErrExit; - - /* 'BM' */ - if (bf.bfType != 0x4d42) - goto ErrExit; - - if (sizeof(BITMAPCOREHEADER) != _lread(fh, (LPSTR)lpbi, sizeof(BITMAPCOREHEADER))) - goto ErrExit; - - if (lpbi->biSize == sizeof(BITMAPCOREHEADER)) - { - lpbi->biSize = sizeof(BITMAPINFOHEADER); - lpbi->biBitCount = ((LPBITMAPCOREHEADER)lpbi)->bcBitCount; - lpbi->biPlanes = ((LPBITMAPCOREHEADER)lpbi)->bcPlanes; - lpbi->biHeight = ((LPBITMAPCOREHEADER)lpbi)->bcHeight; - lpbi->biWidth = ((LPBITMAPCOREHEADER)lpbi)->bcWidth; - bCoreHead = TRUE; - } - else - { - /* get to the start of the header and read INFOHEADER */ - _llseek(fh, sizeof(BITMAPFILEHEADER), SEEK_SET); - if (sizeof(BITMAPINFOHEADER) != _lread(fh, (LPSTR)lpbi, sizeof(BITMAPINFOHEADER))) - goto ErrExit; - } - - if (!(nNumColors = (WORD)lpbi->biClrUsed)) - { - /* no color table for 24-bit, default size otherwise */ - if (lpbi->biBitCount != 24) - nNumColors = 1 << lpbi->biBitCount; - } - - /* fill in some default values if they are zero */ - if (lpbi->biClrUsed == 0) - lpbi->biClrUsed = nNumColors; - - if (lpbi->biSizeImage == 0) - { - lpbi->biSizeImage = (((((lpbi->biWidth * (DWORD)lpbi->biBitCount) + 31) & ~31) >> 3) - * lpbi->biHeight); - } - - /* otherwise wouldn't work with 16 color bitmaps -- S.K. */ - else if ((nNumColors == 16) && (lpbi->biSizeImage > bf.bfSize)) - { - lpbi->biSizeImage /= 2; - } - - /* get a proper-sized buffer for header, color table and bits */ - GlobalUnlock(pInfo->hDIB); - pInfo->hDIB = GlobalReAlloc(pInfo->hDIB, lpbi->biSize + - nNumColors * sizeof(RGBQUAD) + - lpbi->biSizeImage, 0); - - /* can't resize buffer for loading */ - if (!pInfo->hDIB) - goto ErrExit2; - - lpbi = (LPBITMAPINFOHEADER)GlobalLock(pInfo->hDIB); - - /* read the color table */ - if (!bCoreHead) - { - _lread(fh, (LPSTR)(lpbi) + lpbi->biSize, nNumColors * sizeof(RGBQUAD)); - } - else - { - signed int i; - RGBQUAD FAR *pQuad; - RGBTRIPLE FAR *pTriple; - - _lread(fh, (LPSTR)(lpbi) + lpbi->biSize, nNumColors * sizeof(RGBTRIPLE)); - - pQuad = (RGBQUAD FAR *)((LPSTR)lpbi + lpbi->biSize); - pTriple = (RGBTRIPLE FAR *) pQuad; - for (i = nNumColors - 1; i >= 0; i--) - { - pQuad[i].rgbRed = pTriple[i].rgbtRed; - pQuad[i].rgbBlue = pTriple[i].rgbtBlue; - pQuad[i].rgbGreen = pTriple[i].rgbtGreen; - pQuad[i].rgbReserved = 0; - } - } - - /* offset to the bits from start of DIB header */ - offBits = (WORD)lpbi->biSize + nNumColors * sizeof(RGBQUAD); - - if (bf.bfOffBits != 0L) - { - _llseek(fh, bf.bfOffBits, SEEK_SET); - } - - /* Use local version of '_lread()' above */ - if (lpbi->biSizeImage == lread(fh, (LPSTR)lpbi + offBits, lpbi->biSizeImage)) - { - GlobalUnlock(pInfo->hDIB); - - hDC = GetDC(hWnd); - if (!MakeBitmapAndPalette(hDC, pInfo->hDIB, &(pInfo->hPalette), - &(pInfo->hBitmap))) - { - ReleaseDC(hWnd, hDC); - goto ErrExit2; - } - else - { - ReleaseDC(hWnd, hDC); - result = TRUE; - } - } - else - { -ErrExit: - GlobalUnlock(pInfo->hDIB); -ErrExit2: - GlobalFree(pInfo->hDIB); - } - - _lclose(fh); - return (result); -} - -#endif diff --git a/src/readdib.h b/src/readdib.h deleted file mode 100644 index c6402b50..00000000 --- a/src/readdib.h +++ /dev/null @@ -1,21 +0,0 @@ -/* File: readdib.h */ - -/* - * This file has been modified for use with "Angband 2.8.2" - * - * Copyright 1991 Microsoft Corporation. All rights reserved. - */ - -/* - * Information about a bitmap - */ -typedef struct { - HANDLE hDIB; - HANDLE hBitmap; - HANDLE hPalette; - BYTE CellWidth; - BYTE CellHeight; -} DIBINIT; - -/* Read a DIB from a file */ -BOOL ReadDIB(HWND, LPSTR, DIBINIT *); diff --git a/src/store.cc b/src/store.cc index 1e61c413..94c0eab3 100644 --- a/src/store.cc +++ b/src/store.cc @@ -1451,12 +1451,6 @@ static void display_entry(int pos) if (!o_ptr->k_idx) c = ' '; Term_draw(cur_col, i + 6, a, c); - if (use_bigtile) - { - cur_col++; - if (a & 0x80) - Term_draw(cur_col, i + 6, 255, 255); - } cur_col += 2; } diff --git a/src/variable.cc b/src/variable.cc index ef134d98..289b9c9b 100644 --- a/src/variable.cc +++ b/src/variable.cc @@ -49,10 +49,8 @@ u16b sf_saves; /* Number of "saves" during this life */ * Run-time aruments */ bool_ arg_wizard; /* Command arg -- Request wizard mode */ -bool_ arg_graphics; /* Command arg -- Request graphics mode */ bool_ arg_force_original; /* Command arg -- Request original keyset */ bool_ arg_force_roguelike; /* Command arg -- Request roguelike keyset */ -bool_ arg_bigtile = FALSE; /* Command arg -- Request big tile mode */ /* * Various things @@ -108,10 +106,6 @@ s32b old_turn; /* Turn when level began (feelings) */ bool_ wizard; /* Is the player currently in Wizard mode? */ -bool_ use_graphics; /* The "graphics" mode is enabled */ -bool_ use_bigtile = FALSE; -byte graphics_mode; /* Current graphics mode */ - u16b total_winner; /* Semi-Hack -- Game has been won */ u16b has_won; /* Semi-Hack -- Game has been won */ diff --git a/src/xtra2.cc b/src/xtra2.cc index f74e54a5..dd9b788a 100644 --- a/src/xtra2.cc +++ b/src/xtra2.cc @@ -3487,7 +3487,6 @@ void get_screen_size(int *wid_p, int *hgt_p) Term_get_size(wid_p, hgt_p); *hgt_p -= ROW_MAP + 1; *wid_p -= COL_MAP + 1; - if (use_bigtile) *wid_p /= 2; } /* diff --git a/src/z-term.c b/src/z-term.c index a2fb8fae..d1cec6f5 100644 --- a/src/z-term.c +++ b/src/z-term.c @@ -86,13 +86,9 @@ * * This package allows each "grid" in each window to hold an attr/char * pair, with each ranging from 0 to 255, and makes very few assumptions - * about the meaning of any attr/char values. Normally, we assume that - * "attr 0" is "black", with the semantics that "black" text should be - * sent to "Term_wipe()" instead of "Term_text()", but this sematics is - * modified if either the "always_pict" or the "always_text" flags are - * set. We assume that "char 0" is "dangerous", since placing such a - * "char" in the middle of a string "terminates" the string, and usually - * we prevent its use. + * about the meaning of any attr/char values. We assume that "attr 0" is + * "black", with the semantics that "black" text should be + * sent to "Term_wipe()" instead of "Term_text()". * * Finally, we use a special attr/char pair, defaulting to "attr 0" and * "char 32", also known as "black space", when we "erase" or "clear" @@ -187,7 +183,6 @@ * Term->curs_hook = Draw (or Move) the cursor * Term->wipe_hook = Draw some blank spaces * Term->text_hook = Draw some text in the window - * Term->pict_hook = Draw some attr/chars in the window * * The "Term->xtra_hook" hook provides a variety of different functions, * based on the first parameter (which should be taken from the various @@ -205,26 +200,13 @@ * The "Term->wipe_hook" hook provides this package with a simple way * to "erase", starting at "x,y", the next "n" grids. This hook assumes * that the input is valid. This hook is required, unless the setting - * of the "always_pict" or "always_text" flags makes it optional. + * of the "always_text" flag makes it optional. * * The "Term->text_hook" hook provides this package with a simple way * to "draw", starting at "x,y", the "n" chars contained in "cp", using * the attr "a". This hook assumes that the input is valid, and that * "n" is between 1 and 256 inclusive, but it should NOT assume that - * the contents of "cp" are null-terminated. This hook is required, - * unless the setting of the "always_pict" flag makes it optional. - * - * The "Term->pict_hook" hook provides this package with a simple way - * to "draw", starting at "x,y", the "n" attr/char pairs contained in - * the arrays "ap" and "cp". This hook assumes that the input is valid, - * and that "n" is between 1 and 256 inclusive, but it should NOT assume - * that the contents of "cp" are null-terminated. This hook is optional, - * unless the setting of the "always_pict" or "higher_pict" flags make - * it required. Note that recently, this hook was changed from taking - * a byte "a" and a char "c" to taking a length "n", an array of bytes - * "ap" and an array of chars "cp". Old implementations of this hook - * should now iterate over all "n" attr/char pairs. - * + * the contents of "cp" are null-terminated. * * The game "Angband" uses a set of files called "main-xxx.c", for * various "xxx" suffixes. Most of these contain a function called @@ -281,31 +263,6 @@ static errr term_win_nuke(term_win *s, int w, int h) free(s->vc); s->vc = NULL; - /* Free the terrain access arrays */ - free(s->ta); - s->ta = NULL; - - free(s->tc); - s->tc = NULL; - - /* Free the terrain content arrays */ - free(s->vta); - s->vta = NULL; - free(s->vtc); - s->vtc = NULL; - - /* Free the ego graphics access arrays */ - free(s->ea); - s->ea = NULL; - free(s->ec); - s->ec = NULL; - - /* Free the ego graphics content arrays */ - free(s->vea); - s->vea = NULL; - free(s->vec); - s->vec = NULL; - /* Success */ return (0); } @@ -326,35 +283,11 @@ static errr term_win_init(term_win *s, int w, int h) s->va = safe_calloc(h * w, sizeof(byte)); s->vc = safe_calloc(h * w, sizeof(char)); - /* Make the terrain access arrays */ - s->ta = safe_calloc(h, sizeof(byte*)); - s->tc = safe_calloc(h, sizeof(char*)); - - /* Make the terrain content arrays */ - s->vta = safe_calloc(h * w, sizeof(byte)); - s->vtc = safe_calloc(h * w, sizeof(char)); - - /* Make the ego graphics access arrays */ - s->ea = safe_calloc(h, sizeof(byte*)); - s->ec = safe_calloc(h, sizeof(char*)); - - /* Make the ego graphics content arrays */ - s->vea = safe_calloc(h * w, sizeof(byte)); - s->vec = safe_calloc(h * w, sizeof(char)); - - /* Prepare the window access arrays */ for (y = 0; y < h; y++) { s->a[y] = s->va + w * y; s->c[y] = s->vc + w * y; - - s->ta[y] = s->vta + w * y; - s->tc[y] = s->vtc + w * y; - - s->ea[y] = s->vea + w * y; - s->ec[y] = s->vec + w * y; - } /* Success */ @@ -378,28 +311,10 @@ static errr term_win_copy(term_win *s, term_win *f, int w, int h) byte *s_aa = s->a[y]; char *s_cc = s->c[y]; - byte *f_taa = f->ta[y]; - char *f_tcc = f->tc[y]; - - byte *s_taa = s->ta[y]; - char *s_tcc = s->tc[y]; - - byte *f_eaa = f->ea[y]; - char *f_ecc = f->ec[y]; - - byte *s_eaa = s->ea[y]; - char *s_ecc = s->ec[y]; - for (x = 0; x < w; x++) { *s_aa++ = *f_aa++; *s_cc++ = *f_cc++; - - *s_taa++ = *f_taa++; - *s_tcc++ = *f_tcc++; - - *s_eaa++ = *f_eaa++; - *s_ecc++ = *f_ecc++; } } @@ -473,18 +388,6 @@ static errr Term_text_hack(int x, int y, int n, byte a, const char *cp) return ( -1); } -/* - * Hack -- fake hook for "Term_pict()" (see above) - */ -static errr Term_pict_hack(int x, int y, int n, const byte *ap, const char *cp, const byte *tap, const char *tcp, const byte *eap, const char *ecp) -{ - /* Compiler silliness */ - if (x || y || n || ap || cp || tap || tcp || eap || ecp) return ( -2); - - /* Oops */ - return ( -1); -} - /*** Efficient routines ***/ @@ -495,34 +398,20 @@ static errr Term_pict_hack(int x, int y, int n, const byte *ap, const char *cp, * * Assumes given location and values are valid. */ -void Term_queue_char(int x, int y, byte a, char c, byte ta, char tc, byte ea, char ec) +void Term_queue_char(int x, int y, byte a, char c) { term_win *scrn = Term->scr; byte *scr_aa = &scrn->a[y][x]; char *scr_cc = &scrn->c[y][x]; - byte *scr_taa = &scrn->ta[y][x]; - char *scr_tcc = &scrn->tc[y][x]; - - byte *scr_eaa = &scrn->ea[y][x]; - char *scr_ecc = &scrn->ec[y][x]; - /* Hack -- Ignore non-changes */ - if ((*scr_aa == a) && (*scr_cc == c) && - (*scr_taa == ta) && (*scr_tcc == tc) && - (*scr_eaa == ea) && (*scr_ecc == ec)) return; + if ((*scr_aa == a) && (*scr_cc == c)) return; /* Save the "literal" information */ *scr_aa = a; *scr_cc = c; - *scr_taa = ta; - *scr_tcc = tc; - - *scr_eaa = ea; - *scr_ecc = ec; - /* Check for new min/max row info */ if (y < Term->y1) Term->y1 = y; if (y > Term->y2) Term->y2 = y; @@ -533,89 +422,6 @@ void Term_queue_char(int x, int y, byte a, char c, byte ta, char tc, byte ea, ch } -/* - * Mentally draw a string of attr/chars at a given location - * - * Assumes given location and values are valid. - * - * This function is designed to be fast, with no consistancy checking. - * It is used to update the map in the game. - */ -void Term_queue_line(int x, int y, int n, byte *a, char *c, byte *ta, char *tc, byte *ea, char *ec) -{ - term_win *scrn = Term->scr; - - int x1 = -1; - int x2 = -1; - - byte *scr_aa = &scrn->a[y][x]; - char *scr_cc = &scrn->c[y][x]; - - byte *scr_taa = &scrn->ta[y][x]; - char *scr_tcc = &scrn->tc[y][x]; - - byte *scr_eaa = &scrn->ea[y][x]; - char *scr_ecc = &scrn->ec[y][x]; - - while (n--) - { - - /* Hack -- Ignore non-changes */ - if ((*scr_aa == *a) && (*scr_cc == *c) && - (*scr_taa == *ta) && (*scr_tcc == *tc) && - (*scr_eaa == *ea) && (*scr_ecc == *ec)) - { - x++; - a++; - c++; - ta++; - tc++; - ea++; - ec++; - scr_aa++; - scr_cc++; - scr_taa++; - scr_tcc++; - scr_eaa++; - scr_ecc++; - continue; - } - - /* Save the "literal" information */ - *scr_taa++ = *ta++; - *scr_tcc++ = *tc++; - - /* Save the "literal" information */ - *scr_eaa++ = *ea++; - *scr_ecc++ = *ec++; - - /* Save the "literal" information */ - *scr_aa++ = *a++; - *scr_cc++ = *c++; - - /* Track minimum changed column */ - if (x1 < 0) x1 = x; - - /* Track maximum changed column */ - x2 = x; - - x++; - } - - /* Expand the "change area" as needed */ - if (x1 >= 0) - { - /* Check for new min/max row info */ - if (y < Term->y1) Term->y1 = y; - if (y > Term->y2) Term->y2 = y; - - /* Check for new min/max col info in this row */ - if (x1 < Term->x1[y]) Term->x1[y] = x1; - if (x2 > Term->x2[y]) Term->x2[y] = x2; - } -} - - /* * Mentally draw some attr/chars at a given location @@ -632,40 +438,19 @@ void Term_queue_chars(int x, int y, int n, byte a, cptr s) byte *scr_aa = Term->scr->a[y]; char *scr_cc = Term->scr->c[y]; - byte *scr_taa = Term->scr->ta[y]; - char *scr_tcc = Term->scr->tc[y]; - - byte *scr_eaa = Term->scr->ea[y]; - char *scr_ecc = Term->scr->ec[y]; - /* Queue the attr/chars */ for ( ; n; x++, s++, n--) { int oa = scr_aa[x]; int oc = scr_cc[x]; - int ota = scr_taa[x]; - int otc = scr_tcc[x]; - - int oea = scr_eaa[x]; - int oec = scr_ecc[x]; - /* Hack -- Ignore non-changes */ - if ((oa == a) && (oc == *s) && - (ota == 0) && (otc == 0) && - (oea == 0) && (oec == 0)) continue; - + if ((oa == a) && (oc == *s)) continue; /* Save the "literal" information */ scr_aa[x] = a; scr_cc[x] = *s; - scr_taa[x] = 0; - scr_tcc[x] = 0; - - scr_taa[x] = 0; - scr_tcc[x] = 0; - /* Note the "range" of window updates */ if (x1 < 0) x1 = x; x2 = x; @@ -686,321 +471,6 @@ void Term_queue_chars(int x, int y, int n, byte a, cptr s) -/*** Refresh routines ***/ - - -/* - * Flush a row of the current window (see "Term_fresh") - * - * Display text using "Term_pict()" - */ -static void Term_fresh_row_pict(int y, int x1, int x2) -{ - int x; - - byte *old_aa = Term->old->a[y]; - char *old_cc = Term->old->c[y]; - - byte *scr_aa = Term->scr->a[y]; - char *scr_cc = Term->scr->c[y]; - - byte *old_taa = Term->old->ta[y]; - char *old_tcc = Term->old->tc[y]; - - byte *scr_taa = Term->scr->ta[y]; - char *scr_tcc = Term->scr->tc[y]; - - byte ota; - char otc; - - byte nta; - char ntc; - - byte *old_eaa = Term->old->ea[y]; - char *old_ecc = Term->old->ec[y]; - - byte *scr_eaa = Term->scr->ea[y]; - char *scr_ecc = Term->scr->ec[y]; - - byte oea; - char oec; - - byte nea; - char nec; - - - - /* Pending length */ - int fn = 0; - - /* Pending start */ - int fx = 0; - - byte oa; - char oc; - - byte na; - char nc; - - /* Scan "modified" columns */ - for (x = x1; x <= x2; x++) - { - /* See what is currently here */ - oa = old_aa[x]; - oc = old_cc[x]; - - /* See what is desired there */ - na = scr_aa[x]; - nc = scr_cc[x]; - - ota = old_taa[x]; - otc = old_tcc[x]; - - nta = scr_taa[x]; - ntc = scr_tcc[x]; - - oea = old_eaa[x]; - oec = old_ecc[x]; - - nea = scr_eaa[x]; - nec = scr_ecc[x]; - - /* Handle unchanged grids */ - if ((na == oa) && (nc == oc) && - (nta == ota) && (ntc == otc) && - (nea == oea) && (nec == oec)) - { - /* Flush */ - if (fn) - { - /* Draw pending attr/char pairs */ - (void)((*Term->pict_hook)(fx, y, fn, - &scr_aa[fx], &scr_cc[fx], - &scr_taa[fx], &scr_tcc[fx], - &scr_eaa[fx], &scr_ecc[fx])); - - /* Forget */ - fn = 0; - } - - /* Skip */ - continue; - } - /* Save new contents */ - old_aa[x] = na; - old_cc[x] = nc; - - old_taa[x] = nta; - old_tcc[x] = ntc; - - old_eaa[x] = nea; - old_ecc[x] = nec; - - /* Restart and Advance */ - if (fn++ == 0) fx = x; - } - - /* Flush */ - if (fn) - { - /* Draw pending attr/char pairs */ - (void)((*Term->pict_hook)(fx, y, fn, - &scr_aa[fx], &scr_cc[fx], - &scr_taa[fx], &scr_tcc[fx], - &scr_eaa[fx], &scr_ecc[fx])); - } -} - - - -/* - * Flush a row of the current window (see "Term_fresh") - * - * Display text using "Term_text()" and "Term_wipe()", - * but use "Term_pict()" for high-bit attr/char pairs - */ -static void Term_fresh_row_both(int y, int x1, int x2) -{ - int x; - - byte *old_aa = Term->old->a[y]; - char *old_cc = Term->old->c[y]; - - byte *scr_aa = Term->scr->a[y]; - char *scr_cc = Term->scr->c[y]; - - byte *old_taa = Term->old->ta[y]; - char *old_tcc = Term->old->tc[y]; - byte *scr_taa = Term->scr->ta[y]; - char *scr_tcc = Term->scr->tc[y]; - - byte ota; - char otc; - byte nta; - char ntc; - - byte *old_eaa = Term->old->ea[y]; - char *old_ecc = Term->old->ec[y]; - byte *scr_eaa = Term->scr->ea[y]; - char *scr_ecc = Term->scr->ec[y]; - - byte oea; - char oec; - byte nea; - char nec; - - /* The "always_text" flag */ - int always_text = Term->always_text; - - /* Pending length */ - int fn = 0; - - /* Pending start */ - int fx = 0; - - /* Pending attr */ - byte fa = Term->attr_blank; - - byte oa; - char oc; - - byte na; - char nc; - - /* Scan "modified" columns */ - for (x = x1; x <= x2; x++) - { - /* See what is currently here */ - oa = old_aa[x]; - oc = old_cc[x]; - - /* See what is desired there */ - na = scr_aa[x]; - nc = scr_cc[x]; - - ota = old_taa[x]; - otc = old_tcc[x]; - - nta = scr_taa[x]; - ntc = scr_tcc[x]; - - oea = old_eaa[x]; - oec = old_ecc[x]; - - nea = scr_eaa[x]; - nec = scr_ecc[x]; - - /* Handle unchanged grids */ - if ((na == oa) && (nc == oc) && - (nta == ota) && (ntc == otc) && - (nea == oea) && (nec == oec)) - { - /* Flush */ - if (fn) - { - /* Draw pending chars (normal) */ - if (fa || always_text) - { - (void)((*Term->text_hook)(fx, y, fn, fa, &scr_cc[fx])); - } - /* Draw pending chars (black) */ - else - { - (void)((*Term->wipe_hook)(fx, y, fn)); - } - /* Forget */ - fn = 0; - } - - /* Skip */ - continue; - } - - /* Save new contents */ - old_aa[x] = na; - old_cc[x] = nc; - - old_taa[x] = nta; - old_tcc[x] = ntc; - - old_eaa[x] = nea; - old_ecc[x] = nec; - - /* 2nd byte of bigtile */ - if (na == 255) continue; - - /* Handle high-bit attr/chars */ - if (na & 0x80) - { - /* Flush */ - if (fn) - { - /* Draw pending chars (normal) */ - if (fa || always_text) - { - (void)((*Term->text_hook)(fx, y, fn, fa, &scr_cc[fx])); - } - /* Draw pending chars (black) */ - else - { - (void)((*Term->wipe_hook)(fx, y, fn)); - } - /* Forget */ - fn = 0; - } - - /* Hack -- Draw the special attr/char pair */ - (void)((*Term->pict_hook)(x, y, 1, &na, &nc, &nta, &ntc, &nea, &nec)); - - /* Skip */ - continue; - } - - /* Notice new color */ - if (fa != na) - { - /* Flush */ - if (fn) - { - /* Draw the pending chars */ - if (fa || always_text) - { - (void)((*Term->text_hook)(fx, y, fn, fa, &scr_cc[fx])); - } - /* Hack -- Erase "leading" spaces */ - else - { - (void)((*Term->wipe_hook)(fx, y, fn)); - } - /* Forget */ - fn = 0; - } - - /* Save the new color */ - fa = na; - } - - /* Restart and Advance */ - if (fn++ == 0) fx = x; - } - - /* Flush */ - if (fn) - { - /* Draw pending chars (normal) */ - if (fa || always_text) - { - (void)((*Term->text_hook)(fx, y, fn, fa, &scr_cc[fx])); - } - /* Draw pending chars (black) */ - else - { - (void)((*Term->wipe_hook)(fx, y, fn)); - } - } -} - - /* * Flush a row of the current window (see "Term_fresh") * @@ -1152,16 +622,6 @@ static void Term_fresh_row_text(int y, int x1, int x2) * flag is set, and "Term_xtra(TERM_XTRA_FRESH,0)" will be called after * all of the rows have been "flushed". * - * Note the use of three different functions to handle the actual flush, - * based on the settings of the "Term->always_pict" and "Term->higher_pict" - * flags (see below). - * - * The three helper functions (above) work by collecting similar adjacent - * grids into stripes, and then sending each stripe to "Term->pict_hook", - * "Term->text_hook", or "Term->wipe_hook", based on the settings of the - * "Term->always_pict" and "Term->higher_pict" flags, which select which - * of the helper functions to call to flush each row. - * * The helper functions currently "skip" any grids which already contain * the desired contents. This may or may not be the best method, especially * when the desired content fits nicely into the current stripe. For example, @@ -1184,18 +644,6 @@ static void Term_fresh_row_text(int y, int x1, int x2) * and situations in which two grids in the same row are changed, but * the grids between them are unchanged. * - * If the "Term->always_pict" flag is set, then "Term_fresh_row_pict()" - * will be used instead of "Term_fresh_row_text()". This allows all the - * modified grids to be collected into stripes of attr/char pairs, which - * are then sent to the "Term->pict_hook" hook, which can draw these pairs - * in whatever way it would like. - * - * If the "Term->higher_pict" flag is set, then "Term_fresh_row_both()" - * will be used instead of "Term_fresh_row_text()". This allows all the - * "special" attr/char pairs (in which both the attr and char have the - * high-bit set) to be sent (one pair at a time) to the "Term->pict_hook" - * hook, which can draw these pairs in whatever way it would like. - * * Normally, the "Term_wipe()" function is used only to display "blanks" * that were induced by "Term_clear()" or "Term_erase()", and then only * if the "attr_blank" and "char_blank" fields have not been redefined @@ -1208,10 +656,6 @@ static void Term_fresh_row_text(int y, int x1, int x2) * drawn in the color "black", to be explicitly drawn. This is useful * for machines which implement "Term_wipe()" by just drawing spaces. * - * Note that the "Term->always_pict" flag will disable the use of the - * "Term_wipe()" function entirely, and force everything, even text - * drawn in the attr "black", to be explicitly drawn. - * * Note that if no "black" text is ever drawn, and if "attr_blank" is * not "zero", then the "Term_wipe" hook will never be used, even if * the "Term->always_text" flag is not set. @@ -1273,7 +717,6 @@ errr Term_fresh(void) if (!Term->curs_hook) Term->curs_hook = Term_curs_hack; if (!Term->wipe_hook) Term->wipe_hook = Term_wipe_hack; if (!Term->text_hook) Term->text_hook = Term_text_hack; - if (!Term->pict_hook) Term->pict_hook = Term_pict_hack; /* Handle "total erase" */ @@ -1294,25 +737,12 @@ errr Term_fresh(void) byte *aa = old->a[y]; char *cc = old->c[y]; - byte *taa = old->ta[y]; - char *tcc = old->tc[y]; - - byte *eaa = old->ea[y]; - char *ecc = old->ec[y]; - - /* Wipe each column */ for (x = 0; x < w; x++) { /* Wipe each grid */ *aa++ = na; *cc++ = nc; - - *taa++ = na; - *tcc++ = nc; - - *eaa++ = na; - *ecc++ = nc; } } @@ -1347,32 +777,8 @@ errr Term_fresh(void) byte oa = old_aa[tx]; char oc = old_cc[tx]; - byte *old_taa = old->ta[ty]; - char *old_tcc = old->tc[ty]; - - byte ota = old_taa[tx]; - char otc = old_tcc[tx]; - - byte *old_eaa = old->ea[ty]; - char *old_ecc = old->ec[ty]; - - byte oea = old_eaa[tx]; - char oec = old_ecc[tx]; - - /* Hack -- use "Term_pict()" always */ - if (Term->always_pict) - { - (void)((*Term->pict_hook)(tx, ty, 1, &oa, &oc, &ota, &otc, &oea, &oec)); - } - - /* Hack -- use "Term_pict()" sometimes */ - else if (Term->higher_pict && (oa & 0x80)) - { - (void)((*Term->pict_hook)(tx, ty, 1, &oa, &oc, &ota, &otc, &oea, &oec)); - } - /* Hack -- restore the actual character */ - else if (oa || Term->always_text) + if (oa || Term->always_text) { (void)((*Term->text_hook)(tx, ty, 1, oa, &oc)); } @@ -1425,26 +831,8 @@ errr Term_fresh(void) /* Flush each "modified" row */ if (x1 <= x2) { - /* Always use "Term_pict()" */ - if (Term->always_pict) - { - /* Flush the row */ - Term_fresh_row_pict(y, x1, x2); - } - - /* Sometimes use "Term_pict()" */ - else if (Term->higher_pict) - { - /* Flush the row */ - Term_fresh_row_both(y, x1, x2); - } - - /* Never use "Term_pict()" */ - else - { - /* Flush the row */ - Term_fresh_row_text(y, x1, x2); - } + /* Flush the row */ + Term_fresh_row_text(y, x1, x2); /* This row is all done */ Term->x1[y] = w; @@ -1587,7 +975,7 @@ errr Term_draw(int x, int y, byte a, char c) if (!c) return ( -2); /* Queue it for later */ - Term_queue_char(x, y, a, c, 0, 0, 0, 0); + Term_queue_char(x, y, a, c); /* Success */ return (0); @@ -1621,7 +1009,7 @@ errr Term_addch(byte a, char c) if (!c) return ( -2); /* Queue the given character for display */ - Term_queue_char(Term->scr->cx, Term->scr->cy, a, c, 0, 0, 0, 0); + Term_queue_char(Term->scr->cx, Term->scr->cy, a, c); /* Advance the cursor */ Term->scr->cx++; @@ -1746,12 +1134,6 @@ errr Term_erase(int x, int y, int n) byte *scr_aa; char *scr_cc; - byte *scr_taa; - char *scr_tcc; - - byte *scr_eaa; - char *scr_ecc; - /* Place cursor */ if (Term_gotoxy(x, y)) return ( -1); @@ -1762,12 +1144,6 @@ errr Term_erase(int x, int y, int n) scr_aa = Term->scr->a[y]; scr_cc = Term->scr->c[y]; - scr_taa = Term->scr->ta[y]; - scr_tcc = Term->scr->tc[y]; - - scr_eaa = Term->scr->ea[y]; - scr_ecc = Term->scr->ec[y]; - if (n > 0 && (byte)scr_cc[x] == 255 && scr_aa[x] == 255) { x--; @@ -1787,12 +1163,6 @@ errr Term_erase(int x, int y, int n) scr_aa[x] = na; scr_cc[x] = nc; - scr_taa[x] = 0; - scr_tcc[x] = 0; - - scr_eaa[x] = 0; - scr_ecc[x] = 0; - /* Track minimum changed column */ if (x1 < 0) x1 = x; @@ -1844,23 +1214,11 @@ errr Term_clear(void) byte *scr_aa = Term->scr->a[y]; char *scr_cc = Term->scr->c[y]; - byte *scr_taa = Term->scr->ta[y]; - char *scr_tcc = Term->scr->tc[y]; - - byte *scr_eaa = Term->scr->ea[y]; - char *scr_ecc = Term->scr->ec[y]; - /* Wipe each column */ for (x = 0; x < w; x++) { scr_aa[x] = na; scr_cc[x] = nc; - - scr_taa[x] = 0; - scr_tcc[x] = 0; - - scr_eaa[x] = 0; - scr_ecc[x] = 0; } /* This row has changed */ @@ -2309,8 +1667,7 @@ errr Term_resize(int w, int h) /* Ignore non-changes */ - if ((Term->wid == w) && (Term->hgt == h) && (arg_bigtile == use_bigtile)) return (1); - use_bigtile = arg_bigtile; + if ((Term->wid == w) && (Term->hgt == h)) return (1); /* Minimum dimensions */ wid = MIN(Term->wid, w); diff --git a/src/z-term.h b/src/z-term.h index 7b739ab7..8a6ed3a0 100644 --- a/src/z-term.h +++ b/src/z-term.h @@ -46,18 +46,6 @@ struct term_win byte *va; char *vc; - byte **ta; - char **tc; - - byte *vta; - char *vtc; - - byte **ea; - char **ec; - - byte *vea; - char *vec; - }; @@ -86,12 +74,6 @@ struct term_win * - Flag "soft_cursor" * This "term" uses a "software" cursor * - * - Flag "always_pict" - * Use the "Term_pict()" routine for all text - * - * - Flag "higher_pict" - * Use the "Term_pict()" routine for special text - * * - Flag "always_text" * Use the "Term_text()" routine for invisible text * @@ -161,8 +143,6 @@ struct term bool_ fixed_shape; bool_ icky_corner; bool_ soft_cursor; - bool_ always_pict; - bool_ higher_pict; bool_ always_text; bool_ never_bored; bool_ never_frosh; @@ -202,8 +182,6 @@ struct term void (*resize_hook)(void); - errr (*pict_hook)(int x, int y, int n, const byte *ap, const char *cp, const byte *tap, const char *tcp, const byte *eap, const char *ecp); - }; @@ -256,8 +234,7 @@ extern term *Term; extern errr Term_xtra(int n, int v); extern long Term_xtra_long; -extern void Term_queue_char(int x, int y, byte a, char c, byte ta, char tc, byte ea, char ec); -extern void Term_queue_line(int x, int y, int n, byte *a, char *c, byte *ta, char *tc, byte *ea, char *ec); +extern void Term_queue_char(int x, int y, byte a, char c); extern void Term_queue_chars(int x, int y, int n, byte a, cptr s); extern errr Term_fresh(void); |