|
|
1.1 ! root 1: /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ ! 2: /* hack.do_wear.c - version 1.0.3 */ ! 3: ! 4: #include "hack.h" ! 5: #include <stdio.h> ! 6: extern char *nomovemsg; ! 7: extern char quitchars[]; ! 8: extern char *Doname(); ! 9: ! 10: off_msg(otmp) register struct obj *otmp; { ! 11: pline("You were wearing %s.", doname(otmp)); ! 12: } ! 13: ! 14: doremarm() { ! 15: register struct obj *otmp; ! 16: if(!uarm && !uarmh && !uarms && !uarmg) { ! 17: pline("Not wearing any armor."); ! 18: return(0); ! 19: } ! 20: otmp = (!uarmh && !uarms && !uarmg) ? uarm : ! 21: (!uarms && !uarm && !uarmg) ? uarmh : ! 22: (!uarmh && !uarm && !uarmg) ? uarms : ! 23: (!uarmh && !uarm && !uarms) ? uarmg : ! 24: getobj("[", "take off"); ! 25: if(!otmp) return(0); ! 26: if(!(otmp->owornmask & (W_ARMOR - W_ARM2))) { ! 27: pline("You can't take that off."); ! 28: return(0); ! 29: } ! 30: if( otmp == uarmg && uwep && uwep->cursed ) { /* myers@uwmacc */ ! 31: pline("You seem not able to take off the gloves while holding your weapon."); ! 32: return(0); ! 33: } ! 34: (void) armoroff(otmp); ! 35: return(1); ! 36: } ! 37: ! 38: doremring() { ! 39: if(!uleft && !uright){ ! 40: pline("Not wearing any ring."); ! 41: return(0); ! 42: } ! 43: if(!uleft) ! 44: return(dorr(uright)); ! 45: if(!uright) ! 46: return(dorr(uleft)); ! 47: if(uleft && uright) while(1) { ! 48: char answer; ! 49: ! 50: pline("What ring, Right or Left? [ rl?]"); ! 51: if(index(quitchars, (answer = readchar()))) ! 52: return(0); ! 53: switch(answer) { ! 54: case 'l': ! 55: case 'L': ! 56: return(dorr(uleft)); ! 57: case 'r': ! 58: case 'R': ! 59: return(dorr(uright)); ! 60: case '?': ! 61: (void) doprring(); ! 62: /* might look at morc here %% */ ! 63: } ! 64: } ! 65: /* NOTREACHED */ ! 66: #ifdef lint ! 67: return(0); ! 68: #endif lint ! 69: } ! 70: ! 71: dorr(otmp) register struct obj *otmp; { ! 72: if(cursed(otmp)) return(0); ! 73: ringoff(otmp); ! 74: off_msg(otmp); ! 75: return(1); ! 76: } ! 77: ! 78: cursed(otmp) register struct obj *otmp; { ! 79: if(otmp->cursed){ ! 80: pline("You can't. It appears to be cursed."); ! 81: return(1); ! 82: } ! 83: return(0); ! 84: } ! 85: ! 86: armoroff(otmp) register struct obj *otmp; { ! 87: register int delay = -objects[otmp->otyp].oc_delay; ! 88: if(cursed(otmp)) return(0); ! 89: setworn((struct obj *) 0, otmp->owornmask & W_ARMOR); ! 90: if(delay) { ! 91: nomul(delay); ! 92: switch(otmp->otyp) { ! 93: case HELMET: ! 94: nomovemsg = "You finished taking off your helmet."; ! 95: break; ! 96: case PAIR_OF_GLOVES: ! 97: nomovemsg = "You finished taking off your gloves"; ! 98: break; ! 99: default: ! 100: nomovemsg = "You finished taking off your suit."; ! 101: } ! 102: } else { ! 103: off_msg(otmp); ! 104: } ! 105: return(1); ! 106: } ! 107: ! 108: doweararm() { ! 109: register struct obj *otmp; ! 110: register int delay; ! 111: register int err = 0; ! 112: long mask = 0; ! 113: ! 114: otmp = getobj("[", "wear"); ! 115: if(!otmp) return(0); ! 116: if(otmp->owornmask & W_ARMOR) { ! 117: pline("You are already wearing that!"); ! 118: return(0); ! 119: } ! 120: if(otmp->otyp == HELMET){ ! 121: if(uarmh) { ! 122: pline("You are already wearing a helmet."); ! 123: err++; ! 124: } else ! 125: mask = W_ARMH; ! 126: } else if(otmp->otyp == SHIELD){ ! 127: if(uarms) pline("You are already wearing a shield."), err++; ! 128: if(uwep && uwep->otyp == TWO_HANDED_SWORD) ! 129: pline("You cannot wear a shield and wield a two-handed sword."), err++; ! 130: if(!err) mask = W_ARMS; ! 131: } else if(otmp->otyp == PAIR_OF_GLOVES) { ! 132: if(uarmg) { ! 133: pline("You are already wearing gloves."); ! 134: err++; ! 135: } else ! 136: if(uwep && uwep->cursed) { ! 137: pline("You cannot wear gloves over your weapon."); ! 138: err++; ! 139: } else ! 140: mask = W_ARMG; ! 141: } else { ! 142: if(uarm) { ! 143: if(otmp->otyp != ELVEN_CLOAK || uarm2) { ! 144: pline("You are already wearing some armor."); ! 145: err++; ! 146: } ! 147: } ! 148: if(!err) mask = W_ARM; ! 149: } ! 150: if(otmp == uwep && uwep->cursed) { ! 151: if(!err++) ! 152: pline("%s is welded to your hand.", Doname(uwep)); ! 153: } ! 154: if(err) return(0); ! 155: setworn(otmp, mask); ! 156: if(otmp == uwep) ! 157: setuwep((struct obj *) 0); ! 158: delay = -objects[otmp->otyp].oc_delay; ! 159: if(delay){ ! 160: nomul(delay); ! 161: nomovemsg = "You finished your dressing manoeuvre."; ! 162: } ! 163: otmp->known = 1; ! 164: return(1); ! 165: } ! 166: ! 167: dowearring() { ! 168: register struct obj *otmp; ! 169: long mask = 0; ! 170: long oldprop; ! 171: ! 172: if(uleft && uright){ ! 173: pline("There are no more ring-fingers to fill."); ! 174: return(0); ! 175: } ! 176: otmp = getobj("=", "wear"); ! 177: if(!otmp) return(0); ! 178: if(otmp->owornmask & W_RING) { ! 179: pline("You are already wearing that!"); ! 180: return(0); ! 181: } ! 182: if(otmp == uleft || otmp == uright) { ! 183: pline("You are already wearing that."); ! 184: return(0); ! 185: } ! 186: if(otmp == uwep && uwep->cursed) { ! 187: pline("%s is welded to your hand.", Doname(uwep)); ! 188: return(0); ! 189: } ! 190: if(uleft) mask = RIGHT_RING; ! 191: else if(uright) mask = LEFT_RING; ! 192: else do { ! 193: char answer; ! 194: ! 195: pline("What ring-finger, Right or Left? "); ! 196: if(index(quitchars, (answer = readchar()))) ! 197: return(0); ! 198: switch(answer){ ! 199: case 'l': ! 200: case 'L': ! 201: mask = LEFT_RING; ! 202: break; ! 203: case 'r': ! 204: case 'R': ! 205: mask = RIGHT_RING; ! 206: break; ! 207: } ! 208: } while(!mask); ! 209: setworn(otmp, mask); ! 210: if(otmp == uwep) ! 211: setuwep((struct obj *) 0); ! 212: oldprop = u.uprops[PROP(otmp->otyp)].p_flgs; ! 213: u.uprops[PROP(otmp->otyp)].p_flgs |= mask; ! 214: switch(otmp->otyp){ ! 215: case RIN_LEVITATION: ! 216: if(!oldprop) float_up(); ! 217: break; ! 218: case RIN_PROTECTION_FROM_SHAPE_CHANGERS: ! 219: rescham(); ! 220: break; ! 221: case RIN_GAIN_STRENGTH: ! 222: u.ustr += otmp->spe; ! 223: u.ustrmax += otmp->spe; ! 224: if(u.ustr > 118) u.ustr = 118; ! 225: if(u.ustrmax > 118) u.ustrmax = 118; ! 226: flags.botl = 1; ! 227: break; ! 228: case RIN_INCREASE_DAMAGE: ! 229: u.udaminc += otmp->spe; ! 230: break; ! 231: } ! 232: prinv(otmp); ! 233: return(1); ! 234: } ! 235: ! 236: ringoff(obj) ! 237: register struct obj *obj; ! 238: { ! 239: register long mask; ! 240: mask = obj->owornmask & W_RING; ! 241: setworn((struct obj *) 0, obj->owornmask); ! 242: if(!(u.uprops[PROP(obj->otyp)].p_flgs & mask)) ! 243: impossible("Strange... I didnt know you had that ring."); ! 244: u.uprops[PROP(obj->otyp)].p_flgs &= ~mask; ! 245: switch(obj->otyp) { ! 246: case RIN_FIRE_RESISTANCE: ! 247: /* Bad luck if the player is in hell... --jgm */ ! 248: if (!Fire_resistance && dlevel >= 30) { ! 249: pline("The flames of Hell burn you to a crisp."); ! 250: killer = "stupidity in hell"; ! 251: done("burned"); ! 252: } ! 253: break; ! 254: case RIN_LEVITATION: ! 255: if(!Levitation) { /* no longer floating */ ! 256: float_down(); ! 257: } ! 258: break; ! 259: case RIN_GAIN_STRENGTH: ! 260: u.ustr -= obj->spe; ! 261: u.ustrmax -= obj->spe; ! 262: if(u.ustr > 118) u.ustr = 118; ! 263: if(u.ustrmax > 118) u.ustrmax = 118; ! 264: flags.botl = 1; ! 265: break; ! 266: case RIN_INCREASE_DAMAGE: ! 267: u.udaminc -= obj->spe; ! 268: break; ! 269: } ! 270: } ! 271: ! 272: find_ac(){ ! 273: register int uac = 10; ! 274: if(uarm) uac -= ARM_BONUS(uarm); ! 275: if(uarm2) uac -= ARM_BONUS(uarm2); ! 276: if(uarmh) uac -= ARM_BONUS(uarmh); ! 277: if(uarms) uac -= ARM_BONUS(uarms); ! 278: if(uarmg) uac -= ARM_BONUS(uarmg); ! 279: if(uleft && uleft->otyp == RIN_PROTECTION) uac -= uleft->spe; ! 280: if(uright && uright->otyp == RIN_PROTECTION) uac -= uright->spe; ! 281: if(uac != u.uac){ ! 282: u.uac = uac; ! 283: flags.botl = 1; ! 284: } ! 285: } ! 286: ! 287: glibr(){ ! 288: register struct obj *otmp; ! 289: int xfl = 0; ! 290: if(!uarmg) if(uleft || uright) { ! 291: /* Note: at present also cursed rings fall off */ ! 292: pline("Your %s off your fingers.", ! 293: (uleft && uright) ? "rings slip" : "ring slips"); ! 294: xfl++; ! 295: if((otmp = uleft) != Null(obj)){ ! 296: ringoff(uleft); ! 297: dropx(otmp); ! 298: } ! 299: if((otmp = uright) != Null(obj)){ ! 300: ringoff(uright); ! 301: dropx(otmp); ! 302: } ! 303: } ! 304: if((otmp = uwep) != Null(obj)){ ! 305: /* Note: at present also cursed weapons fall */ ! 306: setuwep((struct obj *) 0); ! 307: dropx(otmp); ! 308: pline("Your weapon %sslips from your hands.", ! 309: xfl ? "also " : ""); ! 310: } ! 311: } ! 312: ! 313: struct obj * ! 314: some_armor(){ ! 315: register struct obj *otmph = uarm; ! 316: if(uarmh && (!otmph || !rn2(4))) otmph = uarmh; ! 317: if(uarmg && (!otmph || !rn2(4))) otmph = uarmg; ! 318: if(uarms && (!otmph || !rn2(4))) otmph = uarms; ! 319: return(otmph); ! 320: } ! 321: ! 322: corrode_armor(){ ! 323: register struct obj *otmph = some_armor(); ! 324: if(otmph){ ! 325: if(otmph->rustfree || ! 326: otmph->otyp == ELVEN_CLOAK || ! 327: otmph->otyp == LEATHER_ARMOR || ! 328: otmph->otyp == STUDDED_LEATHER_ARMOR) { ! 329: pline("Your %s not affected!", ! 330: aobjnam(otmph, "are")); ! 331: return; ! 332: } ! 333: pline("Your %s!", aobjnam(otmph, "corrode")); ! 334: otmph->spe--; ! 335: } ! 336: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.