wield.c (2468B)
1 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ 2 /* wield.c - version 1.0.3 */ 3 4 #include "hack.h" 5 extern struct obj zeroobj; 6 7 setuwep(obj) register struct obj *obj; { 8 setworn(obj, W_WEP); 9 } 10 11 dowield() 12 { 13 register struct obj *wep; 14 register int res = 0; 15 16 multi = 0; 17 if(!(wep = getobj("#-)", "wield"))) /* nothing */; 18 else if(uwep == wep) 19 pline("You are already wielding that!"); 20 else if(uwep && uwep->cursed) 21 pline("The %s welded to your hand!", 22 aobjnam(uwep, "are")); 23 else if(wep == &zeroobj) { 24 if(uwep == 0){ 25 pline("You are already empty handed."); 26 } else { 27 setuwep((struct obj *) 0); 28 res++; 29 pline("You are empty handed."); 30 } 31 } else if(uarms && wep->otyp == TWO_HANDED_SWORD) 32 pline("You cannot wield a two-handed sword and wear a shield."); 33 else if(wep->owornmask & (W_ARMOR | W_RING)) 34 pline("You cannot wield that!"); 35 else { 36 setuwep(wep); 37 res++; 38 if(uwep->cursed) 39 pline("The %s %s to your hand!", 40 aobjnam(uwep, "weld"), 41 (uwep->quan == 1) ? "itself" : "themselves"); /* a3 */ 42 else prinv(uwep); 43 } 44 return(res); 45 } 46 47 corrode_weapon(){ 48 if(!uwep || uwep->olet != WEAPON_SYM) return; /* %% */ 49 if(uwep->rustfree) 50 pline("Your %s not affected.", aobjnam(uwep, "are")); 51 else { 52 pline("Your %s!", aobjnam(uwep, "corrode")); 53 uwep->spe--; 54 } 55 } 56 57 chwepon(otmp,amount) 58 register struct obj *otmp; 59 register amount; 60 { 61 register char *color = (amount < 0) ? "black" : "green"; 62 register char *time; 63 if(!uwep || uwep->olet != WEAPON_SYM) { 64 strange_feeling(otmp, 65 (amount > 0) ? "Your hands twitch." 66 : "Your hands itch."); 67 return(0); 68 } 69 70 if(uwep->otyp == WORM_TOOTH && amount > 0) { 71 uwep->otyp = CRYSKNIFE; 72 pline("Your weapon seems sharper now."); 73 uwep->cursed = 0; 74 return(1); 75 } 76 77 if(uwep->otyp == CRYSKNIFE && amount < 0) { 78 uwep->otyp = WORM_TOOTH; 79 pline("Your weapon looks duller now."); 80 return(1); 81 } 82 83 /* there is a (soft) upper limit to uwep->spe */ 84 if(amount > 0 && uwep->spe > 5 && rn2(3)) { 85 pline("Your %s violently green for a while and then evaporate%s.", 86 aobjnam(uwep, "glow"), plur(uwep->quan)); 87 while(uwep) /* let all of them disappear */ 88 /* note: uwep->quan = 1 is nogood if unpaid */ 89 useup(uwep); 90 return(1); 91 } 92 if(!rn2(6)) amount *= 2; 93 time = (amount*amount == 1) ? "moment" : "while"; 94 pline("Your %s %s for a %s.", 95 aobjnam(uwep, "glow"), color, time); 96 uwep->spe += amount; 97 if(amount > 0) uwep->cursed = 0; 98 return(1); 99 }