void ghack_status_window_update_stats() { char buf[BUFSZ]; gchar *buf1; const char *hung; const char *enc; static int firstTime = TRUE; long umoney; /* First, fill in the player name and the dungeon level */ strcpy(buf, plname); if ('a' <= buf[0] && buf[0] <= 'z') buf[0] += 'A' - 'a'; strcat(buf, " the "); if (u.mtimedone) { char mname[BUFSZ]; int k = 0; strcpy(mname, mons[u.umonnum].mname); while (mname[k] != 0) { if ((k == 0 || (k > 0 && mname[k - 1] == ' ')) && 'a' <= mname[k] && mname[k] <= 'z') { mname[k] += 'A' - 'a'; } k++; } strcat(buf, mname); } else { strcat(buf, rank_of(u.ulevel, pl_character[0], flags.female)); } gtk_label_get(GTK_LABEL(titleLabel), &buf1); if (strcmp(buf1, buf) != 0 && firstTime == FALSE) { /* Ok, this changed so add it to the highlighing list */ ghack_highlight_widget(titleLabel, bigStyle, bigGreenStyle); } gtk_label_set(GTK_LABEL(titleLabel), buf); if (In_endgame(&u.uz)) { strcpy(buf, (Is_astralevel(&u.uz) ? "Astral Plane" : "End Game")); } else { sprintf(buf, "%s, level %d", dungeons[u.uz.dnum].dname, depth(&u.uz)); } if (lastDepth > depth(&u.uz) && firstTime == FALSE) { /* Ok, this changed so add it to the highlighing list */ ghack_highlight_widget(dgnLevelLabel, bigStyle, bigRedStyle); } else if (lastDepth < depth(&u.uz) && firstTime == FALSE) { /* Ok, this changed so add it to the highlighing list */ ghack_highlight_widget(dgnLevelLabel, bigStyle, bigGreenStyle); } lastDepth = depth(&u.uz); gtk_label_set(GTK_LABEL(dgnLevelLabel), buf); /* Next, fill in the player's stats */ if (ACURR(A_STR) > 118) { sprintf(buf, "STR:%d", ACURR(A_STR) - 100); } else if (ACURR(A_STR) == 118) { sprintf(buf, "STR:18/**"); } else if (ACURR(A_STR) > 18) { sprintf(buf, "STR:18/%02d", ACURR(A_STR) - 18); } else { sprintf(buf, "STR:%d", ACURR(A_STR)); } if (lastStr < ACURR(A_STR) && firstTime == FALSE) { /* Ok, this changed so add it to the highlighing list */ ghack_highlight_widget(strLabel, normalStyle, greenStyle); } else if (lastStr > ACURR(A_STR) && firstTime == FALSE) { /* Ok, this changed so add it to the highlighing list */ ghack_highlight_widget(strLabel, normalStyle, redStyle); } lastStr = ACURR(A_STR); gtk_label_set(GTK_LABEL(strLabel), buf); sprintf(buf, "INT:%d", ACURR(A_INT)); if (lastInt < ACURR(A_INT) && firstTime == FALSE) { /* Ok, this changed so add it to the highlighing list */ ghack_highlight_widget(intLabel, normalStyle, greenStyle); } else if (lastInt > ACURR(A_INT) && firstTime == FALSE) { /* Ok, this changed so add it to the highlighing list */ ghack_highlight_widget(intLabel, normalStyle, redStyle); } lastInt = ACURR(A_INT); gtk_label_set(GTK_LABEL(intLabel), buf); sprintf(buf, "WIS:%d", ACURR(A_WIS)); if (lastWis < ACURR(A_WIS) && firstTime == FALSE) { /* Ok, this changed so add it to the highlighing list */ ghack_highlight_widget(wisLabel, normalStyle, greenStyle); } else if (lastWis > ACURR(A_WIS) && firstTime == FALSE) { /* Ok, this changed so add it to the highlighing list */ ghack_highlight_widget(wisLabel, normalStyle, redStyle); } lastWis = ACURR(A_WIS); gtk_label_set(GTK_LABEL(wisLabel), buf); sprintf(buf, "DEX:%d", ACURR(A_DEX)); if (lastDex < ACURR(A_DEX) && firstTime == FALSE) { /* Ok, this changed so add it to the highlighing list */ ghack_highlight_widget(dexLabel, normalStyle, greenStyle); } else if (lastDex > ACURR(A_DEX) && firstTime == FALSE) { /* Ok, this changed so add it to the highlighing list */ ghack_highlight_widget(dexLabel, normalStyle, redStyle); } lastDex = ACURR(A_DEX); gtk_label_set(GTK_LABEL(dexLabel), buf); sprintf(buf, "CON:%d", ACURR(A_CON)); if (lastCon < ACURR(A_CON) && firstTime == FALSE) { /* Ok, this changed so add it to the highlighing list */ ghack_highlight_widget(conLabel, normalStyle, greenStyle); } else if (lastCon > ACURR(A_CON) && firstTime == FALSE) { /* Ok, this changed so add it to the highlighing list */ ghack_highlight_widget(conLabel, normalStyle, redStyle); } lastCon = ACURR(A_CON); gtk_label_set(GTK_LABEL(conLabel), buf); sprintf(buf, "CHA:%d", ACURR(A_CHA)); if (lastCha < ACURR(A_CHA) && firstTime == FALSE) { /* Ok, this changed so add it to the highlighing list */ ghack_highlight_widget(chaLabel, normalStyle, greenStyle); } else if (lastCha > ACURR(A_CHA) && firstTime == FALSE) { /* Ok, this changed so add it to the highlighing list */ ghack_highlight_widget(chaLabel, normalStyle, redStyle); } lastCha = ACURR(A_CHA); gtk_label_set(GTK_LABEL(chaLabel), buf); /* Now do the non-pixmaped stats (gold and such) */ umoney = money_cnt(invent); sprintf(buf, "Au:%ld", umoney); if (lastAu < umoney && firstTime == FALSE) { /* Ok, this changed so add it to the highlighing list */ ghack_highlight_widget(goldLabel, normalStyle, greenStyle); } else if (lastAu > umoney && firstTime == FALSE) { /* Ok, this changed so add it to the highlighing list */ ghack_highlight_widget(goldLabel, normalStyle, redStyle); } lastAu = umoney; gtk_label_set(GTK_LABEL(goldLabel), buf); if (u.mtimedone) { /* special case: when polymorphed, show "HD", disable exp */ sprintf(buf, "HP:%d/%d", ((u.mh > 0) ? u.mh : 0), u.mhmax); if ((lastHP < u.mh || lastMHP < u.mhmax) && firstTime == FALSE) { /* Ok, this changed so add it to the highlighing list */ ghack_highlight_widget(hpLabel, normalStyle, greenStyle); } else if ((lastHP > u.mh || lastMHP > u.mhmax) && firstTime == FALSE) { /* Ok, this changed so add it to the highlighing list */ ghack_highlight_widget(hpLabel, normalStyle, redStyle); } lastHP = u.mh; lastMHP = u.mhmax; } else { sprintf(buf, "HP:%d/%d", ((u.uhp > 0) ? u.uhp : 0), u.uhpmax); if ((lastHP < u.uhp || lastMHP < u.uhpmax) && firstTime == FALSE) { /* Ok, this changed so add it to the highlighing list */ ghack_highlight_widget(hpLabel, normalStyle, greenStyle); } else if ((lastHP > u.uhp || lastMHP > u.uhpmax) && firstTime == FALSE) { /* Ok, this changed so add it to the highlighing list */ ghack_highlight_widget(hpLabel, normalStyle, redStyle); } lastHP = u.uhp; lastMHP = u.uhpmax; } gtk_label_set(GTK_LABEL(hpLabel), buf); if (u.mtimedone) { /* special case: when polymorphed, show "HD", disable exp */ sprintf(buf, "HD:%d", mons[u.umonnum].mlevel); if (lastLevel < mons[u.umonnum].mlevel && firstTime == FALSE) { /* Ok, this changed so add it to the highlighing list */ ghack_highlight_widget(levlLabel, normalStyle, greenStyle); } else if (lastLevel > mons[u.umonnum].mlevel && firstTime == FALSE) { /* Ok, this changed so add it to the highlighing list */ ghack_highlight_widget(levlLabel, normalStyle, redStyle); } lastLevel = mons[u.umonnum].mlevel; } else { sprintf(buf, "Level:%d", u.ulevel); if (lastLevel < u.ulevel && firstTime == FALSE) { /* Ok, this changed so add it to the highlighing list */ ghack_highlight_widget(levlLabel, normalStyle, greenStyle); } else if (lastLevel > u.ulevel && firstTime == FALSE) { /* Ok, this changed so add it to the highlighing list */ ghack_highlight_widget(levlLabel, normalStyle, redStyle); } lastLevel = u.ulevel; } gtk_label_set(GTK_LABEL(levlLabel), buf); sprintf(buf, "Power:%d/%d", u.uen, u.uenmax); if ((lastPOW < u.uen || lastMPOW < u.uenmax) && firstTime == FALSE) { /* Ok, this changed so add it to the highlighing list */ ghack_highlight_widget(powLabel, normalStyle, greenStyle); } if ((lastPOW > u.uen || lastMPOW > u.uenmax) && firstTime == FALSE) { /* Ok, this changed so add it to the highlighing list */ ghack_highlight_widget(powLabel, normalStyle, redStyle); } lastPOW = u.uen; lastMPOW = u.uenmax; gtk_label_set(GTK_LABEL(powLabel), buf); sprintf(buf, "AC:%d", u.uac); if (lastAC > u.uac && firstTime == FALSE) { /* Ok, this changed so add it to the highlighing list */ ghack_highlight_widget(acLabel, normalStyle, greenStyle); } else if (lastAC < u.uac && firstTime == FALSE) { /* Ok, this changed so add it to the highlighing list */ ghack_highlight_widget(acLabel, normalStyle, redStyle); } lastAC = u.uac; gtk_label_set(GTK_LABEL(acLabel), buf); if (flags.showexp) { sprintf(buf, "Exp:%ld", u.uexp); if (lastExp < u.uexp && firstTime == FALSE) { /* Ok, this changed so add it to the highlighing list */ ghack_highlight_widget(expLabel, normalStyle, greenStyle); } else if (lastExp > u.uexp && firstTime == FALSE) { /* Ok, this changed so add it to the highlighing list */ ghack_highlight_widget(expLabel, normalStyle, redStyle); } lastExp = u.uexp; gtk_label_set(GTK_LABEL(expLabel), buf); } else { gtk_label_set(GTK_LABEL(expLabel), ""); } if (flags.time) { sprintf(buf, "Time:%ld", moves); gtk_label_set(GTK_LABEL(timeLabel), buf); } else gtk_label_set(GTK_LABEL(timeLabel), ""); #ifdef SCORE_ON_BOTL if (flags.showscore) { sprintf(buf, "Score:%ld", botl_score()); gtk_label_set(GTK_LABEL(scoreLabel), buf); } else gtk_label_set(GTK_LABEL(scoreLabel), ""); #else { gtk_label_set(GTK_LABEL(scoreLabel), ""); } #endif /* See if their alignment has changed */ if (lastAlignment != u.ualign.type) { if (firstTime == FALSE) { /* Ok, this changed so add it to the highlighing list */ ghack_highlight_widget(alignLabel, normalStyle, redStyle); } lastAlignment = u.ualign.type; /* looks like their alignment has changed -- change out the icon */ if (u.ualign.type == A_CHAOTIC) { gtk_label_set(GTK_LABEL(alignLabel), "Chaotic"); gnome_pixmap_load_xpm_d(GNOME_PIXMAP(alignPix), chaotic_xpm); } else if (u.ualign.type == A_NEUTRAL) { gtk_label_set(GTK_LABEL(alignLabel), "Neutral"); gnome_pixmap_load_xpm_d(GNOME_PIXMAP(alignPix), neutral_xpm); } else { gtk_label_set(GTK_LABEL(alignLabel), "Lawful"); gnome_pixmap_load_xpm_d(GNOME_PIXMAP(alignPix), lawful_xpm); } } hung = hu_stat[u.uhs]; if (lastHungr != u.uhs) { if (firstTime == FALSE) { /* Ok, this changed so add it to the highlighing list */ ghack_highlight_widget(hungerLabel, normalStyle, redStyle); } lastHungr = u.uhs; if (hung[0] == ' ') { gtk_label_set(GTK_LABEL(hungerLabel), " "); gnome_pixmap_load_xpm_d(GNOME_PIXMAP(hungerPix), nothing_xpm); } else if (u.uhs == 0 /* SATIATED */) { gtk_label_set(GTK_LABEL(hungerLabel), hung); gnome_pixmap_load_xpm_d(GNOME_PIXMAP(hungerPix), satiated_xpm); } else { gtk_label_set(GTK_LABEL(hungerLabel), hung); gnome_pixmap_load_xpm_d(GNOME_PIXMAP(hungerPix), hungry_xpm); } } if (lastConf != Confusion) { if (firstTime == FALSE) { /* Ok, this changed so add it to the highlighing list */ ghack_highlight_widget(confuLabel, normalStyle, redStyle); } lastConf = Confusion; if (Confusion) { gtk_label_set(GTK_LABEL(confuLabel), "Confused"); gnome_pixmap_load_xpm_d(GNOME_PIXMAP(confuPix), confused_xpm); } else { gtk_label_set(GTK_LABEL(confuLabel), " "); gnome_pixmap_load_xpm_d(GNOME_PIXMAP(confuPix), nothing_xpm); } } if (lastBlind != Blind) { if (firstTime == FALSE) { /* Ok, this changed so add it to the highlighing list */ ghack_highlight_widget(blindLabel, normalStyle, redStyle); } lastBlind = Blind; if (Blind) { gtk_label_set(GTK_LABEL(blindLabel), "Blind"); gnome_pixmap_load_xpm_d(GNOME_PIXMAP(blindPix), blind_xpm); } else { gtk_label_set(GTK_LABEL(blindLabel), " "); gnome_pixmap_load_xpm_d(GNOME_PIXMAP(blindPix), nothing_xpm); } } if (lastStun != Stunned) { if (firstTime == FALSE) { /* Ok, this changed so add it to the highlighing list */ ghack_highlight_widget(stunLabel, normalStyle, redStyle); } lastStun = Stunned; if (Stunned) { gtk_label_set(GTK_LABEL(stunLabel), "Stun"); gnome_pixmap_load_xpm_d(GNOME_PIXMAP(stunPix), stunned_xpm); } else { gtk_label_set(GTK_LABEL(stunLabel), " "); gnome_pixmap_load_xpm_d(GNOME_PIXMAP(stunPix), nothing_xpm); } } if (lastHalu != Hallucination) { if (firstTime == FALSE) { /* Ok, this changed so add it to the highlighing list */ ghack_highlight_widget(halluLabel, normalStyle, redStyle); } lastHalu = Hallucination; if (Hallucination) { gtk_label_set(GTK_LABEL(halluLabel), "Hallu"); gnome_pixmap_load_xpm_d(GNOME_PIXMAP(halluPix), hallu_xpm); } else { gtk_label_set(GTK_LABEL(halluLabel), " "); gnome_pixmap_load_xpm_d(GNOME_PIXMAP(halluPix), nothing_xpm); } } if (lastSick != Sick) { if (firstTime == FALSE) { /* Ok, this changed so add it to the highlighing list */ ghack_highlight_widget(sickLabel, normalStyle, redStyle); } lastSick = Sick; if (Sick) { if (u.usick_type & SICK_VOMITABLE) { gtk_label_set(GTK_LABEL(sickLabel), "FoodPois"); gnome_pixmap_load_xpm_d(GNOME_PIXMAP(sickPix), sick_fp_xpm); } else if (u.usick_type & SICK_NONVOMITABLE) { gtk_label_set(GTK_LABEL(sickLabel), "Ill"); gnome_pixmap_load_xpm_d(GNOME_PIXMAP(sickPix), sick_il_xpm); } else { gtk_label_set(GTK_LABEL(sickLabel), "FoodPois"); gnome_pixmap_load_xpm_d(GNOME_PIXMAP(sickPix), sick_fp_xpm); } } else { gtk_label_set(GTK_LABEL(sickLabel), " "); gnome_pixmap_load_xpm_d(GNOME_PIXMAP(sickPix), nothing_xpm); } } enc = enc_stat[near_capacity()]; if (lastEncumb != near_capacity()) { if (firstTime == FALSE) { /* Ok, this changed so add it to the highlighing list */ ghack_highlight_widget(encumbLabel, normalStyle, redStyle); } lastEncumb = near_capacity(); switch (lastEncumb) { case 0: gtk_label_set(GTK_LABEL(encumbLabel), " "); gnome_pixmap_load_xpm_d(GNOME_PIXMAP(encumbPix), nothing_xpm); break; case 1: gtk_label_set(GTK_LABEL(encumbLabel), enc); gnome_pixmap_load_xpm_d(GNOME_PIXMAP(encumbPix), slt_enc_xpm); break; case 2: gtk_label_set(GTK_LABEL(encumbLabel), enc); gnome_pixmap_load_xpm_d(GNOME_PIXMAP(encumbPix), mod_enc_xpm); break; case 3: gtk_label_set(GTK_LABEL(encumbLabel), enc); gnome_pixmap_load_xpm_d(GNOME_PIXMAP(encumbPix), hvy_enc_xpm); break; case 4: gtk_label_set(GTK_LABEL(encumbLabel), enc); gnome_pixmap_load_xpm_d(GNOME_PIXMAP(encumbPix), ext_enc_xpm); break; case 5: gtk_label_set(GTK_LABEL(encumbLabel), enc); gnome_pixmap_load_xpm_d(GNOME_PIXMAP(encumbPix), ovr_enc_xpm); } } firstTime = FALSE; }
/* set height of the status box */ sz->cy = tm.tmHeight * data->nhstat_format; SelectObject(hdc, saveFont); ReleaseDC(hWnd, hdc); } } extern const char *hu_stat[]; /* defined in eat.c */ extern const char *enc_stat[]; /* define in botl.c */ void FormatStatusString(char *text, int format) { register char *nb; int hp, hpmax; int cap = near_capacity(); Strcpy(text, plname); if ('a' <= text[0] && text[0] <= 'z') text[0] += 'A' - 'a'; text[10] = 0; Sprintf(nb = eos(text), " the "); if (Upolyd) { char mbot[BUFSZ]; int k = 0; Strcpy(mbot, mons[u.umonnum].mname); while (mbot[k] != 0) { if ((k == 0 || (k > 0 && mbot[k - 1] == ' ')) && 'a' <= mbot[k] && mbot[k] <= 'z') mbot[k] += 'A' - 'a'; k++; } Sprintf(nb = eos(nb), mbot); } else Sprintf(nb = eos(nb), rank_of(u.ulevel, Role_switch, flags.female)); if (format == NHSTAT_LINES_4) Sprintf(nb = eos(nb), "\r\n"); if (ACURR(A_STR) > 18) { if (ACURR(A_STR) > STR18(100)) Sprintf(nb = eos(nb), "St:%2d ", ACURR(A_STR) - 100); else if (ACURR(A_STR) < STR18(100)) Sprintf(nb = eos(nb), "St:18/%02d ", ACURR(A_STR) - 18); else Sprintf(nb = eos(nb), "St:18/** "); } else Sprintf(nb = eos(nb), "St:%-1d ", ACURR(A_STR)); Sprintf(nb = eos(nb), "Dx:%-1d Co:%-1d In:%-1d Wi:%-1d Ch:%-1d", ACURR(A_DEX), ACURR(A_CON), ACURR(A_INT), ACURR(A_WIS), ACURR(A_CHA)); Sprintf(nb = eos(nb), (u.ualign.type == A_CHAOTIC) ? " Chaotic" : (u.ualign.type == A_NEUTRAL) ? " Neutral" : " Lawful"); #ifdef SCORE_ON_BOTL if (flags.showscore) Sprintf(nb = eos(nb), " S:%ld", botl_score()); #endif if (format == NHSTAT_LINES_4 || format == NHSTAT_LINES_2) strcat(text, "\r\n"); /* third line */ hp = Upolyd ? u.mh : u.uhp; hpmax = Upolyd ? u.mhmax : u.uhpmax; if (hp < 0) hp = 0; (void) describe_level(nb = eos(nb)); Sprintf(nb = eos(nb), "%c:%-2ld HP:%d(%d) Pw:%d(%d) AC:%-2d", showsyms[COIN_CLASS + SYM_OFF_O], money_cnt(invent), hp, hpmax, u.uen, u.uenmax, u.uac); if (Upolyd) Sprintf(nb = eos(nb), " HD:%d", mons[u.umonnum].mlevel); else if (flags.showexp) Sprintf(nb = eos(nb), " Xp:%u/%-1ld", u.ulevel, u.uexp); else Sprintf(nb = eos(nb), " Exp:%u", u.ulevel); if (format == NHSTAT_LINES_4) strcat(text, "\r\n"); else strcat(text, " "); /* forth line */ if (flags.time) Sprintf(nb = eos(nb), "T:%ld ", moves); if (strcmp(hu_stat[u.uhs], " ")) { Strcat(text, hu_stat[u.uhs]); Sprintf(nb = eos(nb), " "); } if (Confusion) Sprintf(nb = eos(nb), "Conf"); if (Sick) { if (u.usick_type & SICK_VOMITABLE) Sprintf(nb = eos(nb), " FoodPois"); if (u.usick_type & SICK_NONVOMITABLE) Sprintf(nb = eos(nb), " Ill"); } if (Blind) Sprintf(nb = eos(nb), " Blind"); if (Stunned) Sprintf(nb = eos(nb), " Stun"); if (Hallucination) Sprintf(nb = eos(nb), " Hallu"); if (Slimed) Sprintf(nb = eos(nb), " Slime"); if (cap > UNENCUMBERED) Sprintf(nb = eos(nb), " %s", enc_stat[cap]); }
void statuswin::parse_statusline(std::string str) { int hp, hpmax, nconds; long val; std::string txt; int cap = near_capacity(); size_t pos; char buf[64]; /* get player name + title */ pos = str.find("St:", 0); if (pos != std::string::npos) tokenarray[0][0]->caption = str.substr(0, pos); /* strength needs special treatment */ if (ACURR(A_STR) > 18) { if (ACURR(A_STR) > STR18(100)) sprintf(buf,"St:%2d", ACURR(A_STR)-100); else if (ACURR(A_STR) < STR18(100)) sprintf(buf, "St:18/%02d", ACURR(A_STR)-18); else sprintf(buf,"St:18/**"); } else sprintf(buf, "St:%-1d", ACURR(A_STR)); tokenarray[0][1]->caption = buf; /* the other stats */ sprintf(buf, "Dx:%-1d", ACURR(A_DEX)); tokenarray[0][2]->caption = buf; sprintf(buf, "Co:%-1d", ACURR(A_CON)); tokenarray[0][3]->caption = buf; sprintf(buf, "In:%-1d", ACURR(A_INT)); tokenarray[1][1]->caption = buf; sprintf(buf, "Wi:%-1d", ACURR(A_WIS)); tokenarray[1][2]->caption = buf; sprintf(buf, "Ch:%-1d", ACURR(A_CHA)); tokenarray[1][3]->caption = buf; /* alignment */ tokenarray[4][0]->visible = 1; tokenarray[4][0]->caption = (u.ualign.type == A_CHAOTIC) ? "Chaotic" : (u.ualign.type == A_NEUTRAL) ? "Neutral" : "Lawful"; /* score */ #ifdef SCORE_ON_BOTL if (flags.showscore) { sprintf(buf, "S:%ld", botl_score()); tokenarray[3][4]->caption = buf; } else tokenarray[3][4]->caption.clear(); #endif /* money */ #ifndef GOLDOBJ val = u.ugold; #else val = money_cnt(invent); #endif if (val >= 100000) { sprintf(buf, "%c:%-2ldk", oc_syms[COIN_CLASS], val / 1000); tokenarray[3][2]->caption = buf; } else { sprintf(buf, "%c:%-2ld", oc_syms[COIN_CLASS], val); tokenarray[3][2]->caption = buf; } /* Experience */ if (Upolyd) { sprintf(buf, "HD:%d", mons[u.umonnum].mlevel); tokenarray[3][0]->caption = buf; } #ifdef EXP_ON_BOTL else if(flags.showexp) { Sprintf(buf, "Xp:%u/%-1ld", u.ulevel,u.uexp); tokenarray[3][0]->caption = buf; /* if the exp gets too long, suppress displaying the alignment */ if (tokenarray[3][0]->caption.length() > 10) tokenarray[4][0]->visible = 0; } #endif else { Sprintf(buf, "Exp:%u", u.ulevel); tokenarray[3][0]->caption = buf; } /* HP, energy, armor */ hp = Upolyd ? u.mh : u.uhp; hpmax = Upolyd ? u.mhmax : u.uhpmax; sprintf(buf, "HP:%d(%d)", hp, hpmax); tokenarray[2][1]->caption = buf; if (hp >= ((hpmax * 90) / 100)) tokenarray[2][1]->textcolor = warn_colors[V_WARN_NONE]; else if (hp >= ((hpmax * 70) / 100)) tokenarray[2][1]->textcolor = warn_colors[V_WARN_NORMAL]; else if (hp >= ((hpmax * 50) / 100)) tokenarray[2][1]->textcolor = warn_colors[V_WARN_MORE]; else if (hp >= ((hpmax * 25) / 100)) tokenarray[2][1]->textcolor = warn_colors[V_WARN_ALERT]; else tokenarray[2][1]->textcolor = warn_colors[V_WARN_CRITICAL]; sprintf(buf, "Pw:%d(%d)", u.uen, u.uenmax); tokenarray[2][2]->caption = buf; sprintf(buf, "AC:%-2d", u.uac); tokenarray[2][3]->caption = buf; /* time */ if(flags.time) { sprintf(buf, "T:%ld", moves); tokenarray[3][3]->caption = buf; } else tokenarray[3][3]->caption.clear(); /* depth again (numeric) */ sprintf(buf, "Dlvl:%-2d ", depth(&u.uz)); tokenarray[3][1]->caption = buf; /* conditions (hunger, confusion, etc) */ nconds = 0; if (u.uhs > 1) /* hunger */ add_cond(hu_stat[u.uhs], nconds++, u.uhs-1); else if (u.uhs < 1) /* satiated */ add_cond(hu_stat[u.uhs], nconds++, 0); if(Confusion) add_cond("Conf", nconds++, V_WARN_MORE); if(Sick) { if (u.usick_type & SICK_VOMITABLE) add_cond("FoodPois", nconds++, V_WARN_ALERT); if (u.usick_type & SICK_NONVOMITABLE) add_cond("Ill", nconds++, V_WARN_ALERT); } if(Blind) add_cond("Blind", nconds++, V_WARN_MORE); if(Stunned) add_cond("Stun", nconds++, V_WARN_MORE); if(Hallucination) add_cond("Hallu", nconds++, V_WARN_MORE); if(Slimed) add_cond("Slime", nconds++, V_WARN_ALERT); if(cap > UNENCUMBERED) add_cond(enc_stat[cap], nconds++, cap); /* reset the empty positions */ for ( ;nconds < 8; nconds++) add_cond("", nconds, 0); #ifdef SHOW_WEIGHT if (flags.showweight && !tokenarray[0][4]->caption[0]) { std::stringstream stream; stream << "Wt:" << static_cast<long>((inv_weight()+weight_cap())) << "/" << static_cast<long>(weight_cap()) ; tokenarray[0][4]->caption = stream.str(); } #endif }
static void make_player_info(struct nh_player_info *pi) { int cap, advskills, i; memset(pi, 0, sizeof (struct nh_player_info)); pi->moves = moves; strncpy(pi->plname, u.uplname, sizeof (pi->plname)); pi->align = u.ualign.type; /* This function could be called before the game is fully inited. Test youmonst.data as it is required for near_capacity(). program_state.game_running is no good, as we need this data before game_running is set. TODO: Wow this is hacky. */ if (!youmonst.data) return; API_ENTRY_CHECKPOINT_RETURN_VOID_ON_ERROR(); pi->x = youmonst.mx; pi->y = youmonst.my; pi->z = u.uz.dlevel; if (Upolyd) { strncpy(pi->rank, msgtitlecase(mons[u.umonnum].mname), sizeof (pi->rank)); } else strncpy(pi->rank, rank(), sizeof (pi->rank)); strncpy(pi->rolename, (u.ufemale && urole.name.f) ? urole.name.f : urole.name.m, sizeof (pi->rolename)); strncpy(pi->racename, urace.noun, sizeof (pi->racename)); strncpy(pi->gendername, genders[u.ufemale].adj, sizeof(pi->gendername)); pi->max_rank_sz = mrank_sz; /* abilities */ pi->st = ACURR(A_STR); pi->st_extra = 0; if (pi->st > 118) { pi->st = pi->st - 100; pi->st_extra = 0; } else if (pi->st > 18) { pi->st_extra = pi->st - 18; pi->st = 18; } pi->dx = ACURR(A_DEX); pi->co = ACURR(A_CON); pi->in = ACURR(A_INT); pi->wi = ACURR(A_WIS); pi->ch = ACURR(A_CHA); pi->score = botl_score(); /* hp and energy */ pi->hp = Upolyd ? u.mh : u.uhp; pi->hpmax = Upolyd ? u.mhmax : u.uhpmax; if (pi->hp < 0) pi->hp = 0; pi->en = u.uen; pi->enmax = u.uenmax; pi->ac = find_mac(&youmonst); pi->gold = money_cnt(invent); pi->coinsym = def_oc_syms[COIN_CLASS]; describe_level(pi->level_desc); pi->monnum = u.umonster; pi->cur_monnum = u.umonnum; /* level and exp points */ if (Upolyd) pi->level = mons[u.umonnum].mlevel; else pi->level = youmonst.m_lev; pi->xp = youmonst.exp; cap = near_capacity(); /* check if any skills could be anhanced */ advskills = 0; for (i = 0; i < P_NUM_SKILLS; i++) { if (P_RESTRICTED(i)) continue; if (can_advance(i, FALSE)) advskills++; } pi->can_enhance = advskills > 0; /* add status items for various problems there can be at most 24 items here at any one time or we overflow the buffer */ if (hu_stat[u.uhs]) /* 1 */ strncpy(pi->statusitems[pi->nr_items++], hu_stat[u.uhs], ITEMLEN); if (Confusion) /* 2 */ strncpy(pi->statusitems[pi->nr_items++], "Conf", ITEMLEN); if (sick(&youmonst)) { /* 3 */ if (u.usick_type & SICK_VOMITABLE) strncpy(pi->statusitems[pi->nr_items++], "FoodPois", ITEMLEN); if (u.usick_type & SICK_NONVOMITABLE) strncpy(pi->statusitems[pi->nr_items++], "Ill", ITEMLEN); } if (Blind) /* 4 */ strncpy(pi->statusitems[pi->nr_items++], "Blind", ITEMLEN); if (slippery_fingers(&youmonst)) /* 5 */ strncpy(pi->statusitems[pi->nr_items++], "Greasy", ITEMLEN); if (leg_hurt(&youmonst)) /* 6 */ strncpy(pi->statusitems[pi->nr_items++], "Lame", ITEMLEN); if (stunned(&youmonst)) /* 7 */ strncpy(pi->statusitems[pi->nr_items++], "Stun", ITEMLEN); if (hallucinating(&youmonst)) /* 8 */ strncpy(pi->statusitems[pi->nr_items++], "Hallu", ITEMLEN); if (strangled(&youmonst)) /* 9 */ strncpy(pi->statusitems[pi->nr_items++], "Strangle", ITEMLEN); if (sliming(&youmonst)) /* 10 */ strncpy(pi->statusitems[pi->nr_items++], "Slime", ITEMLEN); if (petrifying(&youmonst)) /* 11 */ strncpy(pi->statusitems[pi->nr_items++], "Petrify", ITEMLEN); if (u.ustuck && !Engulfed && !sticks(youmonst.data)) /* 12 */ strncpy(pi->statusitems[pi->nr_items++], "Held", ITEMLEN); if (enc_stat[cap] ) /* 13 */ strncpy(pi->statusitems[pi->nr_items++], enc_stat[cap], ITEMLEN); if (cancelled(&youmonst)) strncpy(pi->statusitems[pi->nr_items++], "Cancelled", ITEMLEN); if (slow(&youmonst)) strncpy(pi->statusitems[pi->nr_items++], "Slow", ITEMLEN); if (Levitation) /* 14 */ strncpy(pi->statusitems[pi->nr_items++], "Lev", ITEMLEN); else if (Flying) strncpy(pi->statusitems[pi->nr_items++], "Fly", ITEMLEN); if (uwep && is_pick(uwep)) /* 15 (first case) */ strncpy(pi->statusitems[pi->nr_items++], "Dig", ITEMLEN); else if (uwep && is_launcher(uwep)) strncpy(pi->statusitems[pi->nr_items++], "Ranged", ITEMLEN); else if (uwep && (uwep->otyp == CORPSE) && (touch_petrifies(&mons[uwep->corpsenm]))) strncpy(pi->statusitems[pi->nr_items++], "cWielded", ITEMLEN); else if (!uwep) strncpy(pi->statusitems[pi->nr_items++], "Unarmed", ITEMLEN); else if (!is_wep(uwep)) strncpy(pi->statusitems[pi->nr_items++], "NonWeap", ITEMLEN); else { /* strncpy(pi->statusitems[pi->nr_items++], "Melee", ITEMLEN); */ /* Don't show the default Melee status light, as that's the most common case. */ /* 15 (last case) */ } if (u.utrap) /* 16 */ strncpy(pi->statusitems[pi->nr_items++], trap_stat[u.utraptype], ITEMLEN); API_EXIT(); }
void curses_update_stats() { char buf[BUFSZ]; int count, enc, orient, sx_start; WINDOW *win = curses_get_nhwin(STATUS_WIN); static boolean first = TRUE; boolean horiz; int sx = 0; int sy = 0; boolean border = curses_window_has_border(STATUS_WIN); if (border) { sx++; sy++; } sx_start = sx; if (first) { init_stats(); first = FALSE; } orient = curses_get_window_orientation(STATUS_WIN); if ((orient == ALIGN_RIGHT) || (orient == ALIGN_LEFT)) { horiz = FALSE; } else { horiz = TRUE; } curses_clear_nhwin(STATUS_WIN); /* Line 1 */ /* Player name and title */ strcpy(buf, plname); if ('a' <= buf[0] && buf[0] <= 'z') buf[0] += 'A'-'a'; strcat(buf, " the "); if (u.mtimedone) { char mname[BUFSZ]; int k = 0; strcpy(mname, mons[u.umonnum].mname); while(mname[k] != 0) { if ((k == 0 || (k > 0 && mname[k-1] == ' ')) && 'a' <= mname[k] && mname[k] <= 'z') { mname[k] += 'A' - 'a'; } k++; } strcat(buf, mname); } else { strcat(buf, rank_of(u.ulevel, pl_character[0], flags.female)); } if (strcmp(buf, prevname.txt) != 0) /* Title changed */ { prevname.highlight_turns = 5; prevname.highlight_color = HIGHLIGHT_COLOR; free(prevname.txt); prevname.txt = curses_copy_of(buf); } if (prevname.label != NULL) { mvwaddstr(win, sy, sx, prevname.label); sx += strlen(prevname.label); } if (prevname.highlight_turns > 0) { curses_toggle_color_attr(win, prevname.highlight_color, NONE, ON); mvwaddstr(win, sy, sx, prevname.txt); curses_toggle_color_attr(win, prevname.highlight_color, NONE, OFF); } else { mvwaddstr(win, sy, sx, prevname.txt); } if (horiz) { sx += strlen(prevname.txt) + 1; } else { sx = sx_start; sy++; } /* Strength */ if (ACURR(A_STR) != prevstr.value) /* Strength changed */ { if (ACURR(A_STR) > prevstr.value) { prevstr.highlight_color = STAT_UP_COLOR; } else { prevstr.highlight_color = STAT_DOWN_COLOR; } prevstr.value = ACURR(A_STR); if (ACURR(A_STR) > 118) { sprintf(buf, "%d", ACURR(A_STR) - 100); } else if (ACURR(A_STR)==118) { sprintf(buf, "18/**"); } else if(ACURR(A_STR) > 18) { sprintf(buf, "18/%02d", ACURR(A_STR) - 18); } else { sprintf(buf, "%d", ACURR(A_STR)); } free(prevstr.txt); prevstr.txt = curses_copy_of(buf); prevstr.highlight_turns = 5; } if (prevstr.label != NULL) { mvwaddstr(win, sy, sx, prevstr.label); sx += strlen(prevstr.label); } if (prevstr.highlight_turns > 0) { curses_toggle_color_attr(win, prevstr.highlight_color, NONE, ON); mvwaddstr(win, sy, sx, prevstr.txt); curses_toggle_color_attr(win, prevstr.highlight_color, NONE, OFF); } else { mvwaddstr(win, sy, sx, prevstr.txt); } if (horiz) { sx += strlen(prevstr.txt) + 1; } else { sx = sx_start; sy++; } /* Intelligence */ if (ACURR(A_INT) != prevint.value) /* Intelligence changed */ { if (ACURR(A_INT) > prevint.value) { prevint.highlight_color = STAT_UP_COLOR; } else { prevint.highlight_color = STAT_DOWN_COLOR; } prevint.value = ACURR(A_INT); sprintf(buf, "%d", ACURR(A_INT)); free(prevint.txt); prevint.txt = curses_copy_of(buf); prevint.highlight_turns = 5; } if (prevint.label != NULL) { mvwaddstr(win, sy, sx, prevint.label); sx += strlen(prevint.label); } if (prevint.highlight_turns > 0) { curses_toggle_color_attr(win, prevint.highlight_color, NONE, ON); mvwaddstr(win, sy, sx, prevint.txt); curses_toggle_color_attr(win, prevint.highlight_color, NONE, OFF); } else { mvwaddstr(win, sy, sx, prevint.txt); } if (horiz) { sx += strlen(prevint.txt) + 1; } else { sx = sx_start; sy++; } /* Wisdom */ if (ACURR(A_WIS) != prevwis.value) /* Wisdom changed */ { if (ACURR(A_WIS) > prevwis.value) { prevwis.highlight_color = STAT_UP_COLOR; } else { prevwis.highlight_color = STAT_DOWN_COLOR; } prevwis.value = ACURR(A_WIS); sprintf(buf, "%d", ACURR(A_WIS)); free(prevwis.txt); prevwis.txt = curses_copy_of(buf); prevwis.highlight_turns = 5; } if (prevwis.label != NULL) { mvwaddstr(win, sy, sx, prevwis.label); sx += strlen(prevwis.label); } if (prevwis.highlight_turns > 0) { curses_toggle_color_attr(win, prevwis.highlight_color, NONE, ON); mvwaddstr(win, sy, sx, prevwis.txt); curses_toggle_color_attr(win, prevwis.highlight_color, NONE, OFF); } else { mvwaddstr(win, sy, sx, prevwis.txt); } if (horiz) { sx += strlen(prevwis.txt) + 1; } else { sx = sx_start; sy++; } /* Dexterity */ if (ACURR(A_DEX) != prevdex.value) /* Dexterity changed */ { if (ACURR(A_DEX) > prevdex.value) { prevdex.highlight_color = STAT_UP_COLOR; } else { prevdex.highlight_color = STAT_DOWN_COLOR; } prevdex.value = ACURR(A_DEX); sprintf(buf, "%d", ACURR(A_DEX)); free(prevdex.txt); prevdex.txt = curses_copy_of(buf); prevdex.highlight_turns = 5; } if (prevdex.label != NULL) { mvwaddstr(win, sy, sx, prevdex.label); sx += strlen(prevdex.label); } if (prevdex.highlight_turns > 0) { curses_toggle_color_attr(win, prevdex.highlight_color, NONE, ON); mvwaddstr(win, sy, sx, prevdex.txt); curses_toggle_color_attr(win, prevdex.highlight_color, NONE, OFF); } else { mvwaddstr(win, sy, sx, prevdex.txt); } if (horiz) { sx += strlen(prevdex.txt) + 1; } else { sx = sx_start; sy++; } /* Constitution */ if (ACURR(A_CON) != prevcon.value) /* Constitution changed */ { if (ACURR(A_CON) > prevcon.value) { prevcon.highlight_color = STAT_UP_COLOR; } else { prevcon.highlight_color = STAT_DOWN_COLOR; } prevcon.value = ACURR(A_CON); sprintf(buf, "%d", ACURR(A_CON)); free(prevcon.txt); prevcon.txt = curses_copy_of(buf); prevcon.highlight_turns = 5; } if (prevcon.label != NULL) { mvwaddstr(win, sy, sx, prevcon.label); sx += strlen(prevcon.label); } if (prevcon.highlight_turns > 0) { curses_toggle_color_attr(win, prevcon.highlight_color, NONE, ON); mvwaddstr(win, sy, sx, prevcon.txt); curses_toggle_color_attr(win, prevcon.highlight_color, NONE, OFF); } else { mvwaddstr(win, sy, sx, prevcon.txt); } if (horiz) { sx += strlen(prevcon.txt) + 1; } else { sx = sx_start; sy++; } /* Charisma */ if (ACURR(A_CHA) != prevcha.value) /* Charisma changed */ { if (ACURR(A_CHA) > prevcha.value) { prevcha.highlight_color = STAT_UP_COLOR; } else { prevcha.highlight_color = STAT_DOWN_COLOR; } prevcha.value = ACURR(A_CHA); sprintf(buf, "%d", ACURR(A_CHA)); free(prevcha.txt); prevcha.txt = curses_copy_of(buf); prevcha.highlight_turns = 5; } if (prevcha.label != NULL) { mvwaddstr(win, sy, sx, prevcha.label); sx += strlen(prevcha.label); } if (prevcha.highlight_turns > 0) { curses_toggle_color_attr(win, prevcha.highlight_color, NONE, ON); mvwaddstr(win, sy, sx, prevcha.txt); curses_toggle_color_attr(win, prevcha.highlight_color, NONE, OFF); } else { mvwaddstr(win, sy, sx, prevcha.txt); } if (horiz) { sx += strlen(prevcha.txt) + 1; } else { sx = sx_start; sy++; } /* Alignment */ if (prevalign.alignment != u.ualign.type) /* Alignment changed */ { prevalign.highlight_color = HIGHLIGHT_COLOR; prevalign.highlight_turns = 10; /* This is a major change! */ prevalign.alignment = u.ualign.type; free(prevalign.txt); switch (u.ualign.type) { case A_LAWFUL: { prevalign.txt = curses_copy_of("Lawful"); break; } case A_NEUTRAL: { prevalign.txt = curses_copy_of("Neutral"); break; } case A_CHAOTIC: { prevalign.txt = curses_copy_of("Chaotic"); break; } } } if (prevalign.label != NULL) { mvwaddstr(win, sy, sx, prevalign.label); sx += strlen(prevalign.label); } if (prevalign.highlight_turns > 0) { curses_toggle_color_attr(win, prevalign.highlight_color, NONE, ON); mvwaddstr(win, sy, sx, prevalign.txt); curses_toggle_color_attr(win, prevalign.highlight_color, NONE, OFF); } else { mvwaddstr(win, sy, sx, prevalign.txt); } /* Line 2 */ sx = sx_start; sy++; /* Dungeon Level */ if (depth(&u.uz) != prevdepth.value) /* Dungeon level changed */ { prevdepth.highlight_color = HIGHLIGHT_COLOR; prevdepth.highlight_turns = 5; prevdepth.value = depth(&u.uz); free(prevdepth.txt); if (In_endgame(&u.uz)) { strcpy(buf, (Is_astralevel(&u.uz) ? "Astral Plane":"End Game")); } else { sprintf(buf, "%d", depth(&u.uz)); } prevdepth.txt = curses_copy_of(buf); } if (prevdepth.label != NULL) { mvwaddstr(win, sy, sx, prevdepth.label); sx += strlen(prevdepth.label); } if (prevdepth.highlight_turns > 0) { curses_toggle_color_attr(win, prevdepth.highlight_color, NONE, ON); mvwaddstr(win, sy, sx, prevdepth.txt); curses_toggle_color_attr(win, prevdepth.highlight_color, NONE, OFF); } else { mvwaddstr(win, sy, sx, prevdepth.txt); } if (horiz) { sx += strlen(prevdepth.txt) + 1; } else { sx = sx_start; sy++; } /* Gold */ #ifndef GOLDOBJ if (prevau.value != u.ugold) /* Gold changed */ { if (u.ugold > prevau.value) { #else if (prevau.value != money_cnt(invent)) /* Gold changed */ { if (money_cnt(invent) > prevau.value) { #endif prevau.highlight_color = HI_GOLD; } else { prevau.highlight_color = STAT_DOWN_COLOR; } #ifndef GOLDOBJ prevau.value = u.ugold; sprintf(buf,"%ld", u.ugold); #else prevau.value = money_cnt(invent); sprintf(buf,"%ld", money_cnt(invent)); #endif free(prevau.txt); prevau.txt = curses_copy_of(buf); prevau.highlight_turns = 5; } if (prevau.label != NULL) { mvwaddstr(win, sy, sx, prevau.label); sx += strlen(prevau.label); } if (prevau.highlight_turns > 0) { curses_toggle_color_attr(win, prevau.highlight_color, NONE, ON); mvwaddstr(win, sy, sx, prevau.txt); curses_toggle_color_attr(win, prevau.highlight_color, NONE, OFF); } else { mvwaddstr(win, sy, sx, prevau.txt); } if (horiz) { sx += strlen(prevau.txt) + 1; } else { sx = sx_start; sy++; } /* Hit Points */ if (u.mtimedone) /* Currently polymorphed - show monster HP */ { if (u.mh != prevhp.value) { if (u.mh > prevhp.value) { prevhp.highlight_color = STAT_UP_COLOR; } else { prevhp.highlight_color = STAT_DOWN_COLOR; } prevhp.highlight_turns = 3; prevhp.value = u.mh; sprintf(buf, "%d", u.mh); free(prevhp.txt); prevhp.txt = curses_copy_of(buf); } } else if (u.uhp != prevhp.value) /* Not polymorphed */ { if (u.uhp > prevhp.value) { prevhp.highlight_color = STAT_UP_COLOR; } else { prevhp.highlight_color = STAT_DOWN_COLOR; } prevhp.value = u.uhp; sprintf(buf, "%d", u.uhp); free(prevhp.txt); prevhp.txt = curses_copy_of(buf); prevhp.highlight_turns = 3; } if (prevhp.label != NULL) { mvwaddstr(win, sy, sx, prevhp.label); sx += strlen(prevhp.label); } if (prevhp.highlight_turns > 0) { curses_toggle_color_attr(win, prevhp.highlight_color, NONE, ON); mvwaddstr(win, sy, sx, prevhp.txt); curses_toggle_color_attr(win, prevhp.highlight_color, NONE, OFF); } else { mvwaddstr(win, sy, sx, prevhp.txt); } sx += strlen(prevhp.txt); /* Max Hit Points */ if (u.mtimedone) /* Currently polymorphed - show monster HP */ { if (u.mhmax != prevmhp.value) { if (u.mhmax > prevmhp.value) { prevmhp.highlight_color = STAT_UP_COLOR; } else { prevmhp.highlight_color = STAT_DOWN_COLOR; } prevmhp.value = u.mhmax; sprintf(buf, "%d", u.mhmax); free(prevmhp.txt); prevmhp.txt = curses_copy_of(buf); prevmhp.highlight_turns = 3; } } else if (u.uhpmax != prevmhp.value) /* Not polymorphed */ { if (u.uhpmax > prevmhp.value) { prevmhp.highlight_color = STAT_UP_COLOR; } else { prevmhp.highlight_color = STAT_DOWN_COLOR; } prevmhp.value = u.uhpmax; sprintf(buf, "%d", u.uhpmax); free(prevmhp.txt); prevmhp.txt = curses_copy_of(buf); prevmhp.highlight_turns = 3; } if (prevmhp.label != NULL) { mvwaddstr(win, sy, sx, prevmhp.label); sx += strlen(prevmhp.label); } if (prevmhp.highlight_turns > 0) { curses_toggle_color_attr(win, prevmhp.highlight_color, NONE, ON); mvwaddstr(win, sy, sx, prevmhp.txt); curses_toggle_color_attr(win, prevmhp.highlight_color, NONE, OFF); } else { mvwaddstr(win, sy, sx, prevmhp.txt); } if (horiz) { sx += strlen(prevmhp.txt) + 1; } else { sx = sx_start; sy++; } /* Power */ if (u.uen != prevpow.value) { if (u.uen > prevpow.value) { prevpow.highlight_color = STAT_UP_COLOR; } else { prevpow.highlight_color = STAT_DOWN_COLOR; } prevpow.value = u.uen; sprintf(buf, "%d", u.uen); free(prevpow.txt); prevpow.txt = curses_copy_of(buf); prevpow.highlight_turns = 3; } if (prevpow.label != NULL) { mvwaddstr(win, sy, sx, prevpow.label); sx += strlen(prevpow.label); } if (prevpow.highlight_turns > 0) { curses_toggle_color_attr(win, prevpow.highlight_color, NONE, ON); mvwaddstr(win, sy, sx, prevpow.txt); curses_toggle_color_attr(win, prevpow.highlight_color, NONE, OFF); } else { mvwaddstr(win, sy, sx, prevpow.txt); } sx += strlen(prevpow.txt); /* Max Power */ if (u.uenmax != prevmpow.value) { if (u.uenmax > prevmpow.value) { prevmpow.highlight_color = STAT_UP_COLOR; } else { prevmpow.highlight_color = STAT_DOWN_COLOR; } prevmpow.value = u.uenmax; sprintf(buf, "%d", u.uenmax); free(prevmpow.txt); prevmpow.txt = curses_copy_of(buf); prevmpow.highlight_turns = 3; } if (prevmpow.label != NULL) { mvwaddstr(win, sy, sx, prevmpow.label); sx += strlen(prevmpow.label); } if (prevmpow.highlight_turns > 0) { curses_toggle_color_attr(win, prevmpow.highlight_color, NONE, ON); mvwaddstr(win, sy, sx, prevmpow.txt); curses_toggle_color_attr(win, prevmpow.highlight_color, NONE, OFF); } else { mvwaddstr(win, sy, sx, prevmpow.txt); } if (horiz) { sx += strlen(prevmpow.txt) + 1; } else { sx = sx_start; sy++; } /* Armor Class */ if (u.uac != prevac.value) { if (u.uac > prevac.value) /* Lower is better for AC */ { prevac.highlight_color = STAT_DOWN_COLOR; } else { prevac.highlight_color = STAT_UP_COLOR; } prevac.value = u.uac; sprintf(buf, "%d", u.uac); free(prevac.txt); prevac.txt = curses_copy_of(buf); prevac.highlight_turns = 5; } if (prevac.label != NULL) { mvwaddstr(win, sy, sx, prevac.label); sx += strlen(prevac.label); } if (prevac.highlight_turns > 0) { curses_toggle_color_attr(win, prevac.highlight_color, NONE, ON); mvwaddstr(win, sy, sx, prevac.txt); curses_toggle_color_attr(win, prevac.highlight_color, NONE, OFF); } else { mvwaddstr(win, sy, sx, prevac.txt); } if (horiz) { sx += strlen(prevac.txt) + 1; } else { sx = sx_start; sy++; } /* Experience */ #ifdef EXP_ON_BOTL if (prevexp.display != flags.showexp) /* Setting has changed */ { prevexp.display = flags.showexp; free(prevlevel.label); if (prevexp.display) { prevlevel.label = curses_copy_of("/"); } else { prevlevel.label = curses_copy_of("Lvl:"); } } if (prevexp.display && !u.mtimedone) { if (u.uexp != prevexp.value) { if (u.uexp > prevexp.value) { prevexp.highlight_color = STAT_UP_COLOR; } else { prevexp.highlight_color = STAT_DOWN_COLOR; } sprintf(buf, "%d", u.uexp); free(prevexp.txt); prevexp.txt = curses_copy_of(buf); prevexp.highlight_turns = 3; } if (prevexp.label != NULL) { mvwaddstr(win, sy, sx, prevexp.label); sx += strlen(prevexp.label); } if (prevexp.highlight_turns > 0) { curses_toggle_color_attr(win, prevexp.highlight_color, NONE, ON); mvwaddstr(win, sy, sx, prevexp.txt); curses_toggle_color_attr(win, prevexp.highlight_color, NONE, OFF); } else { mvwaddstr(win, sy, sx, prevexp.txt); } sx += strlen(prevexp.txt); } prevexp.value = u.uexp; /* Track it even when it's not displayed */ #endif /* EXP_ON_BOTL */ /* Level */ if (u.mtimedone) /* Currently polymorphed - show monster HD */ { if (strncmp(prevlevel.label, "HD:", 3) != 0) { free(prevlevel.label); prevlevel.label = curses_copy_of("HD:"); } if (mons[u.umonnum].mlevel != prevlevel.value) { if (mons[u.umonnum].mlevel > prevlevel.value) { prevlevel.highlight_color = STAT_UP_COLOR; } else { prevlevel.highlight_color = STAT_DOWN_COLOR; } prevlevel.highlight_turns = 5; } prevlevel.value = mons[u.umonnum].mlevel; sprintf(buf, "%d", mons[u.umonnum].mlevel); free(prevlevel.txt); prevlevel.txt = curses_copy_of(buf); } else /* Not polymorphed */ { if (strncmp(prevlevel.label, "HD:", 3) == 0) { free(prevlevel.label); if (prevexp.display) { prevlevel.label = curses_copy_of("/"); } else { prevlevel.label = curses_copy_of("Lvl:"); } } if (u.ulevel > prevlevel.value) { prevlevel.highlight_color = STAT_UP_COLOR; prevlevel.highlight_turns = 5; } else if (u.ulevel < prevlevel.value) { prevlevel.highlight_color = STAT_DOWN_COLOR; prevlevel.highlight_turns = 5; } prevlevel.value = u.ulevel; sprintf(buf, "%d", u.ulevel); free(prevlevel.txt); prevlevel.txt = curses_copy_of(buf); } if (prevlevel.label != NULL) { mvwaddstr(win, sy, sx, prevlevel.label); sx += strlen(prevlevel.label); } if (prevlevel.highlight_turns > 0) { curses_toggle_color_attr(win, prevlevel.highlight_color, NONE, ON); mvwaddstr(win, sy, sx, prevlevel.txt); curses_toggle_color_attr(win, prevlevel.highlight_color, NONE, OFF); } else { mvwaddstr(win, sy, sx, prevlevel.txt); } if (horiz) { sx += strlen(prevlevel.txt) + 1; } else { sx = sx_start; sy++; } /* Time */ if (prevtime.display != flags.time) /* Setting has changed */ { prevtime.display = flags.time; } if (prevtime.display) { if (moves != prevtime.value) { sprintf(buf, "%ld", moves); free(prevtime.txt); prevtime.txt = curses_copy_of(buf); } if (prevtime.label != NULL) { mvwaddstr(win, sy, sx, prevtime.label); sx += strlen(prevtime.label); } mvwaddstr(win, sy, sx, prevtime.txt); if (horiz) { sx += strlen(prevtime.txt) + 1; } else { sx = sx_start; sy++; } } /* Score */ #ifdef SCORE_ON_BOTL if (prevscore.display != flags.showscore) /* Setting has changed */ { prevscore.display = flags.showscore; } if (prevscore.display) { if (botl_score() != prevscore.value) { if (botl_score() > prevscore.value) { prevscore.highlight_color = STAT_UP_COLOR; } else /* Not sure this is possible */ { prevscore.highlight_color = STAT_DOWN_COLOR; } sprintf(buf, "%ld", botl_score()); free(prevscore.txt); prevscore.txt = curses_copy_of(buf); prevscore.highlight_turns = 3; } if (prevscore.label != NULL) { mvwaddstr(win, sy, sx, prevscore.label); sx += strlen(prevscore.label); } if (prevscore.highlight_turns > 0) { curses_toggle_color_attr(win, prevscore.highlight_color, NONE, ON); mvwaddstr(win, sy, sx, prevscore.txt); curses_toggle_color_attr(win, prevscore.highlight_color, NONE, OFF); } else { mvwaddstr(win, sy, sx, prevscore.txt); } if (horiz) { sx += strlen(prevscore.txt) + 1; } else { sx = sx_start; sy++; } } prevscore.value = botl_score(); /* Track it even when it's not displayed */ #endif /* SCORE_ON_BOTL */ /* Hunger */ if (u.uhs != prevhunger.value) { if ((u.uhs > prevhunger.value) || (u.uhs > 3)) { prevhunger.highlight_color = STAT_DOWN_COLOR; } else { prevhunger.highlight_color = STAT_UP_COLOR; } prevhunger.value = u.uhs; for (count = 0; count < strlen(hu_stat[u.uhs]); count++) { if ((hu_stat[u.uhs][count]) == ' ') { break; } buf[count] = hu_stat[u.uhs][count]; } buf[count] = '\0'; free(prevhunger.txt); prevhunger.txt = curses_copy_of(buf); prevhunger.highlight_turns = 5; } if (prevhunger.label != NULL) { mvwaddstr(win, sy, sx, prevhunger.label); sx += strlen(prevhunger.label); } if (prevhunger.highlight_turns > 0) { curses_toggle_color_attr(win, prevhunger.highlight_color, NONE, ON); mvwaddstr(win, sy, sx, prevhunger.txt); curses_toggle_color_attr(win, prevhunger.highlight_color, NONE, OFF); } else { mvwaddstr(win, sy, sx, prevhunger.txt); } if (strlen(prevhunger.txt) > 0) { if (horiz) { sx += strlen(prevhunger.txt) + 1; } else { sx = sx_start; sy++; } } /* Confusion */ if (Confusion != prevconf.value) { prevconf.highlight_color = STAT_DOWN_COLOR; if (prevconf.txt != NULL) { free(prevconf.txt); } if (Confusion) { prevconf.txt = curses_copy_of("Conf"); } else { prevconf.txt = NULL; } if (prevconf.value == 0) { prevconf.highlight_turns = 5; } prevconf.value = Confusion; } if (prevconf.label != NULL) { mvwaddstr(win, sy, sx, prevconf.label); sx += strlen(prevconf.label); } if (prevconf.txt != NULL) { if (prevconf.highlight_turns > 0) { curses_toggle_color_attr(win, prevconf.highlight_color, NONE, ON); mvwaddstr(win, sy, sx, prevconf.txt); curses_toggle_color_attr(win, prevconf.highlight_color, NONE, OFF); } else { mvwaddstr(win, sy, sx, prevconf.txt); } } if (prevconf.txt != NULL) { if (horiz) { sx += strlen(prevconf.txt) + 1; } else { sx = sx_start; sy++; } } /* Blindness */ if (Blind != prevblind.value) { prevblind.highlight_color = STAT_DOWN_COLOR; if (prevblind.txt != NULL) { free(prevblind.txt); } if (Blind) { prevblind.txt = curses_copy_of("Blind"); } else { prevblind.txt = NULL; } if (prevblind.value == 0) { prevblind.highlight_turns = 5; } prevblind.value = Blind; } if (prevblind.label != NULL) { mvwaddstr(win, sy, sx, prevblind.label); sx += strlen(prevblind.label); } if (prevblind.txt != NULL) { if (prevblind.highlight_turns > 0) { curses_toggle_color_attr(win, prevblind.highlight_color, NONE, ON); mvwaddstr(win, sy, sx, prevblind.txt); curses_toggle_color_attr(win, prevblind.highlight_color, NONE, OFF); } else { mvwaddstr(win, sy, sx, prevblind.txt); } } if (prevblind.txt != NULL) { if (horiz) { sx += strlen(prevblind.txt) + 1; } else { sx = sx_start; sy++; } } /* Stun */ if (Stunned != prevstun.value) { prevstun.highlight_color = STAT_DOWN_COLOR; if (prevstun.txt != NULL) { free(prevstun.txt); } if (Stunned) { prevstun.txt = curses_copy_of("Stun"); } else { prevstun.txt = NULL; } if (prevstun.value == 0) { prevstun.highlight_turns = 5; } prevstun.value = Stunned; } if (prevstun.label != NULL) { mvwaddstr(win, sy, sx, prevstun.label); sx += strlen(prevstun.label); } if (prevstun.txt != NULL) { if (prevstun.highlight_turns > 0) { curses_toggle_color_attr(win, prevstun.highlight_color, NONE, ON); mvwaddstr(win, sy, sx, prevstun.txt); curses_toggle_color_attr(win, prevstun.highlight_color, NONE, OFF); } else { mvwaddstr(win, sy, sx, prevstun.txt); } } if (prevstun.txt != NULL) { if (horiz) { sx += strlen(prevstun.txt) + 1; } else { sx = sx_start; sy++; } } /* Hallucination */ if (Hallucination != prevhallu.value) { prevhallu.highlight_color = STAT_DOWN_COLOR; if (prevhallu.txt != NULL) { free(prevhallu.txt); } if (Hallucination) { prevhallu.txt = curses_copy_of("Hallu"); } else { prevhallu.txt = NULL; } if (prevhallu.value == 0) { prevhallu.highlight_turns = 5; } prevhallu.value = Hallucination; } if (prevhallu.label != NULL) { mvwaddstr(win, sy, sx, prevhallu.label); sx += strlen(prevhallu.label); } if (prevhallu.txt != NULL) { if (prevhallu.highlight_turns > 0) { curses_toggle_color_attr(win, prevhallu.highlight_color, NONE, ON); mvwaddstr(win, sy, sx, prevhallu.txt); curses_toggle_color_attr(win, prevhallu.highlight_color, NONE, OFF); } else { mvwaddstr(win, sy, sx, prevhallu.txt); } } if (prevhallu.txt != NULL) { if (horiz) { sx += strlen(prevhallu.txt) + 1; } else { sx = sx_start; sy++; } } /* Sick */ if (Sick != prevsick.value) { prevsick.highlight_color = STAT_DOWN_COLOR; if (prevsick.txt != NULL) { free(prevsick.txt); } if (Sick) { if (u.usick_type & SICK_VOMITABLE) { prevsick.txt = curses_copy_of("FoodPois"); } else { prevsick.txt = curses_copy_of("Ill"); } } else { prevsick.txt = NULL; } if (prevsick.value == 0) { prevsick.highlight_turns = 5; } prevsick.value = Sick; } if (prevsick.label != NULL) { mvwaddstr(win, sy, sx, prevsick.label); sx += strlen(prevsick.label); } if (prevsick.txt != NULL) { if (prevsick.highlight_turns > 0) { curses_toggle_color_attr(win, prevsick.highlight_color, NONE, ON); mvwaddstr(win, sy, sx, prevsick.txt); curses_toggle_color_attr(win, prevsick.highlight_color, NONE, OFF); } else { mvwaddstr(win, sy, sx, prevsick.txt); } } if (prevsick.txt != NULL) { if (horiz) { sx += strlen(prevsick.txt) + 1; } else { sx = sx_start; sy++; } } /* Slime */ if (Slimed != prevslime.value) { prevslime.highlight_color = STAT_DOWN_COLOR; if (prevslime.txt != NULL) { free(prevslime.txt); } if (Slimed) { prevslime.txt = curses_copy_of("Slime"); } else { prevslime.txt = NULL; } if (prevslime.value == 0) { prevslime.highlight_turns = 5; } prevslime.value = Slimed; } if (prevslime.label != NULL) { mvwaddstr(win, sy, sx, prevslime.label); sx += strlen(prevslime.label); } if (prevslime.txt != NULL) { if (prevslime.highlight_turns > 0) { curses_toggle_color_attr(win, prevslime.highlight_color, NONE, ON); mvwaddstr(win, sy, sx, prevslime.txt); curses_toggle_color_attr(win, prevslime.highlight_color, NONE, OFF); } else { mvwaddstr(win, sy, sx, prevslime.txt); } } if (prevslime.txt != NULL) { if (horiz) { sx += strlen(prevslime.txt) + 1; } else { sx = sx_start; sy++; } } /* Encumberance */ enc = near_capacity(); if (enc != prevencumb.value) { if (enc < prevencumb.value) { prevencumb.highlight_color = STAT_UP_COLOR; } else { prevencumb.highlight_color = STAT_DOWN_COLOR; } if (prevencumb.txt != NULL) { free(prevencumb.txt); } if (enc > UNENCUMBERED) { sprintf(buf, "%s", enc_stat[enc]); prevencumb.txt = curses_copy_of(buf); prevencumb.highlight_turns = 5; } else { prevencumb.txt = NULL; } prevencumb.value = enc; } if (prevencumb.label != NULL) { mvwaddstr(win, sy, sx, prevencumb.label); sx += strlen(prevencumb.label); } if (prevencumb.txt != NULL) { if (prevencumb.highlight_turns > 0) { curses_toggle_color_attr(win, prevencumb.highlight_color, NONE, ON); mvwaddstr(win, sy, sx, prevencumb.txt); curses_toggle_color_attr(win, prevencumb.highlight_color, NONE, OFF); } else { mvwaddstr(win, sy, sx, prevencumb.txt); } } if (prevencumb.txt != NULL) { if (horiz) { sx += strlen(prevencumb.txt) + 1; } else { sx = sx_start; sy++; } } wrefresh(win); } /* Decrement the highlight_turns for all stats. Call curses_update_stats if needed to unhighlight a stat */ void curses_decrement_highlight() { boolean unhighlight = FALSE; if (prevname.highlight_turns > 0) { prevname.highlight_turns--; if (prevname.highlight_turns == 0) { unhighlight = TRUE; } } if (prevdepth.highlight_turns > 0) { prevdepth.highlight_turns--; if (prevdepth.highlight_turns == 0) { unhighlight = TRUE; } } if (prevstr.highlight_turns > 0) { prevstr.highlight_turns--; if (prevstr.highlight_turns == 0) { unhighlight = TRUE; } } if (prevint.highlight_turns > 0) { prevint.highlight_turns--; if (prevint.highlight_turns == 0) { unhighlight = TRUE; } } if (prevwis.highlight_turns > 0) { prevwis.highlight_turns--; if (prevwis.highlight_turns == 0) { unhighlight = TRUE; } } if (prevdex.highlight_turns > 0) { prevdex.highlight_turns--; if (prevdex.highlight_turns == 0) { unhighlight = TRUE; } } if (prevcon.highlight_turns > 0) { prevcon.highlight_turns--; if (prevcon.highlight_turns == 0) { unhighlight = TRUE; } } if (prevcha.highlight_turns > 0) { prevcha.highlight_turns--; if (prevcha.highlight_turns == 0) { unhighlight = TRUE; } } if (prevalign.highlight_turns > 0) { prevalign.highlight_turns--; if (prevalign.highlight_turns == 0) { unhighlight = TRUE; } } if (prevau.highlight_turns > 0) { prevau.highlight_turns--; if (prevau.highlight_turns == 0) { unhighlight = TRUE; } } if (prevhp.highlight_turns > 0) { prevhp.highlight_turns--; if (prevhp.highlight_turns == 0) { unhighlight = TRUE; } } if (prevmhp.highlight_turns > 0) { prevmhp.highlight_turns--; if (prevmhp.highlight_turns == 0) { unhighlight = TRUE; } } if (prevlevel.highlight_turns > 0) { prevlevel.highlight_turns--; if (prevlevel.highlight_turns == 0) { unhighlight = TRUE; } } if (prevpow.highlight_turns > 0) { prevpow.highlight_turns--; if (prevpow.highlight_turns == 0) { unhighlight = TRUE; } } if (prevmpow.highlight_turns > 0) { prevmpow.highlight_turns--; if (prevmpow.highlight_turns == 0) { unhighlight = TRUE; } } if (prevac.highlight_turns > 0) { prevac.highlight_turns--; if (prevac.highlight_turns == 0) { unhighlight = TRUE; } } #ifdef EXP_ON_BOTL if (prevexp.highlight_turns > 0) { prevexp.highlight_turns--; if (prevexp.highlight_turns == 0) { unhighlight = TRUE; } } #endif if (prevtime.highlight_turns > 0) { prevtime.highlight_turns--; if (prevtime.highlight_turns == 0) { unhighlight = TRUE; } } #ifdef SCORE_ON_BOTL if (prevscore.highlight_turns > 0) { prevscore.highlight_turns--; if (prevscore.highlight_turns == 0) { unhighlight = TRUE; } } #endif if (prevhunger.highlight_turns > 0) { prevhunger.highlight_turns--; if (prevhunger.highlight_turns == 0) { unhighlight = TRUE; } } if (prevconf.highlight_turns > 0) { prevconf.highlight_turns--; if (prevconf.highlight_turns == 0) { unhighlight = TRUE; } } if (prevblind.highlight_turns > 0) { prevblind.highlight_turns--; if (prevblind.highlight_turns == 0) { unhighlight = TRUE; } } if (prevstun.highlight_turns > 0) { prevstun.highlight_turns--; if (prevstun.highlight_turns == 0) { unhighlight = TRUE; } } if (prevhallu.highlight_turns > 0) { prevhallu.highlight_turns--; if (prevhallu.highlight_turns == 0) { unhighlight = TRUE; } } if (prevsick.highlight_turns > 0) { prevsick.highlight_turns--; if (prevsick.highlight_turns == 0) { unhighlight = TRUE; } } if (prevslime.highlight_turns > 0) { prevslime.highlight_turns--; if (prevslime.highlight_turns == 0) { unhighlight = TRUE; } } if (prevencumb.highlight_turns > 0) { prevencumb.highlight_turns--; if (prevencumb.highlight_turns == 0) { unhighlight = TRUE; } } if (unhighlight) { curses_update_stats(); } } /* Initialize the stats with beginning values. */ static void init_stats() { char buf[BUFSZ]; int count; /* Player name and title */ strcpy(buf, plname); if ('a' <= buf[0] && buf[0] <= 'z') buf[0] += 'A'-'a'; strcat(buf, " the "); if (u.mtimedone) { char mname[BUFSZ]; int k = 0; strcpy(mname, mons[u.umonnum].mname); while(mname[k] != 0) { if ((k == 0 || (k > 0 && mname[k-1] == ' ')) && 'a' <= mname[k] && mname[k] <= 'z') { mname[k] += 'A' - 'a'; } k++; } strcat(buf, mname); } else { strcat(buf, rank_of(u.ulevel, pl_character[0], flags.female)); } prevname.txt = curses_copy_of(buf); prevname.display = TRUE; prevname.highlight_turns = 0; prevname.label = NULL; /* Strength */ if (ACURR(A_STR) > 118) { sprintf(buf, "%d", ACURR(A_STR) - 100); } else if (ACURR(A_STR)==118) { sprintf(buf, "18/**"); } else if(ACURR(A_STR) > 18) { sprintf(buf, "18/%02d", ACURR(A_STR) - 18); } else { sprintf(buf, "%d", ACURR(A_STR)); } prevstr.value = ACURR(A_STR); prevstr.txt = curses_copy_of(buf); prevstr.display = TRUE; prevstr.highlight_turns = 0; prevstr.label = curses_copy_of("Str:"); /* Intelligence */ sprintf(buf, "%d", ACURR(A_INT)); prevint.value = ACURR(A_INT); prevint.txt = curses_copy_of(buf); prevint.display = TRUE; prevint.highlight_turns = 0; prevint.label = curses_copy_of("Int:"); /* Wisdom */ sprintf(buf, "%d", ACURR(A_WIS)); prevwis.value = ACURR(A_WIS); prevwis.txt = curses_copy_of(buf); prevwis.display = TRUE; prevwis.highlight_turns = 0; prevwis.label = curses_copy_of("Wis:"); /* Dexterity */ sprintf(buf, "%d", ACURR(A_DEX)); prevdex.value = ACURR(A_DEX); prevdex.txt = curses_copy_of(buf); prevdex.display = TRUE; prevdex.highlight_turns = 0; prevdex.label = curses_copy_of("Dex:"); /* Constitution */ sprintf(buf, "%d", ACURR(A_CON)); prevcon.value = ACURR(A_CON); prevcon.txt = curses_copy_of(buf); prevcon.display = TRUE; prevcon.highlight_turns = 0; prevcon.label = curses_copy_of("Con:"); /* Charisma */ sprintf(buf, "%d", ACURR(A_CHA)); prevcha.value = ACURR(A_CHA); prevcha.txt = curses_copy_of(buf); prevcha.display = TRUE; prevcha.highlight_turns = 0; prevcha.label = curses_copy_of("Cha:"); /* Alignment */ switch (u.ualign.type) { case A_LAWFUL: { prevalign.txt = curses_copy_of("Lawful"); break; } case A_NEUTRAL: { prevalign.txt = curses_copy_of("Neutral"); break; } case A_CHAOTIC: { prevalign.txt = curses_copy_of("Chaotic"); break; } } prevalign.alignment = u.ualign.type; prevalign.display = TRUE; prevalign.highlight_turns = 0; prevalign.label = NULL; /* Dungeon level */ if (In_endgame(&u.uz)) { strcpy(buf, (Is_astralevel(&u.uz) ? "Astral Plane":"End Game")); } else { sprintf(buf, "%d", depth(&u.uz)); } prevdepth.value = depth(&u.uz); prevdepth.txt = curses_copy_of(buf); prevdepth.display = TRUE; prevdepth.highlight_turns = 0; prevdepth.label = curses_copy_of("Dlvl:"); /* Gold */ #ifndef GOLDOBJ sprintf(buf,"%ld", u.ugold); prevau.value = u.ugold; #else sprintf(buf,"%ld", money_cnt(invent)); prevau.value = money_cnt(invent); #endif prevau.txt = curses_copy_of(buf); prevau.display = TRUE; prevau.highlight_turns = 0; sprintf(buf, "%c:", GOLD_SYM); prevau.label = curses_copy_of(buf); /* Hit Points */ if (u.mtimedone) /* Currently polymorphed - show monster HP */ { prevhp.value = u.mh; sprintf(buf, "%d", u.mh); prevhp.txt = curses_copy_of(buf); } else if (u.uhp != prevhp.value) /* Not polymorphed */ { prevhp.value = u.uhp; sprintf(buf, "%d", u.uhp); prevhp.txt = curses_copy_of(buf); } prevhp.display = TRUE; prevhp.highlight_turns = 0; prevhp.label = curses_copy_of("HP:"); /* Max Hit Points */ if (u.mtimedone) /* Currently polymorphed - show monster HP */ { prevmhp.value = u.mhmax; sprintf(buf, "%d", u.mhmax); prevmhp.txt = curses_copy_of(buf); } else /* Not polymorphed */ { prevmhp.value = u.uhpmax; sprintf(buf, "%d", u.uhpmax); prevmhp.txt = curses_copy_of(buf); } prevmhp.display = TRUE; prevmhp.highlight_turns = 0; prevmhp.label = curses_copy_of("/"); /* Power */ prevpow.value = u.uen; sprintf(buf, "%d", u.uen); prevpow.txt = curses_copy_of(buf); prevpow.display = TRUE; prevpow.highlight_turns = 0; prevpow.label = curses_copy_of("Pw:"); /* Max Power */ prevmpow.value = u.uenmax; sprintf(buf, "%d", u.uenmax); prevmpow.txt = curses_copy_of(buf); prevmpow.display = TRUE; prevmpow.highlight_turns = 0; prevmpow.label = curses_copy_of("/"); /* Armor Class */ prevac.value = u.uac; sprintf(buf, "%d", u.uac); prevac.txt = curses_copy_of(buf); prevac.display = TRUE; prevac.highlight_turns = 0; prevac.label = curses_copy_of("AC:"); /* Experience */ #ifdef EXP_ON_BOTL prevexp.value = u.uexp; sprintf(buf, "%ld", u.uexp); prevexp.txt = curses_copy_of(buf); prevexp.display = flags.showexp; prevexp.highlight_turns = 0; prevexp.label = curses_copy_of("Xp:"); #endif /* Level */ if (u.mtimedone) /* Currently polymorphed - show monster HP */ { prevlevel.value = mons[u.umonnum].mlevel; sprintf(buf, "%d", mons[u.umonnum].mlevel); prevlevel.txt = curses_copy_of(buf); prevlevel.label = curses_copy_of("HD:"); } else if (u.ulevel != prevlevel.value) /* Not polymorphed */ { prevlevel.value = u.ulevel; sprintf(buf, "%d", u.ulevel); prevlevel.txt = curses_copy_of(buf); if (prevexp.display) { prevlevel.label = curses_copy_of("/"); } else { prevlevel.label = curses_copy_of("Lvl:"); } } prevlevel.display = TRUE; prevlevel.highlight_turns = 0; /* Time */ prevtime.value = moves; sprintf(buf, "%ld", moves); prevtime.txt = curses_copy_of(buf); prevtime.display = flags.time; prevtime.highlight_turns = 0; prevtime.label = curses_copy_of("T:"); /* Score */ #ifdef SCORE_ON_BOTL prevscore.value = botl_score(); sprintf(buf, "%ld", botl_score()); prevscore.txt = curses_copy_of(buf); prevscore.display = flags.showscore; prevscore.highlight_turns = 0; prevscore.label = curses_copy_of("S:"); #endif /* Hunger */ prevhunger.value = u.uhs; for (count = 0; count < strlen(hu_stat[u.uhs]); count++) { if ((hu_stat[u.uhs][count]) == ' ') { break; } buf[count] = hu_stat[u.uhs][count]; } buf[count] = '\0'; prevhunger.txt = curses_copy_of(buf); prevhunger.display = TRUE; prevhunger.highlight_turns = 0; prevhunger.label = NULL; /* Confusion */ prevconf.value = Confusion; if (Confusion) { prevconf.txt = curses_copy_of("Conf"); } else { prevconf.txt = NULL; } prevconf.display = TRUE; prevconf.highlight_turns = 0; prevconf.label = NULL; /* Blindness */ prevblind.value = Blind; if (Blind) { prevblind.txt = curses_copy_of("Blind"); } else { prevblind.txt = NULL; } prevblind.display = TRUE; prevblind.highlight_turns = 0; prevblind.label = NULL; /* Stun */ prevstun.value = Stunned; if (Stunned) { prevstun.txt = curses_copy_of("Stun"); } else { prevstun.txt = NULL; } prevstun.display = TRUE; prevstun.highlight_turns = 0; prevstun.label = NULL; /* Hallucination */ prevhallu.value = Hallucination; if (Hallucination) { prevhallu.txt = curses_copy_of("Hallu"); } else { prevhallu.txt = NULL; } prevhallu.display = TRUE; prevhallu.highlight_turns = 0; prevhallu.label = NULL; /* Sick */ prevsick.value = Sick; if (Sick) { if (u.usick_type & SICK_VOMITABLE) { prevsick.txt = curses_copy_of("Sick"); } else { prevsick.txt = curses_copy_of("Ill"); } } else { prevsick.txt = NULL; } prevsick.display = TRUE; prevsick.highlight_turns = 0; prevsick.label = NULL; /* Slimed */ prevslime.value = Slimed; if (Slimed) { prevslime.txt = curses_copy_of("Slime"); } else { prevslime.txt = NULL; } prevslime.display = TRUE; prevslime.highlight_turns = 0; prevslime.label = NULL; /* Encumberance */ prevencumb.value = near_capacity(); if (prevencumb.value > UNENCUMBERED) { sprintf(buf, "%s", enc_stat[prevencumb.value]); prevencumb.txt = curses_copy_of(buf); } else { prevencumb.txt = NULL; } prevencumb.display = TRUE; prevencumb.highlight_turns = 0; prevencumb.label = NULL; }