static void idntfy(void) { short ch; object *obj; struct id *id_table; char desc[DCOLS]; AGAIN: ch = pack_letter("what would you like to identify?", ALL_OBJECTS); if (ch == CANCEL) { return; } if (!(obj = get_letter_object(ch))) { message("no such item, try again", 0); message("", 0); check_message(); goto AGAIN; } obj->identified = 1; if (obj->what_is & (SCROL | POTION | WEAPON | ARMOR | WAND | RING)) { id_table = get_id_table(obj); id_table[obj->which_kind].id_status = IDENTIFIED; } get_desc(obj, desc); message(desc, 0); }
void idntfy(void) { short ch; object *obj; struct id *id_table; char desc[ROGUE_COLUMNS]; AGAIN: ch = pack_letter(mesg[260], ALL_OBJECTS); if (ch == CANCEL) { return; } if (!(obj = get_letter_object(ch))) { message(mesg[261], 0); message("", 0); check_message(); goto AGAIN; } obj->identified = 1; if (obj->what_is & (SCROL | POTION | WEAPON | ARMOR | WAND | RING)) { id_table = get_id_table(obj); id_table[obj->which_kind].id_status = IDENTIFIED; } get_desc(obj, desc, 1); message(desc, 0); }
void identify_item( short ichar ) { short ch = 0 ; object *obj; struct id *id_table; char desc[DCOLS]; if( ichar ) ch = ichar ; while( !ch ) /* Until valid input is given...*/ { ch = pack_letter( "What would you like to identify?", ALL_OBJECTS ) ; if( ch == ROGUE_KEY_CANCEL ) { return ; } if( !(obj = get_letter_object(ch)) ) { message( "No such item. Try again.", 0 ) ; message( "", 0 ) ; check_message() ; ch = 0 ; } } obj->identified = 1; if (obj->what_is & (SCROLL | POTION | WEAPON | ARMOR | WAND | RING)) { id_table = get_id_table(obj); id_table[obj->which_kind].id_status = IDENTIFIED; } get_desc( obj, desc, 1 ) ; message(desc, 0); }
void get_desc( object *obj, char *desc, boolean capitalize ) { char *item_name; struct id *id_table; char more_info[32]; short i; if (obj->what_is == AMULET) { if( capitalize ) (void) strcpy(desc, "The Amulet of Yendor ") ; else (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) { if( capitalize ) (void) strcpy(desc, "A ") ; else (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 %s", obj->quantity, item_name ) ; } else { if( capitalize ) sprintf( desc, "A ration of %s", item_name ) ; else sprintf( desc, "a ration of %s", item_name ) ; } } // (zerogue 0.4.1) Add stack description for fruits. else { if( obj->quantity > 1 ) sprintf( desc, "%d %s", obj->quantity, item_name ) ; else { if( capitalize ) sprintf( desc, "A %s", item_name ) ; else sprintf( desc, "a %s", 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 SCROLL: (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 SCROLL: 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 SCROLL: 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->oclass > 0) ? "+" : ""), obj->oclass); (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->oclass); (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%s%s] ", get_armor_class(obj), (obj->is_protected ? "+" : ""), (obj->is_cursed ? "-" : "") ) ; (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"); } }
void get_desc(object *obj, char *desc, bool capitalized) { char *item_name, *p; struct id *id_table; char more_info[32]; short i; *desc = 0; if (obj->what_is == AMULET) { (void) strcpy(desc, mesg[27]); return; } item_name = name_of(obj); if (obj->what_is == GOLD) { znum(desc, obj->quantity, 0); strcat(desc, mesg[28]); return; } if (obj->what_is == WEAPON && obj->quantity > 1) { znum(desc, obj->quantity, 0); strcat(desc, mesg[29]); } else if (obj->what_is == FOOD) { znum(desc, obj->quantity, 0); strcat(desc, (obj->which_kind == RATION) ? mesg[30] : mesg[31]); (void) strcat(desc, item_name); goto ANA; } else if (obj->what_is != ARMOR && obj->quantity > 1) { znum(desc, obj->quantity, 0); strcat(desc, mesg[32]); } 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, id_table[obj->which_kind].title); (void) strcat(desc, mesg[33]); (void) strcat(desc, item_name); 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: p = id_table[obj->which_kind].title; #if defined( EUC ) if (*desc && *p >= ' ' && !(0x80 & *p)) { (void) strcat(desc, " "); } #else /* not EUC(Shift JIS) */ if (*desc && (*p >= ' ' && *p <= '~' || *p >= '\240' && *p < '\340')) { (void) strcat(desc, " "); } #endif /* not EUC */ (void) strcat(desc, p); (void) strcat(desc, mesg[34]); (void) strcat(desc, item_name); break; } break; case IDENTIFIED: ID: switch (obj->what_is) { case SCROL: case POTION: (void) strcat(desc, id_table[obj->which_kind].real); (void) strcat(desc, item_name); break; case RING: (void) strcat(desc, id_table[obj->which_kind].real); if (wizard || obj->identified) { if ((obj->which_kind == DEXTERITY) || (obj->which_kind == ADD_STRENGTH)) { strcpy(more_info, "("); znum(more_info, obj->class, 1); strcat(more_info, ")"); (void) strcat(desc, more_info); } } (void) strcat(desc, item_name); break; case WAND: (void) strcat(desc, id_table[obj->which_kind].real); (void) strcat(desc, item_name); if (wizard || obj->identified) { strcpy(more_info, "["); znum(more_info, obj->class, 0); strcat(more_info, "]"); (void) strcat(desc, more_info); } break; case ARMOR: strcpy(desc, "("); znum(desc, obj->d_enchant, 1); strcat(desc, ")"); (void) strcat(desc, id_table[obj->which_kind].title); strcpy(more_info, "["); znum(more_info, get_armor_class(obj), 0); strcat(more_info, "]"); (void) strcat(desc, more_info); break; case WEAPON: strcat(desc, "("); znum(desc, obj->hit_enchant, 1); strcat(desc, ","); znum(desc, obj->d_enchant, 1); strcat(desc, ")"); (void) strcat(desc, name_of(obj)); break; }