Annotation of 43BSDReno/games/hack/hack.do_wear.c, revision 1.1

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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.