Example #1
0
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);
}
Example #2
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);
}
Example #3
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);
}
Example #4
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");
	}
}
Example #5
0
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;
	}