/** * Redraw the screen * * This command performs various low level updates, clears all the "extra" * windows, does a total redraw of the main window, and requests all of the * interesting updates and redraws that I can think of. * * This command is also used to "instantiate" the results of the user * selecting various things, such as graphics mode, so it must call * the "TERM_XTRA_REACT" hook before redrawing the windows. * */ void do_cmd_redraw(void) { int j; term *old = Term; /* Low level flush */ Term_flush(); /* Reset "inkey()" */ event_signal(EVENT_INPUT_FLUSH); if (character_dungeon) verify_panel(); /* Hack -- React to changes */ Term_xtra(TERM_XTRA_REACT, 0); if (character_dungeon) { /* Combine the pack (later) */ player->upkeep->notice |= (PN_COMBINE); /* Update torch, gear */ player->upkeep->update |= (PU_TORCH | PU_INVEN); /* Update stuff */ player->upkeep->update |= (PU_BONUS | PU_HP | PU_SPELLS); /* Fully update the visuals */ player->upkeep->update |= (PU_FORGET_VIEW | PU_UPDATE_VIEW | PU_MONSTERS); /* Redraw everything */ player->upkeep->redraw |= (PR_BASIC | PR_EXTRA | PR_MAP | PR_INVEN | PR_EQUIP | PR_MESSAGE | PR_MONSTER | PR_OBJECT | PR_MONLIST | PR_ITEMLIST); } /* Clear screen */ Term_clear(); if (character_dungeon) { /* Hack -- update */ handle_stuff(player); /* Place the cursor on the player */ if (0 != character_dungeon) move_cursor_relative(player->px, player->py); } /* Redraw every window */ for (j = 0; j < ANGBAND_TERM_MAX; j++) { if (!angband_term[j]) continue; Term_activate(angband_term[j]); Term_redraw(); Term_fresh(); Term_activate(old); } }
/** * Load the screen, and decrease the "icky" depth. */ void screen_load(void) { event_signal(EVENT_MESSAGE_FLUSH); Term_load(); screen_save_depth--; /* Redraw big graphics */ if (screen_save_depth == 0 && (tile_width > 1 || tile_height > 1)) Term_redraw(); }
static void colors_pref_load(const char *title, int row) { /* Ask for and load a user pref file */ do_cmd_pref_file_hack(8); /* XXX should probably be a cleaner way to tell UI about * colour changes - how about doing this in the pref file * loading code too? */ Term_xtra(TERM_XTRA_REACT, 0); Term_redraw(); }
/* * Load the screen, and decrease the "icky" depth. * * This function must match exactly one call to "screen_save()". */ void screen_load(void) { /* Hack -- Flush messages */ message_flush(); /* Load the screen (if legal) */ Term_load(); /* Decrease "icky" depth */ character_icky--; /* Mega hack -redraw big graphics - sorry NRM */ if (character_icky == 0 && (tile_width > 1 || tile_height > 1)) Term_redraw(); }
/* * Do a redraw */ static void react_redraw(Widget widget, XtPointer client_data, XtPointer call_data) { term_data *old_td = (term_data*)(Term->data); term_data *td = (term_data*)client_data; /* Activate the proper Term */ Term_activate(&td->t); /* Request a redraw */ Term_redraw(); /* Activate the old Term */ Term_activate(&old_td->t); }
/** * Redraw a term when it is resized */ void redraw_window(void) { /* Only if the dungeon exists */ if (!character_dungeon) return; /* Hack - Activate term zero for the redraw */ Term_activate(&term_screen[0]); /* Hack -- react to changes */ Term_xtra(TERM_XTRA_REACT, 0); /* Hack -- update */ handle_stuff(p_ptr); /* Redraw */ Term_redraw(); /* Refresh */ Term_fresh(); }
/* * Handle signals -- suspend * * Actually suspend the game, and then resume cleanly */ static void handle_signal_suspend(int sig) { /* Protect errno from library calls in signal handler */ int save_errno = errno; /* Disable handler */ (void)(*signal_aux)(sig, SIG_IGN); #ifdef SIGSTOP /* Flush output */ Term_fresh(); /* Suspend the "Term" */ Term_xtra(TERM_XTRA_ALIVE, 0); /* Suspend ourself */ (void)kill(0, SIGSTOP); /* Resume the "Term" */ Term_xtra(TERM_XTRA_ALIVE, 1); /* Redraw the term */ Term_redraw(); /* Flush the term */ Term_fresh(); #endif /* Restore handler */ (void)(*signal_aux)(sig, handle_signal_suspend); /* Restore errno */ errno = save_errno; }
static void colors_modify(const char *title, int row) { int i; static byte a = 0; /* Prompt */ prt("Command: Modify colors", 8, 0); /* Hack -- query until done */ while (1) { const char *name; char index; struct keypress cx; /* Clear */ clear_from(10); /* Exhibit the normal colors */ for (i = 0; i < BASIC_COLORS; i++) { /* Exhibit this color */ Term_putstr(i*3, 20, -1, a, "##"); /* Exhibit character letter */ Term_putstr(i*3, 21, -1, (byte)i, format(" %c", color_table[i].index_char)); /* Exhibit all colors */ Term_putstr(i*3, 22, -1, (byte)i, format("%2d", i)); } /* Describe the color */ name = ((a < BASIC_COLORS) ? color_table[a].name : "undefined"); index = ((a < BASIC_COLORS) ? color_table[a].index_char : '?'); /* Describe the color */ Term_putstr(5, 10, -1, COLOUR_WHITE, format("Color = %d, Name = %s, Index = %c", a, name, index)); /* Label the Current values */ Term_putstr(5, 12, -1, COLOUR_WHITE, format("K = 0x%02x / R,G,B = 0x%02x,0x%02x,0x%02x", angband_color_table[a][0], angband_color_table[a][1], angband_color_table[a][2], angband_color_table[a][3])); /* Prompt */ Term_putstr(0, 14, -1, COLOUR_WHITE, "Command (n/N/k/K/r/R/g/G/b/B): "); /* Get a command */ cx = inkey(); /* All done */ if (cx.code == ESCAPE) break; /* Analyze */ if (cx.code == 'n') a = (byte)(a + 1); if (cx.code == 'N') a = (byte)(a - 1); if (cx.code == 'k') angband_color_table[a][0] = (byte)(angband_color_table[a][0] + 1); if (cx.code == 'K') angband_color_table[a][0] = (byte)(angband_color_table[a][0] - 1); if (cx.code == 'r') angband_color_table[a][1] = (byte)(angband_color_table[a][1] + 1); if (cx.code == 'R') angband_color_table[a][1] = (byte)(angband_color_table[a][1] - 1); if (cx.code == 'g') angband_color_table[a][2] = (byte)(angband_color_table[a][2] + 1); if (cx.code == 'G') angband_color_table[a][2] = (byte)(angband_color_table[a][2] - 1); if (cx.code == 'b') angband_color_table[a][3] = (byte)(angband_color_table[a][3] + 1); if (cx.code == 'B') angband_color_table[a][3] = (byte)(angband_color_table[a][3] - 1); /* Hack -- react to changes */ Term_xtra(TERM_XTRA_REACT, 0); /* Hack -- redraw */ Term_redraw(); } }
/* * Query the dungeon */ static void do_cmd_wiz_query(void) { int py = p_ptr->py; int px = p_ptr->px; int y, x; struct keypress cmd; u16b mask = 0x00; /* Get a "debug command" */ if (!get_com("Debug Command Query: ", &cmd)) return; /* Extract a flag */ switch (cmd.code) { case '0': mask = (1 << 0); break; case '1': mask = (1 << 1); break; case '2': mask = (1 << 2); break; case '3': mask = (1 << 3); break; case '4': mask = (1 << 4); break; case '5': mask = (1 << 5); break; case '6': mask = (1 << 6); break; case '7': mask = (1 << 7); break; case 'm': mask |= (CAVE_MARK); break; case 'g': mask |= (CAVE_GLOW); break; case 'r': mask |= (CAVE_ROOM); break; case 'i': mask |= (CAVE_VAULT); break; case 's': mask |= (CAVE_SEEN); break; case 'v': mask |= (CAVE_VIEW); break; case 't': mask |= (CAVE_WASSEEN); break; case 'w': mask |= (CAVE_WALL); break; } /* Scan map */ for (y = Term->offset_y; y < Term->offset_y + SCREEN_HGT; y++) { for (x = Term->offset_x; x < Term->offset_x + SCREEN_WID; x++) { byte a = TERM_RED; if (!cave_in_bounds_fully(cave, y, x)) continue; /* Given mask, show only those grids */ if (mask && !(cave->info[y][x] & mask)) continue; /* Given no mask, show unknown grids */ if (!mask && (cave->info[y][x] & (CAVE_MARK))) continue; /* Color */ if (cave_ispassable(cave, y, x)) a = TERM_YELLOW; /* Display player/floors/walls */ if ((y == py) && (x == px)) print_rel(L'@', a, y, x); else if (cave_ispassable(cave, y, x)) print_rel(L'*', a, y, x); else print_rel(L'#', a, y, x); } } Term_redraw(); /* Get keypress */ msg("Press any key."); inkey_ex(); message_flush(); /* Redraw map */ prt_map(); }
/* * Hack -- redraw the screen * * This command performs various low level updates, clears all the "extra" * windows, does a total redraw of the main window, and requests all of the * interesting updates and redraws that I can think of. * * This command is also used to "instantiate" the results of the user * selecting various things, such as graphics mode, so it must call * the "TERM_XTRA_REACT" hook before redrawing the windows. */ void do_cmd_redraw(void) { s32b j; term *old = Term; /* Hack -- react to changes */ Term_xtra(TERM_XTRA_REACT, 0); /* Combine and Reorder the pack (later) */ p_ptr->notice |= (PN_COMBINE | PN_REORDER); /* Update torch */ p_ptr->update |= (PU_TORCH); /* Update stuff */ p_ptr->update |= (PU_BONUS | PU_HP | PU_MANA | PU_SPELLS | PU_POWERS | PU_SANITY | PU_BODY); /* Forget view */ p_ptr->update |= (PU_UN_VIEW); /* Update view */ p_ptr->update |= (PU_VIEW); /* Update monster light */ p_ptr->update |= (PU_MON_LITE); /* Update monsters */ p_ptr->update |= (PU_MONSTERS); /* Redraw everything */ flag_bool(&p_ptr->redraw, FLAG_PR_WIPE); flag_bool(&p_ptr->redraw, FLAG_PR_BASIC); flag_bool(&p_ptr->redraw, FLAG_PR_EXTRA); flag_bool(&p_ptr->redraw, FLAG_PR_MAP); /* Window stuff */ flag_bool(&p_ptr->window, FLAG_PW_ALL); /* Hack -- update */ handle_stuff(); /* Redraw every window */ for (j = 0; j < 8; j++) { /* Dead window */ if (!angband_term[j]) continue; /* Activate */ Term_activate(angband_term[j]); /* Redraw */ Term_redraw(); /* Refresh */ Term_fresh(); /* Restore */ Term_activate(old); } }
/* * Interact with "colors" */ void do_cmd_colors(void) { s32b i; PHYSFS_file *fff; char tmp[160]; char buf[1024]; /* Enter "icky" mode */ character_icky++; /* Save the screen */ Term_save(); /* Interact until done */ while (1) { /* Clear screen */ Term_clear(); /* Ask for a choice */ prt("Interact with Colors", 2, 0); /* Give some choices */ prt("(1) Load a user pref file", 4, 5); #ifdef ALLOW_COLORS prt("(2) Dump colors", 5, 5); prt("(3) Modify colors", 6, 5); # ifdef SUPPORT_GAMMA prt("(4) Gamma correction", 7, 5); # endif /* SUPPORT_GAMMA */ #endif /* Prompt */ prt("Command: ", 8, 0); /* Prompt */ i = inkey(); /* Done */ if (i == ESCAPE) break; /* Load a 'pref' file */ if (i == '1') { /* Prompt */ prt("Command: Load a user pref file", 8, 0); /* Prompt */ prt("File: ", 10, 0); /* Default file */ strnfmt(tmp, 160, "user-%s.prf", ANGBAND_SYS); /* Query */ if (!askfor_aux(tmp, 70)) continue; /* Process the given filename */ (void)process_pref_file(tmp); /* Mega-Hack -- react to changes */ Term_xtra(TERM_XTRA_REACT, 0); /* Mega-Hack -- redraw */ Term_redraw(); } #ifdef ALLOW_COLORS /* Dump colors */ else if (i == '2') { /* Prompt */ prt("Command: Dump colors", 8, 0); /* Prompt */ prt("File: ", 10, 0); /* Default filename */ strnfmt(tmp, 160, "user-%s.prf", ANGBAND_SYS); /* Get a filename */ if (!askfor_aux(tmp, 70)) continue; /* Build the filename */ path_build(buf, 1024, TENGINE_DIR_USER, tmp); /* Append to the file */ fff = my_fopen(buf, "a"); /* Failure */ if (!fff) continue; /* Start dumping */ fprintf(fff, "\n\n"); fprintf(fff, "# Color redefinitions\n\n"); /* Dump colors */ for (i = 0; i < 256; i++) { s32b kv = angband_color_table[i][0]; s32b rv = angband_color_table[i][1]; s32b gv = angband_color_table[i][2]; s32b bv = angband_color_table[i][3]; cptr name = "unknown"; /* Skip non-entries */ if (!kv && !rv && !gv && !bv) continue; /* Extract the color name */ name = color_names[i]; /* Dump a comment */ fprintf(fff, "# Color '%s'\n", name); /* Dump the monster attr/char info */ fprintf(fff, "V:%d:0x%02X:0x%02X:0x%02X:0x%02X\n\n", i, kv, rv, gv, bv); } /* All done */ fprintf(fff, "\n\n\n\n"); /* Close */ my_fclose(fff); /* Message */ msg_print("Dumped color redefinitions."); } /* Edit colors */ else if (i == '3') { static byte a = 0; /* Prompt */ prt("Command: Modify colors", 8, 0); /* Hack -- query until done */ while (1) { cptr name; /* Clear */ clear_from(10); /* Exhibit the normal colors */ for (i = 0; i < 16; i++) { /* Exhibit this color */ Term_putstr(i*4, 20, -1, a, "###"); /* Exhibit all colors */ Term_putstr(i*4, 22, -1, i, format("%3d", i)); } /* Describe the color */ name = ((color_names[a]) ? color_names[a] : "undefined"); /* Describe the color */ Term_putstr(5, 10, -1, TERM_WHITE, format("Color = %d, Name = %s", a, name)); /* Label the Current values */ Term_putstr(5, 12, -1, TERM_WHITE, format("K = 0x%02x / R,G,B = 0x%02x,0x%02x,0x%02x", angband_color_table[a][0], angband_color_table[a][1], angband_color_table[a][2], angband_color_table[a][3])); /* Prompt */ Term_putstr(0, 14, -1, TERM_WHITE, "Command (n/N/k/K/r/R/g/G/b/B): "); /* Get a command */ i = inkey(); /* All done */ if (i == ESCAPE) break; /* Analyze */ if (i == 'n') a = (byte)(a + 1); if (i == 'N') a = (byte)(a - 1); if (i == 'k') angband_color_table[a][0] = (byte)(angband_color_table[a][0] + 1); if (i == 'K') angband_color_table[a][0] = (byte)(angband_color_table[a][0] - 1); if (i == 'r') angband_color_table[a][1] = (byte)(angband_color_table[a][1] + 1); if (i == 'R') angband_color_table[a][1] = (byte)(angband_color_table[a][1] - 1); if (i == 'g') angband_color_table[a][2] = (byte)(angband_color_table[a][2] + 1); if (i == 'G') angband_color_table[a][2] = (byte)(angband_color_table[a][2] - 1); if (i == 'b') angband_color_table[a][3] = (byte)(angband_color_table[a][3] + 1); if (i == 'B') angband_color_table[a][3] = (byte)(angband_color_table[a][3] - 1); /* Hack -- react to changes */ Term_xtra(TERM_XTRA_REACT, 0); /* Hack -- redraw */ Term_redraw(); } } # ifdef SUPPORT_GAMMA /* Gamma correction */ else if (i == '4') { s32b gamma; /* Prompt */ prt("Command: Gamma correction", 8, 0); /* gamma_val isn't set - assume 1.0 */ if (gamma_val == 0) gamma = 10; /* It's set - convert to usual notation (times 10) */ else gamma = 2560 / gamma_val; /* Hack -- query until done */ while (1) { /* Clear */ clear_from(10); /* Exhibit the normal colors */ for (i = 0; i < 16; i++) { /* Exhibit all colors */ Term_putstr(i*4, 22, -1, i, format("%3d", i)); } /* Describe the gamma */ Term_putstr(5, 10, -1, TERM_WHITE, format("Gamma = %d.%d", gamma / 10, gamma % 10)); /* Prompt */ Term_putstr(0, 12, -1, TERM_WHITE, "Command (g/G): "); /* Get a command */ i = inkey(); /* All done */ if (i == ESCAPE) break; /* Analyze */ if (i == 'g') gamma = (byte)(gamma + 1); else if (i == 'G') gamma = (byte)(gamma - 1); else continue; /* Force limits ([1.0, 2.5]) */ if (gamma < 10) gamma = 10; if (gamma > 25) gamma = 25; /* Hack - 1.0 means no correction */ if (gamma == 10) gamma_val = 0; /* otherwise, calculate gamma_val */ else gamma_val = 2560 / gamma; /* Hack -- react to changes */ Term_xtra(TERM_XTRA_REACT, 0); /* Hack -- redraw */ Term_redraw(); } } # endif /* SUPPORT_GAMMA */ #endif /* Unknown option */ else { bell(); } /* Flush messages */ msg_print(NULL); } /* Restore the screen */ Term_load(); /* Leave "icky" mode */ character_icky--; }