📄 inventory.c
字号:
(ch == '\016') || (ch == '\002')) { char until[18], buf[DCOLS]; int n; if (ch <= '\031') { ch += 96; (void) strcpy(until, "until adjascent"); } else { ch += 32; until[0] = '\0'; } (void) get_com_id(&n, ch); sprintf(buf, "run %s %s", com_id_tab[n].com_desc + 8, until); check_message(); message(buf, 0); return(1); } else { return(0); }}mix_colors(){ short i, j, k; char *t; for (i = 0; i <= 32; i++) { j = get_rand(0, (POTIONS - 1)); k = get_rand(0, (POTIONS - 1)); t = id_potions[j].title; id_potions[j].title = id_potions[k].title; id_potions[k].title = t; }}make_scroll_titles(){ short i, j, n; short sylls, s; for (i = 0; i < SCROLS; i++) { sylls = get_rand(2, 5); (void) strcpy(id_scrolls[i].title, "'"); for (j = 0; j < sylls; j++) { s = get_rand(1, (MAXSYLLABLES-1)); (void) strcat(id_scrolls[i].title, syllables[s]); } n = strlen(id_scrolls[i].title); (void) strcpy(id_scrolls[i].title+(n-1), "' "); }}get_desc(obj, desc)object *obj;char *desc;{ char *item_name; struct id *id_table; char more_info[32]; short i; if (obj->what_is == AMULET) { (void) strcpy(desc, "the amulet of Yendor "); return; } item_name = name_of(obj); if (obj->what_is == GOLD) { sprintf(desc, "%d pieces of gold", obj->quantity); return; } if (obj->what_is != ARMOR) { if (obj->quantity == 1) { (void) strcpy(desc, "a "); } else { sprintf(desc, "%d ", obj->quantity); } } if (obj->what_is == FOOD) { if (obj->which_kind == RATION) { if (obj->quantity > 1) { sprintf(desc, "%d rations of ", obj->quantity); } else { (void) strcpy(desc, "some "); } } else { (void) strcpy(desc, "a "); } (void) strcat(desc, item_name); goto ANA; } id_table = get_id_table(obj); if (wizard) { goto ID; } if (obj->what_is & (WEAPON | ARMOR | WAND | RING)) { goto CHECK; } switch(id_table[obj->which_kind].id_status) { case UNIDENTIFIED:CHECK: switch(obj->what_is) { case SCROL: (void) strcat(desc, item_name); (void) strcat(desc, "entitled: "); (void) strcat(desc, id_table[obj->which_kind].title); break; case POTION: (void) strcat(desc, id_table[obj->which_kind].title); (void) strcat(desc, item_name); break; case WAND: case RING: if (obj->identified || (id_table[obj->which_kind].id_status == IDENTIFIED)) { goto ID; } if (id_table[obj->which_kind].id_status == CALLED) { goto CALL; } (void) strcat(desc, id_table[obj->which_kind].title); (void) strcat(desc, item_name); break; case ARMOR: if (obj->identified) { goto ID; } (void) strcpy(desc, id_table[obj->which_kind].title); break; case WEAPON: if (obj->identified) { goto ID; } (void) strcat(desc, name_of(obj)); break; } break; case CALLED:CALL: switch(obj->what_is) { case SCROL: case POTION: case WAND: case RING: (void) strcat(desc, item_name); (void) strcat(desc, "called "); (void) strcat(desc, id_table[obj->which_kind].title); break; } break; case IDENTIFIED:ID: switch(obj->what_is) { case SCROL: case POTION: (void) strcat(desc, item_name); (void) strcat(desc, id_table[obj->which_kind].real); break; case RING: if (wizard || obj->identified) { if ((obj->which_kind == DEXTERITY) || (obj->which_kind == ADD_STRENGTH)) { sprintf(more_info, "%s%d ", ((obj->class > 0) ? "+" : ""), obj->class); (void) strcat(desc, more_info); } } (void) strcat(desc, item_name); (void) strcat(desc, id_table[obj->which_kind].real); break; case WAND: (void) strcat(desc, item_name); (void) strcat(desc, id_table[obj->which_kind].real); if (wizard || obj->identified) { sprintf(more_info, "[%d]", obj->class); (void) strcat(desc, more_info); } break; case ARMOR: sprintf(desc, "%s%d ", ((obj->d_enchant >= 0) ? "+" : ""), obj->d_enchant); (void) strcat(desc, id_table[obj->which_kind].title); sprintf(more_info, "[%d] ", get_armor_class(obj)); (void) strcat(desc, more_info); break; case WEAPON: sprintf(desc+strlen(desc), "%s%d,%s%d ", ((obj->hit_enchant >= 0) ? "+" : ""), obj->hit_enchant, ((obj->d_enchant >= 0) ? "+" : ""), obj->d_enchant); (void) strcat(desc, name_of(obj)); break; } break; }ANA: if (!strncmp(desc, "a ", 2)) { if (is_vowel(desc[2])) { for (i = strlen(desc) + 1; i > 1; i--) { desc[i] = desc[i-1]; } desc[1] = 'n'; } } if (obj->in_use_flags & BEING_WIELDED) { (void) strcat(desc, "in hand"); } else if (obj->in_use_flags & BEING_WORN) { (void) strcat(desc, "being worn"); } else if (obj->in_use_flags & ON_LEFT_HAND) { (void) strcat(desc, "on left hand"); } else if (obj->in_use_flags & ON_RIGHT_HAND) { (void) strcat(desc, "on right hand"); }}get_wand_and_ring_materials(){ short i, j; boolean used[WAND_MATERIALS]; for (i = 0; i < WAND_MATERIALS; i++) { used[i] = 0; } for (i = 0; i < WANDS; i++) { do { j = get_rand(0, WAND_MATERIALS-1); } while (used[j]); used[j] = 1; (void) strcpy(id_wands[i].title, wand_materials[j]); is_wood[i] = (j > MAX_METAL); } for (i = 0; i < GEMS; i++) { used[i] = 0; } for (i = 0; i < RINGS; i++) { do { j = get_rand(0, GEMS-1); } while (used[j]); used[j] = 1; (void) strcpy(id_rings[i].title, gems[j]); }}single_inv(ichar)short ichar;{ short ch; char desc[DCOLS]; object *obj; ch = ichar ? ichar : pack_letter("inventory what?", ALL_OBJECTS); if (ch == CANCEL) { return; } if (!(obj = get_letter_object(ch))) { message("no such item.", 0); return; } desc[0] = ch; desc[1] = ((obj->what_is & ARMOR) && obj->is_protected) ? '}' : ')'; desc[2] = ' '; desc[3] = 0; get_desc(obj, desc+3); message(desc, 0);}struct id *get_id_table(obj)object *obj;{ switch(obj->what_is) { case SCROL: return(id_scrolls); case POTION: return(id_potions); case WAND: return(id_wands); case RING: return(id_rings); case WEAPON: return(id_weapons); case ARMOR: return(id_armors); } return((struct id *) 0);}inv_armor_weapon(is_weapon)boolean is_weapon;{ if (is_weapon) { if (rogue.weapon) { single_inv(rogue.weapon->ichar); } else { message("not wielding anything", 0); } } else { if (rogue.armor) { single_inv(rogue.armor->ichar); } else { message("not wearing anything", 0); } }}id_type(){ char *id; int ch; char buf[DCOLS]; message("what do you want identified?", 0); ch = rgetchar(); if ((ch >= 'A') && (ch <= 'Z')) { id = m_names[ch-'A']; } else if (ch < 32) { check_message(); return; } else { switch(ch) { case '@': id = "you"; break; case '%': id = "staircase"; break; case '^': id = "trap"; break; case '+': id = "door"; break; case '-': case '|': id = "wall of a room"; break; case '.': id = "floor"; break; case '#': id = "passage"; break; case ' ': id = "solid rock"; break; case '=': id = "ring"; break; case '?': id = "scroll"; break; case '!': id = "potion"; break; case '/': id = "wand or staff"; break; case ')': id = "weapon"; break; case ']': id = "armor"; break; case '*': id = "gold"; break; case ':': id = "food"; break; case ',': id = "the Amulet of Yendor"; break; default: id = "unknown character"; break; } } check_message(); sprintf(buf, "'%c': %s", ch, id); message(buf, 0);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -