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

1.1     ! root        1: /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
        !             2: /* hack.worn.c - version 1.0.2 */
        !             3: 
        !             4: #include "hack.h"
        !             5: 
        !             6: struct worn {
        !             7:        long w_mask;
        !             8:        struct obj **w_obj;
        !             9: } worn[] = {
        !            10:        { W_ARM, &uarm },
        !            11:        { W_ARM2, &uarm2 },
        !            12:        { W_ARMH, &uarmh },
        !            13:        { W_ARMS, &uarms },
        !            14:        { W_ARMG, &uarmg },
        !            15:        { W_RINGL, &uleft },
        !            16:        { W_RINGR, &uright },
        !            17:        { W_WEP, &uwep },
        !            18:        { W_BALL, &uball },
        !            19:        { W_CHAIN, &uchain },
        !            20:        { 0, 0 }
        !            21: };
        !            22: 
        !            23: setworn(obj, mask)
        !            24: register struct obj *obj;
        !            25: long mask;
        !            26: {
        !            27:        register struct worn *wp;
        !            28:        register struct obj *oobj;
        !            29: 
        !            30:        for(wp = worn; wp->w_mask; wp++) if(wp->w_mask & mask) {
        !            31:                oobj = *(wp->w_obj);
        !            32:                if(oobj && !(oobj->owornmask & wp->w_mask))
        !            33:                        impossible("Setworn: mask = %ld.", wp->w_mask);
        !            34:                if(oobj) oobj->owornmask &= ~wp->w_mask;
        !            35:                if(obj && oobj && wp->w_mask == W_ARM){
        !            36:                        if(uarm2) {
        !            37:                                impossible("Setworn: uarm2 set?");
        !            38:                        } else
        !            39:                                setworn(uarm, W_ARM2);
        !            40:                }
        !            41:                *(wp->w_obj) = obj;
        !            42:                if(obj) obj->owornmask |= wp->w_mask;
        !            43:        }
        !            44:        if(uarm2 && !uarm) {
        !            45:                uarm = uarm2;
        !            46:                uarm2 = 0;
        !            47:                uarm->owornmask ^= (W_ARM | W_ARM2);
        !            48:        }
        !            49: }
        !            50: 
        !            51: /* called e.g. when obj is destroyed */
        !            52: setnotworn(obj) register struct obj *obj; {
        !            53:        register struct worn *wp;
        !            54: 
        !            55:        for(wp = worn; wp->w_mask; wp++)
        !            56:                if(obj == *(wp->w_obj)) {
        !            57:                        *(wp->w_obj) = 0;
        !            58:                        obj->owornmask &= ~wp->w_mask;
        !            59:                }
        !            60:        if(uarm2 && !uarm) {
        !            61:                uarm = uarm2;
        !            62:                uarm2 = 0;
        !            63:                uarm->owornmask ^= (W_ARM | W_ARM2);
        !            64:        }
        !            65: }

unix.superglobalmegacorp.com

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