/* * COMMAND3.C: * * Additional user routines. * * Copyright (C) 1991, 1992, 1993, 1997 Brooke Paul & Brett Vickers * */ #include "mstruct.h" #include "mextern.h" #ifdef DMALLOC #include "/usr/local/include/dmalloc.h" #endif /**********************************************************************/ /* wear */ /**********************************************************************/ /* This function allows the player pointed to by the first parameter */ /* to wear an item specified in the pointer to the command structure */ /* in the second parameter. That is, if the item is wearable. */ int wear(ply_ptr, cmnd) creature *ply_ptr; cmd *cmnd; { room *rom_ptr; object *obj_ptr; int fd, i, cantwear=0, class; fd = ply_ptr->fd; if(cmnd->num < 2) { print(fd, "Wear what?\n"); return(0); } rom_ptr = ply_ptr->parent_rom; F_CLR(ply_ptr, PHIDDN); if(cmnd->num > 1) { if(!strcmp(cmnd->str[1], "all")) { wear_all(ply_ptr); return(0); } obj_ptr = find_obj(ply_ptr, ply_ptr->first_obj, cmnd->str[1], cmnd->val[1]); if(!obj_ptr) { print(fd, "You don't have that.\n"); return(0); } if(!obj_ptr->wearflag || obj_ptr->wearflag == WIELD || obj_ptr->wearflag == HELD) { print(fd, "You can't wear that.\n"); return(0); } if(obj_ptr->type == ARMOR && F_ISSET(obj_ptr, ONOMAG) && ply_ptr->class == MAGE) { print(fd, "Mages may not wear that.\n"); return(0); } if(obj_ptr->type == ARMOR && F_ISSET(obj_ptr, ONOFEM) && !F_ISSET(ply_ptr,PMALES)) { print(fd, "Only males may wear that.\n"); return(0); } if(obj_ptr->type == ARMOR && F_ISSET(obj_ptr, ONOMAL) && F_ISSET(ply_ptr,PMALES)) { print(fd, "Only females may wear that.\n"); return(0); } if(obj_ptr->wearflag == NECK && ply_ptr->ready[NECK1-1] && ply_ptr->ready[NECK2-1]) { print(fd, "You can't wear anymore on your neck.\n"); return(0); } if(obj_ptr->wearflag == FINGER && ply_ptr->ready[FINGER1-1] && ply_ptr->ready[FINGER2-1] && ply_ptr->ready[FINGER3-1] && ply_ptr->ready[FINGER4-1] && ply_ptr->ready[FINGER5-1] && ply_ptr->ready[FINGER6-1] && ply_ptr->ready[FINGER7-1] && ply_ptr->ready[FINGER8-1]) { print(fd, "You don't have any more fingers left.\n"); return(0); } if(obj_ptr->wearflag != NECK && obj_ptr->wearflag != FINGER && ply_ptr->ready[obj_ptr->wearflag-1]) { print(fd, "You're already wearing something there.\n"); return(0); } if(obj_ptr->shotscur < 1) { print(fd, "You can't. It's broken.\n"); return(0); } if(F_ISSET(obj_ptr, OGOODO) && ply_ptr->alignment < -50) { print(fd, "%I shocks you and you drop it.\n", obj_ptr); broadcast_rom(fd, ply_ptr->rom_num, "%M is shocked by %i.", ply_ptr, obj_ptr); del_obj_crt(obj_ptr, ply_ptr); add_obj_rom(obj_ptr, ply_ptr->parent_rom); return(0); } if(F_ISSET(obj_ptr, OEVILO) && ply_ptr->alignment > 50) { print(fd, "%I shocks you and you drop it.\n", obj_ptr); broadcast_rom(fd, ply_ptr->rom_num, "%M is shocked by %i.", ply_ptr, obj_ptr); del_obj_crt(obj_ptr, ply_ptr); add_obj_rom(obj_ptr, ply_ptr->parent_rom); return(0); } if (F_ISSET(obj_ptr,OPLDGK) && (BOOL(F_ISSET(obj_ptr,OKNGDM)) != BOOL(F_ISSET(ply_ptr,PKNGDM)))){ print(fd, "You are unable to wear %i.\n",obj_ptr); return(0); } if(ply_ptr->class > 10) class = ply_ptr->class + 11; else class = ply_ptr->class; if(F_ISSET(obj_ptr,OCLSEL)) if(!F_ISSET(obj_ptr,OCLSEL + class) && ( ply_ptr->class < CARETAKER)){ print(fd, "Your class prevents you from wearing %i.\n",obj_ptr); return(0); } if(!F_ISSET(obj_ptr, OCLSEL + class) && obj_ptr->armor >5 && (ply_ptr->class == MONK || ply_ptr->class == MAGE)){ print(fd, "Your class prevents you from wearing %i.\n",obj_ptr); return(0); } if((obj_ptr->wearflag == FINGER||obj_ptr->wearflag ==SHIELD) && ply_ptr->class == MONK) { print(fd, "Your class prevents you from wearing %i.\n",obj_ptr); return(0); } i = (F_ISSET(obj_ptr, OSIZE1) ? 1:0) * 2 + (F_ISSET(obj_ptr, OSIZE2) ? 1:0); switch(i) { case 1: if(ply_ptr->race != GNOME && ply_ptr->race != HOBBIT && ply_ptr->race != DWARF) cantwear = 1; break; case 2: if(ply_ptr->race != HUMAN && ply_ptr->race != ELF && ply_ptr->race != DARKELF && ply_ptr->race != GOBLIN && ply_ptr->race != HALFORC && ply_ptr->race != HALFELF && ply_ptr->race != ORC) cantwear = 1; break; case 3: if(ply_ptr->race != HALFGIANT && ply_ptr->race != OGRE && ply_ptr->race != TROLL) cantwear = 1; break; } if(cantwear && ply_ptr->class < CARETAKER) { print(fd, "%I doesn't fit you.\n", obj_ptr); return(0); } del_obj_crt(obj_ptr, ply_ptr); switch(obj_ptr->wearflag) { case BODY: case ARMS: case LEGS: case HANDS: case HEAD: case FEET: case FACE: case HELD: case SHIELD: ply_ptr->ready[obj_ptr->wearflag-1] = obj_ptr; break; case NECK: if(ply_ptr->ready[NECK1-1]) ply_ptr->ready[NECK2-1] = obj_ptr; else ply_ptr->ready[NECK1-1] = obj_ptr; break; case FINGER: for(i=FINGER1; i<FINGER8+1; i++) { if(!ply_ptr->ready[i-1]) { ply_ptr->ready[i-1] = obj_ptr; break; } } break; } } compute_ac(ply_ptr); print(fd, "You wear %1i.\n", obj_ptr); broadcast_rom(fd, rom_ptr->rom_num, "%M wore %1i.", ply_ptr, obj_ptr); if(obj_ptr->use_output[0]) print(fd, "%s\n", obj_ptr->use_output); F_SET(obj_ptr, OWEARS); if(F_ISSET(obj_ptr, OCURSE)) F_SET(obj_ptr, OCURSW); return(0); } /**********************************************************************/ /* wear_all */ /**********************************************************************/ /* This function allows a player to wear everything in his inventory that */ /* he possibly can. */ void wear_all(ply_ptr) creature *ply_ptr; { object *obj_ptr; otag *op, *temp; char str[4096], str2[85]; int fd, i, found=0, cantwear=0, class; str[0] = 0; fd = ply_ptr->fd; op = ply_ptr->first_obj; while(op) { temp = op->next_tag; if((F_ISSET(ply_ptr, PDINVI) ? 1:!F_ISSET(op->obj, OINVIS)) && op->obj->wearflag && op->obj->wearflag != HELD && op->obj->wearflag != WIELD) { obj_ptr = op->obj; if(obj_ptr->type == ARMOR && F_ISSET(obj_ptr, ONOMAG) && ply_ptr->class == MAGE) { op = temp; continue; } if(obj_ptr->type == ARMOR && F_ISSET(obj_ptr, ONOFEM) && !F_ISSET(ply_ptr,PMALES)) { op = temp; continue; } if(obj_ptr->type == ARMOR && F_ISSET(obj_ptr, ONOMAL) && F_ISSET(ply_ptr,PMALES)) { op = temp; continue; } if(obj_ptr->wearflag == NECK && ply_ptr->ready[NECK1-1] && ply_ptr->ready[NECK2-1]) { op = temp; continue; } if(obj_ptr->wearflag == FINGER && ply_ptr->ready[FINGER1-1] && ply_ptr->ready[FINGER2-1] && ply_ptr->ready[FINGER3-1] && ply_ptr->ready[FINGER4-1] && ply_ptr->ready[FINGER5-1] && ply_ptr->ready[FINGER6-1] && ply_ptr->ready[FINGER7-1] && ply_ptr->ready[FINGER8-1]) { op = temp; continue; } if(obj_ptr->wearflag != NECK && obj_ptr->wearflag != FINGER && ply_ptr->ready[obj_ptr->wearflag-1]) { op = temp; continue; } if(obj_ptr->shotscur < 1) { op = temp; continue; } if (F_ISSET(obj_ptr,OPLDGK) && (BOOL(F_ISSET(obj_ptr,OKNGDM)) != BOOL(F_ISSET(ply_ptr,PKNGDM)))){ op = temp; continue; } if(ply_ptr->class > 10) class = ply_ptr->class + 11; else class = ply_ptr->class; if(F_ISSET(obj_ptr,OCLSEL)) if(!F_ISSET(obj_ptr,OCLSEL + class) && ( ply_ptr->class < CARETAKER)){ op = temp; continue; } if(!F_ISSET(obj_ptr,OCLSEL + class) && (ply_ptr->class== MONK || ply_ptr->class == MAGE) && obj_ptr->armor >5){ op = temp; continue; } if((obj_ptr->wearflag == FINGER||obj_ptr->wearflag ==SHIELD) && ply_ptr->class == MONK){ op=temp; continue; } if(F_ISSET(obj_ptr, OGOODO) && ply_ptr->alignment < -50) { op = temp; continue; } if(F_ISSET(obj_ptr, OEVILO) && ply_ptr->alignment > 50) { op = temp; continue; } i = (F_ISSET(obj_ptr, OSIZE1) ? 1:0) * 2 + (F_ISSET(obj_ptr, OSIZE2) ? 1:0); switch(i) { case 1: if(ply_ptr->race != GNOME && ply_ptr->race != HOBBIT && ply_ptr->race != DWARF) cantwear = 1; break; case 2: if(ply_ptr->race != HUMAN && ply_ptr->race != ELF && ply_ptr->race != DARKELF && ply_ptr->race != GOBLIN && ply_ptr->race != HALFELF && ply_ptr->race != HALFORC && ply_ptr->race != ORC) cantwear = 1; break; case 3: if(ply_ptr->race != HALFGIANT && ply_ptr->race != OGRE && ply_ptr->race != TROLL) cantwear = 1; break; } if(cantwear) { op = temp; cantwear = 0; continue; } if(obj_ptr->wearflag == NECK) { if(ply_ptr->ready[NECK1-1]) ply_ptr->ready[NECK2-1] = obj_ptr; else ply_ptr->ready[NECK1-1] = obj_ptr; F_SET(obj_ptr, OWEARS); } else if(obj_ptr->wearflag == FINGER && ply_ptr->class != MONK) { for(i=FINGER1; i<FINGER8+1; i++) { if(!ply_ptr->ready[i-1]) { ply_ptr->ready[i-1] = obj_ptr; F_SET(obj_ptr, OWEARS); break; } } } else { ply_ptr->ready[obj_ptr->wearflag-1] = obj_ptr; if(obj_ptr->use_output[0]) print(fd, "%s\n", obj_ptr->use_output); F_SET(obj_ptr, OWEARS); } sprintf(str2, "%s, ", obj_str(obj_ptr, 1, 0)); strcat(str, str2); del_obj_crt(obj_ptr, ply_ptr); if(F_ISSET(obj_ptr, OCURSE)) F_SET(obj_ptr, OCURSW); found = 1; } op = temp; } if(found) { compute_ac(ply_ptr); str[strlen(str)-2] = 0; print(fd, "You wear %s.\n", str); broadcast_rom(fd, ply_ptr->rom_num, "%M wears %s.", ply_ptr, str); } else print(fd, "You have nothing you can wear.\n"); } /**********************************************************************/ /* remove */ /**********************************************************************/ /* This function allows the player pointed to by the first parameter to */ /* remove the item specified by the command structure in the second */ /* parameter from those things which he is wearing. */ int remove_obj(ply_ptr, cmnd) creature *ply_ptr; cmd *cmnd; { room *rom_ptr; object *obj_ptr; int fd, found=0, match=0, i; fd = ply_ptr->fd; if(cmnd->num < 2) { print(fd, "Remove what?\n"); return(0); } rom_ptr = ply_ptr->parent_rom; F_CLR(ply_ptr, PHIDDN); i = 0; if(cmnd->num > 1) { if(!strcmp(cmnd->str[1], "all")) { remove_all(ply_ptr); return(0); } while(i<20) { obj_ptr = ply_ptr->ready[i]; if(!obj_ptr) { i++; continue; } if(EQUAL(obj_ptr, cmnd->str[1]) && (F_ISSET(ply_ptr, PDINVI) ? 1:!F_ISSET(obj_ptr, OINVIS))) { match++; if(match == cmnd->val[1]) { found = 1; break; } } i++; } if(!found) { print(fd, "You aren't using that.\n"); return(0); } if(F_ISSET(obj_ptr, OCURSE)) { print(fd, "You can't. It's cursed!\n"); return(0); } add_obj_crt(obj_ptr, ply_ptr); ply_ptr->ready[i] = 0; compute_ac(ply_ptr); compute_thaco(ply_ptr); print(fd, "You removed %1i.\n", obj_ptr); broadcast_rom(fd, rom_ptr->rom_num, "%M removed %1i.", ply_ptr, obj_ptr); F_CLR(obj_ptr, OWEARS); } return(0); } /**********************************************************************/ /* remove_all */ /**********************************************************************/ /* This function allows the player pointed to in the first parameter */ /* to remove everything he is wearing all at once. */ void remove_all(ply_ptr) creature *ply_ptr; { char str[4096], str2[85]; int fd, i, found=0; fd = ply_ptr->fd; str[0] = 0; for(i=0; i<MAXWEAR; i++) { if(ply_ptr->ready[i] && !F_ISSET(ply_ptr->ready[i], OCURSE)) { sprintf(str2,"%s, ", obj_str(ply_ptr->ready[i], 1, 0)); strcat(str, str2); F_CLR(ply_ptr->ready[i], OWEARS); add_obj_crt(ply_ptr->ready[i], ply_ptr); ply_ptr->ready[i] = 0; found = 1; } } if(!found) { print(fd,"You aren't wearing anything that can be removed.\n"); return; } compute_ac(ply_ptr); compute_thaco(ply_ptr); str[strlen(str)-2] = 0; broadcast_rom(fd, ply_ptr->rom_num, "%M removes %s.", ply_ptr, str); print(fd, "You remove %s.\n", str); } /**********************************************************************/ /* equipment */ /**********************************************************************/ /* This function outputs to the player all of the equipment that he is */ /* wearing/wielding/holding on his body. */ int equipment(crt_ptr, cmnd) creature *crt_ptr; cmd *cmnd; { int fd = crt_ptr->fd; int i, found=0; for(i=0; i<MAXWEAR; i++) if(crt_ptr->ready[i]) found = 1; if(!found) { print(fd, "You aren't wearing anything.\n"); return(0); } if(F_ISSET(crt_ptr, PBLIND)) { ANSI(fd, RED); print(fd, "You can't see anything...You're Blind!\n"); ANSI(fd, WHITE); return(0); } equip_list(fd, crt_ptr); return(0); } /**********************************************************************/ /* equip_list */ /**********************************************************************/ void equip_list(fd, crt_ptr) int fd; creature *crt_ptr; { if(crt_ptr->ready[BODY-1]) print(fd, "On body: %1i\n", crt_ptr->ready[BODY-1]); if(crt_ptr->ready[ARMS-1]) print(fd, "On arms: %1i\n", crt_ptr->ready[ARMS-1]); if(crt_ptr->ready[LEGS-1]) print(fd, "On legs: %1i\n", crt_ptr->ready[LEGS-1]); if(crt_ptr->ready[NECK1-1]) print(fd, "On neck: %1i\n", crt_ptr->ready[NECK1-1]); if(crt_ptr->ready[NECK2-1]) print(fd, "On neck: %1i\n", crt_ptr->ready[NECK2-1]); if(crt_ptr->ready[HANDS-1]) print(fd, "On hands: %1i\n", crt_ptr->ready[HANDS-1]); if(crt_ptr->ready[HEAD-1]) print(fd, "On head: %1i\n", crt_ptr->ready[HEAD-1]); if(crt_ptr->ready[FEET-1]) print(fd, "On feet: %1i\n", crt_ptr->ready[FEET-1]); if(crt_ptr->ready[FACE-1]) print(fd, "On face: %1i\n", crt_ptr->ready[FACE-1]); if(crt_ptr->ready[FINGER1-1]) print(fd, "On finger: %1i\n", crt_ptr->ready[FINGER1-1]); if(crt_ptr->ready[FINGER2-1]) print(fd, "On finger: %1i\n", crt_ptr->ready[FINGER2-1]); if(crt_ptr->ready[FINGER3-1]) print(fd, "On finger: %1i\n", crt_ptr->ready[FINGER3-1]); if(crt_ptr->ready[FINGER4-1]) print(fd, "On finger: %1i\n", crt_ptr->ready[FINGER4-1]); if(crt_ptr->ready[FINGER5-1]) print(fd, "On finger: %1i\n", crt_ptr->ready[FINGER5-1]); if(crt_ptr->ready[FINGER6-1]) print(fd, "On finger: %1i\n", crt_ptr->ready[FINGER6-1]); if(crt_ptr->ready[FINGER7-1]) print(fd, "On finger: %1i\n", crt_ptr->ready[FINGER7-1]); if(crt_ptr->ready[FINGER8-1]) print(fd, "On finger: %1i\n", crt_ptr->ready[FINGER8-1]); if(crt_ptr->ready[HELD-1]) print(fd, "Holding: %1i\n", crt_ptr->ready[HELD-1]); if(crt_ptr->ready[SHIELD-1]) print(fd, "Shield: %1i\n", crt_ptr->ready[SHIELD-1]); if(crt_ptr->ready[WIELD-1]) print(fd, "Wielded: %1i\n", crt_ptr->ready[WIELD-1]); } /**********************************************************************/ /* ready */ /**********************************************************************/ /* This function allows the player pointed to by the first parameter to */ /* ready a weapon specified in the second, if it is a weapon. */ int ready(ply_ptr, cmnd) creature *ply_ptr; cmd *cmnd; { object *obj_ptr; int fd, i, cantwear=0,class; fd = ply_ptr->fd; if(cmnd->num < 2) { print(fd, "Wield what?\n"); return(0); } F_CLR(ply_ptr, PHIDDN); if(cmnd->num > 1) { obj_ptr = find_obj(ply_ptr, ply_ptr->first_obj, cmnd->str[1], cmnd->val[1]); if(!obj_ptr) { print(fd, "You don't have that.\n"); return(0); } if(obj_ptr->wearflag != WIELD) { print(fd, "You can't wield that.\n"); return(0); } if(ply_ptr->ready[WIELD-1]) { print(fd, "You're already wielding something.\n"); return(0); } if (F_ISSET(obj_ptr,OPLDGK) && (BOOL(F_ISSET(obj_ptr,OKNGDM)) != BOOL(F_ISSET(ply_ptr,PKNGDM)))){ print(fd, "You are unable to wield %i.\n",obj_ptr); return(0); } if(ply_ptr->class > 10) class = ply_ptr->class + 11; else class = ply_ptr->class; if(F_ISSET(obj_ptr,OCLSEL)) if(!F_ISSET(obj_ptr,OCLSEL + class) && ( ply_ptr->class < CARETAKER)){ print(fd, "Your class prevents you from wielding %i.\n",obj_ptr); return(0); } if(F_ISSET(obj_ptr, OGOODO) && ply_ptr->alignment < -50) { print(fd, "%I shocks you and you drop it.\n", obj_ptr); broadcast_rom(fd, ply_ptr->rom_num, "%M is shocked by %i.", ply_ptr, obj_ptr); del_obj_crt(obj_ptr, ply_ptr); add_obj_rom(obj_ptr, ply_ptr->parent_rom); return(0); } if(F_ISSET(obj_ptr, OEVILO) && ply_ptr->alignment > 50) { print(fd, "%I shocks you and you drop it.\n", obj_ptr); broadcast_rom(fd, ply_ptr->rom_num, "%M is shocked by %i.", ply_ptr, obj_ptr); del_obj_crt(obj_ptr, ply_ptr); add_obj_rom(obj_ptr, ply_ptr->parent_rom); return(0); } i = (F_ISSET(obj_ptr, OSIZE1) ? 1:0) * 2 + (F_ISSET(obj_ptr, OSIZE2) ? 1:0); switch(i) { case 1: if(ply_ptr->race != GNOME && ply_ptr->race != HOBBIT && ply_ptr->race != DWARF) cantwear = 1; break; case 2: if(ply_ptr->race != HUMAN && ply_ptr->race != ELF && ply_ptr->race != HALFELF && ply_ptr->race != DARKELF && ply_ptr->race != GOBLIN && ply_ptr->race != HALFORC && ply_ptr->race != ORC) cantwear = 1; break; case 3: if(ply_ptr->race != HALFGIANT && ply_ptr->race != OGRE && ply_ptr->race != TROLL) cantwear = 1; break; } if(cantwear && ply_ptr->class < CARETAKER) { print(fd, "%I isn't the right size for you.\n", obj_ptr); return(0); } ply_ptr->ready[WIELD-1] = obj_ptr; compute_thaco(ply_ptr); del_obj_crt(obj_ptr, ply_ptr); print(fd, "You wield %1i.\n", obj_ptr); broadcast_rom(fd, ply_ptr->rom_num, "%M wields %1i.", ply_ptr, obj_ptr); if(obj_ptr->use_output[0]) print(fd, "%s\n", obj_ptr->use_output); if(F_ISSET(obj_ptr, OCURSE)) F_SET(obj_ptr, OCURSW); F_SET(obj_ptr, OWEARS); } return(0); } /**********************************************************************/ /* hold */ /**********************************************************************/ /* This function allows a player to hold an item if it is designated */ /* as a hold-able item. */ int hold(ply_ptr, cmnd) creature *ply_ptr; cmd *cmnd; { object *obj_ptr; int fd, found=0, match=0,class; fd = ply_ptr->fd; if(cmnd->num < 2) { print(fd, "Hold what?\n"); return(0); } F_CLR(ply_ptr, PHIDDN); if(cmnd->num > 1) { obj_ptr = find_obj(ply_ptr, ply_ptr->first_obj, cmnd->str[1], cmnd->val[1]); if(!obj_ptr) { print(fd, "You don't have that.\n"); return(0); } if(obj_ptr->wearflag != HELD) { print(fd, "You can't hold that.\n"); return(0); } if(ply_ptr->ready[HELD-1]) { print(fd, "You're already holding something.\n"); return(0); } if (F_ISSET(obj_ptr,OPLDGK) && (BOOL(F_ISSET(obj_ptr,OKNGDM)) != BOOL(F_ISSET(ply_ptr,PKNGDM)))){ print(fd, "You are unable to hold %i.\n",obj_ptr); return(0); } if(ply_ptr->class > 10) class = ply_ptr->class + 11; else class = ply_ptr->class; if(F_ISSET(obj_ptr,OCLSEL)) if(!F_ISSET(obj_ptr,OCLSEL + class) && ( ply_ptr->class < CARETAKER)){ print(fd, "Your class prevents you from holding %i.\n",obj_ptr); return(0); } if(F_ISSET(obj_ptr, OGOODO) && ply_ptr->alignment < -50) { print(fd, "%I shocks you and you drop it.\n", obj_ptr); broadcast_rom(fd, ply_ptr->rom_num, "%M is shocked by %i.", ply_ptr, obj_ptr); del_obj_crt(obj_ptr, ply_ptr); add_obj_rom(obj_ptr, ply_ptr->parent_rom); return(0); } if(F_ISSET(obj_ptr, OEVILO) && ply_ptr->alignment > 50) { print(fd, "%I shocks you and you drop it.\n", obj_ptr); broadcast_rom(fd, ply_ptr->rom_num, "%M is shocked by %i.", ply_ptr, obj_ptr); del_obj_crt(obj_ptr, ply_ptr); add_obj_rom(obj_ptr, ply_ptr->parent_rom); return(0); } ply_ptr->ready[HELD-1] = obj_ptr; del_obj_crt(obj_ptr, ply_ptr); print(fd, "You hold %1i.\n", obj_ptr); broadcast_rom(fd, ply_ptr->rom_num, "%M holds %1i.", ply_ptr, obj_ptr); if(obj_ptr->use_output[0] && (obj_ptr->type != POTION || obj_ptr->type != WAND)) print(fd, "%s\n", obj_ptr->use_output); if(F_ISSET(obj_ptr, OCURSE)) F_SET(obj_ptr, OCURSW); F_SET(obj_ptr, OWEARS); } return(0); }