static void Resize(Widget w) { XmTabWidget wid = (XmTabWidget)w; Layout(wid); draw_tabs(wid); }
static void ClickAction(Widget w, XEvent *event, String *params,Cardinal *nparams) { XmTabWidget wid = (XmTabWidget)w; Widget tab_wid; XmTabCallbackStruct call_data; XmTabConstraintRec *tab_constraint; tab_wid = search_tab(wid, event); if(!tab_wid) return; change_tab(wid, tab_wid); draw_tabs(wid); tab_constraint = (XmTabConstraintRec *) tab_wid->core.constraints; call_data.reason = XmCR_VALUE_CHANGED; call_data.tab_child = tab_wid; call_data.event = event; if( tab_constraint->tab.tab_label ) { call_data.tab_label = XmStringCopy(tab_constraint->tab.tab_label); } else { call_data.tab_label = XmStringCreateLocalized(XtName(tab_wid));; } XtCallCallbacks(w, XmNvalueChangedCallback, &call_data); XmStringFree(call_data.tab_label); }
int set_traits(WINDOW* w, game* g, player *u, int &points, int max_trait_points) { draw_tabs(w, "TRAITS"); WINDOW* w_description = newwin(3, 78, 21 + getbegy(w), 1 + getbegx(w)); // Track how many good / bad POINTS we have; cap both at MAX_TRAIT_POINTS int num_good = 0, num_bad = 0; for (int i = 0; i < PF_SPLIT; i++) { if (u->has_trait(i)) num_good += traits[i].points; } for (int i = PF_SPLIT + 1; i < PF_MAX; i++) { if (u->has_trait(i)) num_bad += abs(traits[i].points); } for (int i = 0; i < 16; i++) {//preparation: draw disadvantages list mvwprintz(w, 5 + i, 40, c_dkgray, "\ "); if (u->has_trait(PF_SPLIT + 1 + i))//highlight disadvantages mvwprintz(w, 5 + i, 40, COL_TR_BAD_ON_PAS, _(traits[PF_SPLIT + 1 + i].name.c_str())); else mvwprintz(w, 5 + i, 40, COL_TR_BAD_OFF_PAS, _(traits[PF_SPLIT + 1 + i].name.c_str())); }
int set_traits(WINDOW* w, player *u, int &points) { draw_tabs(w, "TRAITS"); WINDOW* w_description = newwin(3, 78, 21 + getbegy(w), 1 + getbegx(w)); // Track how many good / bad POINTS we have; cap both at MAX_TRAIT_POINTS int num_good = 0, num_bad = 0; for (int i = 0; i < PF_SPLIT; i++) { if (u->has_trait(i)) num_good += traits[i].points; } for (int i = PF_SPLIT + 1; i < PF_MAX; i++) { if (u->has_trait(i)) num_bad += abs(traits[i].points); } for (int i = 0; i < 16; i++) { mvwprintz(w, 5 + i, 40, c_dkgray, "\ "); mvwprintz(w, 5 + i, 40, c_dkgray, traits[PF_SPLIT + 1 + i].name.c_str()); } mvwprintz(w,11,32, c_ltgray, "h l"); mvwprintz(w,12,32, c_ltgray, "< >"); mvwprintz(w,13,32, c_ltgray, "4 6"); mvwprintz(w,15,32, c_ltgray, "Space"); mvwprintz(w,16,31, c_ltgray,"Toggles"); int cur_adv = 1, cur_dis = PF_SPLIT + 1, cur_trait, traitmin, traitmax, xoff; nc_color col_on, col_off, hi_on, hi_off; bool using_adv = true; // True if we're selecting advantages, false if we're // selecting disadvantages do { mvwprintz(w, 3, 2, c_ltgray, "Points left: %d ", points); mvwprintz(w, 3,20, c_ltgreen, "%s%d/%d", (num_good < 10 ? " " : ""), num_good, MAX_TRAIT_POINTS); mvwprintz(w, 3,33, c_ltred, "%s%d/%d", (num_bad < 10 ? " " : ""), num_bad, MAX_TRAIT_POINTS); // Clear the bottom of the screen. mvwprintz(w_description, 0, 0, c_ltgray, " "); mvwprintz(w_description, 1, 0, c_ltgray, " "); mvwprintz(w_description, 2, 0, c_ltgray, " "); if (using_adv) { col_on = COL_TR_GOOD_ON; col_off = COL_TR_GOOD_OFF; hi_on = hilite(col_on); hi_off = hilite(col_off); xoff = 2; cur_trait = cur_adv; traitmin = 1; traitmax = PF_SPLIT; mvwprintz(w, 3, 40, c_ltgray, " "); mvwprintz(w, 3, 40, COL_TR_GOOD, "%s costs %d points", traits[cur_adv].name.c_str(), traits[cur_adv].points); mvwprintz(w_description, 0, 0, COL_TR_GOOD, "%s", traits[cur_adv].description.c_str()); } else { col_on = COL_TR_BAD_ON; col_off = COL_TR_BAD_OFF; hi_on = hilite(col_on); hi_off = hilite(col_off); xoff = 40; cur_trait = cur_dis; traitmin = PF_SPLIT + 1; traitmax = PF_MAX; mvwprintz(w, 3, 40, c_ltgray, " "); mvwprintz(w, 3, 40, COL_TR_BAD, "%s earns %d points", traits[cur_dis].name.c_str(), traits[cur_dis].points * -1); mvwprintz(w_description, 0, 0, COL_TR_BAD, "%s", traits[cur_dis].description.c_str()); } if (cur_trait <= traitmin + 7) { for (int i = traitmin; i < traitmin + 16; i++) { mvwprintz(w, 5 + i - traitmin, xoff, c_ltgray, "\ "); // Clear the line if (i == cur_trait) { if (u->has_trait(i)) mvwprintz(w, 5 + i - traitmin, xoff, hi_on, traits[i].name.c_str()); else mvwprintz(w, 5 + i - traitmin, xoff, hi_off, traits[i].name.c_str()); } else { if (u->has_trait(i)) mvwprintz(w, 5 + i - traitmin, xoff, col_on, traits[i].name.c_str()); else mvwprintz(w, 5 + i - traitmin, xoff, col_off, traits[i].name.c_str()); } } } else if (cur_trait >= traitmax - 9) { for (int i = traitmax - 16; i < traitmax; i++) { mvwprintz(w, 21 + i - traitmax, xoff, c_ltgray, "\ "); // Clear the line if (i == cur_trait) { if (u->has_trait(i)) mvwprintz(w, 21 + i - traitmax, xoff, hi_on, traits[i].name.c_str()); else mvwprintz(w, 21 + i - traitmax, xoff, hi_off, traits[i].name.c_str()); } else { if (u->has_trait(i)) mvwprintz(w, 21 + i - traitmax, xoff, col_on, traits[i].name.c_str()); else mvwprintz(w, 21 + i - traitmax, xoff, col_off, traits[i].name.c_str()); } } } else {
int set_stats(WINDOW* w, player *u, int &points) { unsigned char sel = 1; char ch; draw_tabs(w, "STATS"); mvwprintz(w, 11, 2, c_ltgray, "j/k, 8/2, or arrows select"); mvwprintz(w, 12, 2, c_ltgray, " a statistic."); mvwprintz(w, 13, 2, c_ltgray, "l, 6, or right arrow"); mvwprintz(w, 14, 2, c_ltgray, " increases the statistic."); mvwprintz(w, 15, 2, c_ltgray, "h, 4, or left arrow"); mvwprintz(w, 16, 2, c_ltgray, " decreases the statistic."); mvwprintz(w, 18, 2, c_ltgray, "> Takes you to the next tab."); mvwprintz(w, 19, 2, c_ltgray, "< Returns you to the main menu."); do { mvwprintz(w, 3, 2, c_ltgray, "Points left: %d ", points); switch (sel) { case 1: if (u->str_max >= HIGH_STAT) mvwprintz(w, 3, 33, c_ltred, "Increasing Str further costs 2 points."); else mvwprintz(w, 3, 33, c_black, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"); mvwprintz(w, 6, 2, COL_STAT_ACT, "Strength: %d ", u->str_max); mvwprintz(w, 7, 2, c_ltgray, "Dexterity: %d ", u->dex_max); mvwprintz(w, 8, 2, c_ltgray, "Intelligence: %d ", u->int_max); mvwprintz(w, 9, 2, c_ltgray, "Perception: %d ", u->per_max); mvwprintz(w, 6, 33, COL_STAT_ACT, "Base HP: %d ", calc_HP(u->str_max, u->has_trait(PF_TOUGH))); mvwprintz(w, 7, 33, COL_STAT_ACT, "Carry weight: %d lbs ", u->weight_capacity(false) / 4); mvwprintz(w, 8, 33, COL_STAT_ACT, "Melee damage: %d ", u->base_damage(false)); mvwprintz(w,10, 33, COL_STAT_ACT, "Strength also makes you more resistant to "); mvwprintz(w,11, 33, COL_STAT_ACT, "many diseases and poisons, and makes actions"); mvwprintz(w,12, 33, COL_STAT_ACT, "which require brute force more effective. "); break; case 2: if (u->dex_max >= HIGH_STAT) mvwprintz(w, 3, 33, c_ltred, "Increasing Dex further costs 2 points."); else mvwprintz(w, 3, 33, c_black, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"); mvwprintz(w, 6, 2, c_ltgray, "Strength: %d ", u->str_max); mvwprintz(w, 7, 2, COL_STAT_ACT, "Dexterity: %d ", u->dex_max); mvwprintz(w, 8, 2, c_ltgray, "Intelligence: %d ", u->int_max); mvwprintz(w, 9, 2, c_ltgray, "Perception: %d ", u->per_max); mvwprintz(w, 6, 33, COL_STAT_ACT, "Melee to-hit bonus: +%d ", u->base_to_hit(false)); mvwprintz(w, 7, 33, COL_STAT_ACT, " "); mvwprintz(w, 7, 33, COL_STAT_ACT, "Ranged %s: %s%d", (u->ranged_dex_mod(false) <= 0 ? "bonus" : "penalty"), (u->ranged_dex_mod(false) <= 0 ? "+" : "-"), abs(u->ranged_dex_mod(false))); mvwprintz(w, 8, 33, COL_STAT_ACT, " "); mvwprintz(w, 8, 33, COL_STAT_ACT, "Throwing %s: %s%d", (u->throw_dex_mod(false) <= 0 ? "bonus" : "penalty"), (u->throw_dex_mod(false) <= 0 ? "+" : "-"), abs(u->throw_dex_mod(false))); mvwprintz(w, 9, 33, COL_STAT_ACT, " "); mvwprintz(w,10, 33, COL_STAT_ACT, "Dexterity also enhances many actions which "); mvwprintz(w,11, 33, COL_STAT_ACT, "require finesse. "); mvwprintz(w,12, 33, COL_STAT_ACT, " "); break; case 3: if (u->int_max >= HIGH_STAT) mvwprintz(w, 3, 33, c_ltred, "Increasing Int further costs 2 points."); else mvwprintz(w, 3, 33, c_black, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"); mvwprintz(w, 6, 2, c_ltgray, "Strength: %d ", u->str_max); mvwprintz(w, 7, 2, c_ltgray, "Dexterity: %d ", u->dex_max); mvwprintz(w, 8, 2, COL_STAT_ACT, "Intelligence: %d ", u->int_max); mvwprintz(w, 9, 2, c_ltgray, "Perception: %d ", u->per_max); mvwprintz(w, 6, 33, COL_STAT_ACT, "Skill comprehension: %d%%%% ", u->skillLevel("melee").comprehension(u->int_max)); mvwprintz(w, 7, 33, COL_STAT_ACT, "Read times: %d%%%% ", u->read_speed(false)); mvwprintz(w, 8, 33, COL_STAT_ACT, " "); mvwprintz(w, 9, 33, COL_STAT_ACT, "Intelligence is also used when crafting, "); mvwprintz(w,10, 33, COL_STAT_ACT, "installing bionics, and interacting with "); mvwprintz(w,11, 33, COL_STAT_ACT, "NPCs. "); mvwprintz(w,12, 33, COL_STAT_ACT, " "); break; case 4: if (u->per_max >= HIGH_STAT) mvwprintz(w, 3, 33, c_ltred, "Increasing Per further costs 2 points."); else mvwprintz(w, 3, 33, c_black, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"); mvwprintz(w, 6, 2, c_ltgray, "Strength: %d ", u->str_max); mvwprintz(w, 7, 2, c_ltgray, "Dexterity: %d ", u->dex_max); mvwprintz(w, 8, 2, c_ltgray, "Intelligence: %d ", u->int_max); mvwprintz(w, 9, 2, COL_STAT_ACT, "Perception: %d ", u->per_max); mvwprintz(w, 6, 33, COL_STAT_ACT, " "); mvwprintz(w, 6, 33, COL_STAT_ACT, "Ranged %s: %s%d", (u->ranged_per_mod(false) <= 0 ? "bonus" : "penalty"), (u->ranged_per_mod(false) <= 0 ? "+" : "-"), abs(u->ranged_per_mod(false))); mvwprintz(w, 7, 33, COL_STAT_ACT, " "); mvwprintz(w, 8, 33, COL_STAT_ACT, "Perception is also used for detecting "); mvwprintz(w, 9, 33, COL_STAT_ACT, "traps and other things of interest. "); mvwprintz(w,10, 33, COL_STAT_ACT, " "); mvwprintz(w,11, 33, COL_STAT_ACT, " "); mvwprintz(w,12, 33, COL_STAT_ACT, " "); break; } wrefresh(w); ch = input(); if (ch == 'j' && sel < 4) sel++; if (ch == 'k' && sel > 1) sel--; if (ch == 'h') { if (sel == 1 && u->str_max > 4) { if (u->str_max > HIGH_STAT) points++; u->str_max--; points++; } else if (sel == 2 && u->dex_max > 4) { if (u->dex_max > HIGH_STAT) points++; u->dex_max--; points++; } else if (sel == 3 && u->int_max > 4) { if (u->int_max > HIGH_STAT) points++; u->int_max--; points++; } else if (sel == 4 && u->per_max > 4) { if (u->per_max > HIGH_STAT) points++; u->per_max--; points++; } } if (ch == 'l' && points > 0) { if (sel == 1 && u->str_max < 20 && (u->str_max < HIGH_STAT || points > 1)) { points--; if (u->str_max >= HIGH_STAT) points--; u->str_max++; } else if (sel == 2 && u->dex_max < 20 && (u->dex_max < HIGH_STAT || points > 1)) { points--; if (u->dex_max >= HIGH_STAT) points--; u->dex_max++; } else if (sel == 3 && u->int_max < 20 && (u->int_max < HIGH_STAT || points > 1)) { points--; if (u->int_max >= HIGH_STAT) points--; u->int_max++; } else if (sel == 4 && u->per_max < 20 && (u->per_max < HIGH_STAT || points > 1)) { points--; if (u->per_max >= HIGH_STAT) points--; u->per_max++; } } if (ch == '<' && query_yn("Return to main menu?")) return -1; if (ch == '>') return 1; } while (true); }
int set_stats(WINDOW* w, game* g, player *u, int &points) { unsigned char sel = 1; char ch; draw_tabs(w, "STATS"); mvwprintz(w, 11, 2, c_ltgray, _("j/k, 8/2, or arrows")); mvwprintz(w, 12, 2, c_ltgray, _(" select a statistic.")); mvwprintz(w, 13, 2, c_ltgray, _("l, 6, or right arrow")); mvwprintz(w, 14, 2, c_ltgray, _(" increase the statistic.")); mvwprintz(w, 15, 2, c_ltgray, _("h, 4, or left arrow")); mvwprintz(w, 16, 2, c_ltgray, _(" decrease the statistic.")); mvwprintz(w, 18, 2, c_ltgray, _("> Takes you to the next tab.")); mvwprintz(w, 19, 2, c_ltgray, _("< Returns you to the main menu.")); const char clear[] = " "; do { mvwprintz(w, 3, 2, c_ltgray, _("Points left:%3d"), points); mvwprintz(w, 3, 33, c_black, clear); for (int i = 6; i < 15; i++) { mvwprintz(w, i, 33, c_black, clear); } mvwprintz(w, 6, 2, c_ltgray, _("Strength: %2d"), u->str_max); mvwprintz(w, 7, 2, c_ltgray, _("Dexterity: %2d"), u->dex_max); mvwprintz(w, 8, 2, c_ltgray, _("Intelligence: %2d"), u->int_max); mvwprintz(w, 9, 2, c_ltgray, _("Perception: %2d"), u->per_max); switch (sel) { case 1: mvwprintz(w, 6, 2, COL_STAT_ACT, _("Strength: %2d"), u->str_max); if (u->str_max >= HIGH_STAT) { mvwprintz(w, 3, 33, c_ltred, _("Increasing Str further costs 2 points.")); } mvwprintz(w, 6, 33, COL_STAT_ACT, _("Base HP: %d"), calc_HP(u->str_max, u->has_trait(PF_TOUGH))); mvwprintz(w, 7, 33, COL_STAT_ACT, _("Carry weight: %d lbs"), u->weight_capacity(false) / 4); mvwprintz(w, 8, 33, COL_STAT_ACT, _("Melee damage: %d"), u->base_damage(false)); fold_and_print(w, 10, 33, 45, COL_STAT_ACT, _("Strength also makes you more resistant to many diseases and poisons, and makes actions which require brute force more effective.")); break; case 2: mvwprintz(w, 7, 2, COL_STAT_ACT, _("Dexterity: %2d"), u->dex_max); if (u->dex_max >= HIGH_STAT) { mvwprintz(w, 3, 33, c_ltred, _("Increasing Dex further costs 2 points.")); } mvwprintz(w, 6, 33, COL_STAT_ACT, _("Melee to-hit bonus: +%d"), u->base_to_hit(false)); mvwprintz(w, 7, 33, COL_STAT_ACT, _("Ranged penalty: -%d"), abs(u->ranged_dex_mod(false))); if (u->throw_dex_mod(false) <= 0) { mvwprintz(w, 8, 33, COL_STAT_ACT, _("Throwing bonus: +%d"), abs(u->throw_dex_mod(false))); } else { mvwprintz(w, 8, 33, COL_STAT_ACT, _("Throwing penalty: -%d"), abs(u->throw_dex_mod(false))); } fold_and_print(w, 10, 33, 45, COL_STAT_ACT, _("Dexterity also enhances many actions which require finesse.")); break; case 3: mvwprintz(w, 8, 2, COL_STAT_ACT, _("Intelligence: %2d"), u->int_max); if (u->int_max >= HIGH_STAT) { mvwprintz(w, 3, 33, c_ltred, _("Increasing Int further costs 2 points.")); } mvwprintz(w, 6, 33, COL_STAT_ACT, _("Read times: %d%%%%"), u->read_speed(false)); fold_and_print(w, 8, 33, 45, COL_STAT_ACT, _("Intelligence is also used when crafting, installing bionics, and interacting with NPCs.")); break; case 4: mvwprintz(w, 9, 2, COL_STAT_ACT, _("Perception: %2d"), u->per_max); if (u->per_max >= HIGH_STAT) { mvwprintz(w, 3, 33, c_ltred, _("Increasing Per further costs 2 points.")); } mvwprintz(w, 6, 33, COL_STAT_ACT, _("Ranged penalty: -%d"), abs(u->ranged_per_mod(false))); fold_and_print(w, 8, 33, 45, COL_STAT_ACT, _("Perception is also used for detecting traps and other things of interest.")); break; } wrefresh(w); ch = input(); if (ch == 'j' && sel < 4) sel++; if (ch == 'k' && sel > 1) sel--; if (ch == 'h') { if (sel == 1 && u->str_max > 4) { if (u->str_max > HIGH_STAT) points++; u->str_max--; points++; } else if (sel == 2 && u->dex_max > 4) { if (u->dex_max > HIGH_STAT) points++; u->dex_max--; points++; } else if (sel == 3 && u->int_max > 4) { if (u->int_max > HIGH_STAT) points++; u->int_max--; points++; } else if (sel == 4 && u->per_max > 4) { if (u->per_max > HIGH_STAT) points++; u->per_max--; points++; } } if (ch == 'l' && points > 0) { if (sel == 1 && u->str_max < 20 && (u->str_max < HIGH_STAT || points > 1)) { points--; if (u->str_max >= HIGH_STAT) points--; u->str_max++; } else if (sel == 2 && u->dex_max < 20 && (u->dex_max < HIGH_STAT || points > 1)) { points--; if (u->dex_max >= HIGH_STAT) points--; u->dex_max++; } else if (sel == 3 && u->int_max < 20 && (u->int_max < HIGH_STAT || points > 1)) { points--; if (u->int_max >= HIGH_STAT) points--; u->int_max++; } else if (sel == 4 && u->per_max < 20 && (u->per_max < HIGH_STAT || points > 1)) { points--; if (u->per_max >= HIGH_STAT) points--; u->per_max++; } } if (ch == '<' && query_yn(_("Return to main menu?"))) return -1; if (ch == '>') return 1; } while (true); }
static void ReDisplay(Widget w, XEvent *event, Region region) { XmTabWidget wid = (XmTabWidget)w; draw_tabs(wid); }