--- src-orig/defines.h Tue Dec 31 14:03:06 2002 +++ src/defines.h Tue Jan 14 00:46:10 2003 @@ -700,6 +700,9 @@ #define ROW_DEPTH (Term->hgt - 1) #define COL_DEPTH 70 /* "Lev NNN" / "NNNN ft" */ +#define ROW_EXP_BAR (Term->hgt - 1) +#define COL_EXP_BAR 78 /* [***********-------] */ + #define ROW_MAP 1 #define COL_MAP 13 --- src-orig/xtra1.c Mon Dec 30 11:33:20 2002 +++ src/xtra1.c Tue Jan 14 01:55:37 2003 @@ -317,6 +317,58 @@ } /* + * Prints experience point graphical bar + */ +static void prt_exp_bar(void) +{ + int len, i; + byte attr = ((p_ptr->exp >= p_ptr->max_exp) ? TERM_L_GREEN : TERM_YELLOW); + + len = Term->wid - 80; + + if (len) + { + int exp_this, exp_next, exp_step, exp_cur_pos, exp_max_pos; + + if (p_ptr->lev <= 1) + { + exp_this = 0; + } + else + { + exp_this = (long)(player_exp[p_ptr->lev - 2] * p_ptr->expfact / 100L); + } + exp_next = (long)(player_exp[p_ptr->lev - 1] * p_ptr->expfact / 100L); + + /* Calculate how many 1/100 exp points necessary for a '*' */ + exp_step = exp_next - exp_this; + exp_step = (100 * exp_step) / len; + + /* Where does the current EXP end? */ + exp_cur_pos = ((p_ptr->exp - exp_this) * 100) / exp_step; + exp_max_pos = ((p_ptr->max_exp - exp_this) * 100) / exp_step; + + c_put_str(TERM_WHITE, "[", ROW_EXP_BAR, COL_EXP_BAR + 0); + for (i = 1; i <= len; i++) + { + if (i <= exp_cur_pos) + { + c_put_str(attr, "*", ROW_EXP_BAR, COL_EXP_BAR + i); + } + else if (i <= exp_max_pos) + { + c_put_str(TERM_SLATE, "*", ROW_EXP_BAR, COL_EXP_BAR + i); + } + else + { + c_put_str(TERM_SLATE, "-", ROW_EXP_BAR, COL_EXP_BAR + i); + } + } + c_put_str(TERM_WHITE, "]", ROW_EXP_BAR, COL_EXP_BAR + len + 1); + } +} + +/* * Prints status of hunger */ static void prt_hunger(void) @@ -830,6 +882,9 @@ /* Current depth */ prt_depth(); + + /* Experience bar */ + prt_exp_bar(); /* Equippy chars */ prt_equippy(); @@ -3125,6 +3180,7 @@ { p_ptr->redraw &= ~(PR_EXP); prt_exp(); + prt_exp_bar(); } if (p_ptr->redraw & (PR_STATS))